diff options
-rw-r--r-- | IDEAS.md | 2 | ||||
-rw-r--r-- | README.md | 8 | ||||
-rw-r--r-- | VERSION | 4 | ||||
-rw-r--r-- | bin/d2u.sh | 2 | ||||
-rw-r--r-- | bin/sd2u.awk | 6 | ||||
-rw-r--r-- | bin/su2d.awk | 6 | ||||
-rw-r--r-- | bin/u2d.sh | 3 | ||||
-rw-r--r-- | man/man1/d2u.1df | 2 | ||||
-rw-r--r-- | man/man1/sd2u.1df | 2 | ||||
-rw-r--r-- | man/man1/su2d.1df | 2 | ||||
-rw-r--r-- | man/man1/u2d.1df | 2 | ||||
-rw-r--r-- | vim/command.vim | 39 | ||||
-rw-r--r-- | vim/config/command.vim | 4 | ||||
-rw-r--r-- | vim/config/format.vim | 6 | ||||
-rw-r--r-- | vim/config/leader.vim | 3 | ||||
-rw-r--r-- | vim/config/list.vim | 2 | ||||
-rw-r--r-- | vim/config/number.vim | 2 | ||||
-rw-r--r-- | vim/config/search.vim | 4 | ||||
-rw-r--r-- | vim/config/spell.vim | 6 | ||||
-rw-r--r-- | vim/config/whitespace.vim | 2 | ||||
-rw-r--r-- | vim/config/wrap.vim | 4 | ||||
-rw-r--r-- | vim/ftplugin/html.vim | 24 | ||||
-rw-r--r-- | vim/ftplugin/perl.vim | 17 | ||||
-rw-r--r-- | vim/ftplugin/sh.vim | 22 | ||||
-rw-r--r-- | vim/ftplugin/vim.vim | 5 |
25 files changed, 96 insertions, 83 deletions
@@ -19,8 +19,6 @@ Ideas * I can probably get rid of all that nasty templated shell by writing something that wraps around td(1df) and generates shell script to run, and calls that via `eval`. -* The BigFileMeasures() function in .vim/config/bigfile.vim should maybe be a - self-contained plugin rather than a config subfile. * Ideally, the .awk and/or .sed scripts in the bin and games dirs should be syntax-checked or linted. I could at least add some patient application of appropriate `gawk --lint` calls for each of the .awk scripts. @@ -342,8 +342,12 @@ The configuration is broken into subfiles in `~/.vim/config/*.vim`, included by extensively commented, mostly because I was reading through it one day and realised I'd forgotten what half of it did. -Plugins are in submodules in `~/.vim/bundle`, loaded using Tim Pope's -[pathogen.vim](https://github.com/tpope/vim-pathogen). +I define a few custom per-filetype rules for stuff I often edit in +`~/.vim/ftplugin`, including some local mappings for checking, linting, and +tidying. + +Third-party plugins are in submodules in `~/.vim/bundle`, loaded using Tim +Pope's [pathogen.vim](https://github.com/tpope/vim-pathogen). Scripts ------- @@ -1,2 +1,2 @@ -tejr dotfiles v0.4.2 -Fri Nov 3 07:10:09 UTC 2017 +tejr dotfiles v0.5.0 +Fri Nov 3 12:05:08 UTC 2017 @@ -16,7 +16,7 @@ for fn ; do # $r within it to get a literal carriage return; the escape characters # prescribed for ed(1) by POSIX are very limited ed -s -- "$fn" <<EOF || ex=1 -g/$r\$/ s/$r\$// +,s/$r\$// w EOF done diff --git a/bin/sd2u.awk b/bin/sd2u.awk index 02584952..b6e3da89 100644 --- a/bin/sd2u.awk +++ b/bin/sd2u.awk @@ -1,3 +1,3 @@ -# Convert DOS line endings to UNIX ones -{ sub(/\r$/, "") } -{ print } +# Convert stream DOS line endings to UNIX ones +BEGIN { RS = "\r\n" } +1 diff --git a/bin/su2d.awk b/bin/su2d.awk index 34a8c5ae..5a8eabaf 100644 --- a/bin/su2d.awk +++ b/bin/su2d.awk @@ -1,3 +1,3 @@ -# Convert UNIX line endings to DOS ones -!/\r$/ { $0 = $0 "\r" } -{ print } +# Convert stream UNIX line endings to DOS ones +BEGIN { ORS = "\r\n" } +1 @@ -16,8 +16,7 @@ for fn ; do # $r within it to get a literal carriage return; the escape characters # prescribed for ed(1) by POSIX are very limited ed -s -- "$fn" <<EOF || ex=1 -g/[^$r]\$/ s/\$/$r/ -g/^\$/ s/\$/$r/ +,s/\$/$r/ w EOF done diff --git a/man/man1/d2u.1df b/man/man1/d2u.1df index 18c27829..c652434c 100644 --- a/man/man1/d2u.1df +++ b/man/man1/d2u.1df @@ -6,7 +6,7 @@ .B d2u FILE1 [FILE2 ...] .SH DESCRIPTION Applies ed(1) to change DOS \\r\\n (CRLF) line endings to UNIX \\n line -endings. Files already in UNIX format should be unchanged. +endings. .SH SEE ALSO ed(1), u2d(1df), sd2u(1df), su2d(1df) .SH AUTHOR diff --git a/man/man1/sd2u.1df b/man/man1/sd2u.1df index f07ebdb9..ee00c473 100644 --- a/man/man1/sd2u.1df +++ b/man/man1/sd2u.1df @@ -13,7 +13,7 @@ program | .B sd2u .SH DESCRIPTION Applies awk(1) to change DOS \\r\\n (CRLF) line endings to UNIX \\n line -endings. Lines already in UNIX format should be unchanged. +endings. .SH SEE ALSO awk(1), su2d(1df), d2u(1df), u2d(1df) .SH AUTHOR diff --git a/man/man1/su2d.1df b/man/man1/su2d.1df index aa6a8821..22aa80bd 100644 --- a/man/man1/su2d.1df +++ b/man/man1/su2d.1df @@ -13,7 +13,7 @@ program | .B su2d .SH DESCRIPTION Applies awk(1) to change UNIX \\n line endings to DOS \\r\\n (CRLF) line -endings. Lines already in DOS format should be unchanged. +endings. .SH SEE ALSO awk(1), sd2u(1df), d2u(1df), u2d(1df) .SH AUTHOR diff --git a/man/man1/u2d.1df b/man/man1/u2d.1df index 3bb16092..9af792bf 100644 --- a/man/man1/u2d.1df +++ b/man/man1/u2d.1df @@ -6,7 +6,7 @@ .B u2d FILE1 [FILE2 ...] .SH DESCRIPTION Applies ed(1) to change UNIX \\n line endings to DOS \\r\\n (CRLF) line -endings. Files already in DOS format should be unchanged. +endings. .SH SEE ALSO ed(1), d2u(1df), sd2u(1df), su2d(1df) .SH AUTHOR diff --git a/vim/command.vim b/vim/command.vim deleted file mode 100644 index af7c8e36..00000000 --- a/vim/command.vim +++ /dev/null @@ -1,39 +0,0 @@ -" Keep plenty of command and search history, because disk space is cheap -set history=2000 - -" Always tell me the number of lines changed by a command -set report=0 - -" Command-line based features -if has('cmdline_info') - - " Show my current position in the status bar - set ruler - - " Show the keystrokes being entered in the screen - set showcmd - - " Show the mode we're using if not normal mode (e.g. --INSERT--) - set showmode -endif - -" Always use forward slashes, I very seldom need to use Vim on Windows for -" more than scratch space anyway -if exists('+shellslash') - set shellslash -endif - -" Tolerate typos like :Wq, :Q, or :Qa and do what I mean, including any -" arguments or modifiers; I fat-finger these commands a lot because I type -" them so rapidly, and they don't correspond to any other commands I use -if has('user_commands') - command! -bang -complete=file -nargs=? E e<bang> <args> - command! -bang -complete=file -nargs=? W w<bang> <args> - command! -bang -complete=file -nargs=? WQ wq<bang> <args> - command! -bang -complete=file -nargs=? Wq wq<bang> <args> - command! -bang Q q<bang> - command! -bang Qa qa<bang> - command! -bang QA qa<bang> - command! -bang Wa wa<bang> - command! -bang WA wa<bang> -endif diff --git a/vim/config/command.vim b/vim/config/command.vim index 1d2b647a..2a60bab3 100644 --- a/vim/config/command.vim +++ b/vim/config/command.vim @@ -22,7 +22,9 @@ set shellpipe=> " Always use forward slashes, I very seldom need to use Vim on Windows for " more than scratch space anyway -set shellslash +if exists('+shellslash') + set shellslash +endif " Tolerate typos like :Wq, :Q, or :Qa and do what I mean, including any " arguments or modifiers; I fat-finger these commands a lot because I type diff --git a/vim/config/format.vim b/vim/config/format.vim index 35245d0d..b0de7621 100644 --- a/vim/config/format.vim +++ b/vim/config/format.vim @@ -38,8 +38,8 @@ if has('eval') endfunction " Map leader-letters to corresponding format option flags - nnoremap <silent> <leader>a :<C-U>call <SID>ToggleFormatFlag('a')<CR> - nnoremap <silent> <leader>c :<C-U>call <SID>ToggleFormatFlag('c')<CR> - nnoremap <silent> <leader>t :<C-U>call <SID>ToggleFormatFlag('t')<CR> + nnoremap <silent> <Leader>a :<C-U>call <SID>ToggleFormatFlag('a')<CR> + nnoremap <silent> <Leader>c :<C-U>call <SID>ToggleFormatFlag('c')<CR> + nnoremap <silent> <Leader>t :<C-U>call <SID>ToggleFormatFlag('t')<CR> endif diff --git a/vim/config/leader.vim b/vim/config/leader.vim new file mode 100644 index 00000000..9ca8f762 --- /dev/null +++ b/vim/config/leader.vim @@ -0,0 +1,3 @@ +" Use different keys for global and local leaders +let g:mapleader = '\' +let g:maplocalleader = '_' diff --git a/vim/config/list.vim b/vim/config/list.vim index faf5e29a..209bb4ec 100644 --- a/vim/config/list.vim +++ b/vim/config/list.vim @@ -1,7 +1,7 @@ " Don't show whitespace characters or end-of-line characters visually by " default, but make \l toggle between them set nolist -nnoremap <leader>l :setlocal list! list?<CR> +nnoremap <Leader>l :setlocal list! list?<CR> " Clearly show when the start or end of the row does not correspond to the " start and end of the line diff --git a/vim/config/number.vim b/vim/config/number.vim index 35ec7efe..d7d9919c 100644 --- a/vim/config/number.vim +++ b/vim/config/number.vim @@ -1,3 +1,3 @@ " Don't show line numbers by default, but \n toggles them set nonumber -nnoremap <leader>n :setlocal number! number?<CR> +nnoremap <Leader>n :setlocal number! number?<CR> diff --git a/vim/config/search.vim b/vim/config/search.vim index 66b81ab0..0f10eea5 100644 --- a/vim/config/search.vim +++ b/vim/config/search.vim @@ -3,11 +3,11 @@ if has('extra_search') " Searching as I enter my pattern, \i toggles this set incsearch - nnoremap <leader>i :setlocal incsearch! incsearch?<CR> + nnoremap <Leader>i :setlocal incsearch! incsearch?<CR> " Highlight search results, \h toggles this set hlsearch - nnoremap <leader>h :setlocal hlsearch! hlsearch?<CR> + nnoremap <Leader>h :setlocal hlsearch! hlsearch?<CR> " Pressing ^L will clear highlighting until the next search-related " operation; quite good because the highlighting gets distracting after diff --git a/vim/config/spell.vim b/vim/config/spell.vim index 046b50ff..6a0167d0 100644 --- a/vim/config/spell.vim +++ b/vim/config/spell.vim @@ -3,12 +3,12 @@ if has('spell') " Don't check spelling by default, but bind \s to toggle this set nospell - nnoremap <leader>s :setlocal spell! spell?<CR> + nnoremap <Leader>s :setlocal spell! spell?<CR> " Use New Zealand English for spelling by default (it's almost identical " to British English), but bind \u to switch to US English and \z to " switch back set spelllang=en_nz - nnoremap <leader>u :setlocal spelllang=en_us spelllang?<CR> - nnoremap <leader>z :setlocal spelllang=en_nz spelllang?<CR> + nnoremap <Leader>u :setlocal spelllang=en_us spelllang?<CR> + nnoremap <Leader>z :setlocal spelllang=en_nz spelllang?<CR> endif diff --git a/vim/config/whitespace.vim b/vim/config/whitespace.vim index cc2554bd..bfe2663d 100644 --- a/vim/config/whitespace.vim +++ b/vim/config/whitespace.vim @@ -52,6 +52,6 @@ if has('eval') endfunction " Map \x to the function just defined - nnoremap <silent> <leader>x :<C-U>call <SID>StripTrailingWhitespace()<CR> + nnoremap <silent> <Leader>x :<C-U>call <SID>StripTrailingWhitespace()<CR> endif diff --git a/vim/config/wrap.vim b/vim/config/wrap.vim index 0e5866d8..7a442e89 100644 --- a/vim/config/wrap.vim +++ b/vim/config/wrap.vim @@ -1,6 +1,6 @@ " Don't wrap by default, but use \w to toggle it on or off quickly set nowrap -nnoremap <leader>w :setlocal wrap! wrap?<CR> +nnoremap <Leader>w :setlocal wrap! wrap?<CR> " When wrapping text, if a line is so long that not all of it can be shown on " the screen, show as much as possible anyway; by default Vim fills the left @@ -58,7 +58,7 @@ if has('linebreak') endfunction " Map \b to defined function - nnoremap <silent> <leader>b :<C-U>call <SID>ToggleBreak()<CR> + nnoremap <silent> <Leader>b :<C-U>call <SID>ToggleBreak()<CR> endif endif diff --git a/vim/ftplugin/html.vim b/vim/ftplugin/html.vim index 3f28e9ea..c756eb80 100644 --- a/vim/ftplugin/html.vim +++ b/vim/ftplugin/html.vim @@ -1,11 +1,25 @@ -" Run tidy -eq -utf8 on file for the current buffer -nnoremap <leader>v :exe "!tidy -eq -utf8 " . shellescape(expand("%"))<CR> +" Run `tidy -errors -quiet` over buffer +nnoremap <buffer> <silent> <LocalLeader>c + \ :write !tidy -errors -quiet<CR> + +" Filter buffer through `tidy` +nnoremap <buffer> <silent> <LocalLeader>t + \ :%!tidy -quiet<CR> " Make a bare URL into a link to itself function! s:UrlLink() + + " Yank this whole whitespace-separated word normal! yiW - execute "normal! i<a href=\"\<C-R>0\">\<Esc>" + " Open a link tag + normal! i<a href=""> + " Paste the URL into the quotes + normal! hP + " Move to the end of the link text URL normal! E - execute "normal! a</a>\<Esc>" + " Close the link tag + normal! a</a> + endfunction -nnoremap <silent> <leader>r :<C-U>call <SID>UrlLink()<CR> +nnoremap <buffer> <silent> <LocalLeader>r + \ :<C-U>call <SID>UrlLink()<CR> diff --git a/vim/ftplugin/perl.vim b/vim/ftplugin/perl.vim index dad2ce35..2ea4676b 100644 --- a/vim/ftplugin/perl.vim +++ b/vim/ftplugin/perl.vim @@ -1,6 +1,11 @@ -" Run perl -c on file for the current buffer -nnoremap <leader>pc :exe "!perl -c " . shellescape(expand("%"))<CR> -" Run perlcritic on the file for the current buffer -nnoremap <leader>pl :exe "!perlcritic " . shellescape(expand("%"))<CR> -" Run the current buffer through perltidy -nnoremap <leader>pt :%!perltidy<CR> +" Run `perl -c` over buffer +nnoremap <buffer> <silent> <LocalLeader>c + \ :write !perl -c<CR> + +" Run `perlcritic` over buffer +nnoremap <buffer> <silent> <LocalLeader>l + \ :write !perlcritic<CR> + +" Filter buffer through `perltidy` +nnoremap <buffer> <silent> <LocalLeader>t + \ :%!perltidy<CR> diff --git a/vim/ftplugin/sh.vim b/vim/ftplugin/sh.vim index a6dd62eb..c09e4fe8 100644 --- a/vim/ftplugin/sh.vim +++ b/vim/ftplugin/sh.vim @@ -24,3 +24,25 @@ endif if exists('b:is_bash') && executable('han') setlocal keywordprg=han endif + +" Map checker based on shell family +if exists('b:is_bash') && b:is_bash + let b:check = 'bash -n' +elseif exists('b:is_ksh') && b:is_ksh + let b:check = 'ksh -n' +else + let b:check = 'sh -n' +endif +nnoremap <buffer> <silent> <LocalLeader>c + \ :<C-U>execute ':write !' . b:check<CR> + +" Map linter based on shell family +if exists('b:is_bash') && b:is_bash + let b:lint = 'shellcheck -s bash -' +elseif exists('b:is_ksh') && b:is_ksh + let b:lint = 'shellcheck -s ksh -' +else + let b:lint = 'shellcheck -s sh -' +endif +nnoremap <buffer> <silent> <LocalLeader>l + \ :<C-U>execute ':write !' . b:lint<CR> diff --git a/vim/ftplugin/vim.vim b/vim/ftplugin/vim.vim new file mode 100644 index 00000000..e023553e --- /dev/null +++ b/vim/ftplugin/vim.vim @@ -0,0 +1,5 @@ +" Run `vint` over buffer +" /dev/stdin is not optimal here; it's widely implemented, but not POSIX. +" `vint` does not seem to have another way to parse standard input. +nnoremap <buffer> <silent> <LocalLeader>l + \ :write !vint -s /dev/stdin<CR> |