aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-11-04 01:09:12 +1300
committerTom Ryder <tom@sanctum.geek.nz>2017-11-04 01:09:12 +1300
commiteb011c52aeaff29876750caaf6fd7d07dbae7876 (patch)
tree9574da5b88afe31d44c512fc3917048b9b9eee80
parentMerge branch 'hotfix/v0.4.2' (diff)
parentBump version number to 0.5.0 (diff)
downloaddotfiles-eb011c52aeaff29876750caaf6fd7d07dbae7876.tar.gz
dotfiles-eb011c52aeaff29876750caaf6fd7d07dbae7876.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.md2
-rw-r--r--README.md8
-rw-r--r--VERSION4
-rw-r--r--bin/d2u.sh2
-rw-r--r--bin/sd2u.awk6
-rw-r--r--bin/su2d.awk6
-rw-r--r--bin/u2d.sh3
-rw-r--r--man/man1/d2u.1df2
-rw-r--r--man/man1/sd2u.1df2
-rw-r--r--man/man1/su2d.1df2
-rw-r--r--man/man1/u2d.1df2
-rw-r--r--vim/command.vim39
-rw-r--r--vim/config/command.vim4
-rw-r--r--vim/config/format.vim6
-rw-r--r--vim/config/leader.vim3
-rw-r--r--vim/config/list.vim2
-rw-r--r--vim/config/number.vim2
-rw-r--r--vim/config/search.vim4
-rw-r--r--vim/config/spell.vim6
-rw-r--r--vim/config/whitespace.vim2
-rw-r--r--vim/config/wrap.vim4
-rw-r--r--vim/ftplugin/html.vim24
-rw-r--r--vim/ftplugin/perl.vim17
-rw-r--r--vim/ftplugin/sh.vim22
-rw-r--r--vim/ftplugin/vim.vim5
25 files changed, 96 insertions, 83 deletions
diff --git a/IDEAS.md b/IDEAS.md
index 6bb4af82..37857163 100644
--- a/IDEAS.md
+++ b/IDEAS.md
@@ -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.
diff --git a/README.md b/README.md
index 028a42fa..c3ffbf44 100644
--- a/README.md
+++ b/README.md
@@ -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
-------
diff --git a/VERSION b/VERSION
index e02a52a4..e9f5dabc 100644
--- a/VERSION
+++ b/VERSION
@@ -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
diff --git a/bin/d2u.sh b/bin/d2u.sh
index 22c8e16b..892c446b 100644
--- a/bin/d2u.sh
+++ b/bin/d2u.sh
@@ -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
diff --git a/bin/u2d.sh b/bin/u2d.sh
index 9f4e800a..31030341 100644
--- a/bin/u2d.sh
+++ b/bin/u2d.sh
@@ -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>