diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2017-11-04 01:09:12 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2017-11-04 01:09:12 +1300 |
commit | eb011c52aeaff29876750caaf6fd7d07dbae7876 (patch) | |
tree | 9574da5b88afe31d44c512fc3917048b9b9eee80 | |
parent | Merge branch 'hotfix/v0.4.2' (diff) | |
parent | Bump version number to 0.5.0 (diff) | |
download | dotfiles-a5322e1d6c4b8259620be9b1a15632952482bcd6.tar.gz (sig) dotfiles-a5322e1d6c4b8259620be9b1a15632952482bcd6.zip |
Merge branch 'release/v0.5.0'v0.5.0
* release/v0.5.0: (25 commits)
Bump version number to 0.5.0
Update documentation to reflect ftplugin changes
Add lint mapping for Vimscript
Specify scope of mapleader variables
Use underscore as local map leader
Add check and lint mappings for shell script
Add tidy mapping for HTML
Break long lines in check/lint/tidy mappings
Make all lint/check/tidy maps local and silent
Improve comments on check/lint/tidy maps
Use long form options for tidy(1) Vim call
Use direct :write !cmd instead of shellescape()
Use full ':execute' not just ':exe' in VimL
Check for availability of Vim shellescape()
Revert "Adjust UrlLink() to yank word without t...
Adjust UrlLink() to yank word without text objects
Refactor UrlLink() function normal! commands
Use single quotes for HTML link mapping :execute
Refactor HTML tidy(1) mapping
Use <Leader>/<LocalLeader> correctly in Vim config
...
-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> |