aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-11-12 20:45:58 +1300
committerTom Ryder <tom@sanctum.geek.nz>2017-11-12 20:45:58 +1300
commitf694cace8570f704118f8deae91b51bb0880b1c0 (patch)
treec0643cd7c649245c3f355629f5c9a94e464bf68e
parentd5e2cbaebbd16fb17c4bcbad5b458514bd703db1 (diff)
parenta2281bd121949f2215ee9257e28e2c0966f3f003 (diff)
downloaddotfiles-f694cace8570f704118f8deae91b51bb0880b1c0.tar.gz
Merge branch 'feature/vim-struct' into develop
* feature/vim-struct: Add guards for presence of b:undo_* var Exclude SC1090 (failed source) shellcheck error Move lots of local Vim config into vim/after
-rw-r--r--Makefile33
-rw-r--r--lint/vim.sh1
-rw-r--r--vim/after/ftplugin/html/lint.vim37
-rw-r--r--vim/after/ftplugin/html/tidy.vim35
-rw-r--r--vim/after/ftplugin/html/url_link.vim53
-rw-r--r--vim/after/ftplugin/mail/format_flowed.vim17
-rw-r--r--vim/after/ftplugin/markdown/spell.vim19
-rw-r--r--vim/after/ftplugin/perl/check.vim35
-rw-r--r--vim/after/ftplugin/perl/lint.vim35
-rw-r--r--vim/after/ftplugin/perl/tidy.vim35
-rw-r--r--vim/after/ftplugin/sh/bash_han.vim19
-rw-r--r--vim/after/ftplugin/sh/check.vim48
-rw-r--r--vim/after/ftplugin/sh/lint.vim48
-rw-r--r--vim/after/ftplugin/sh/posix.vim27
-rw-r--r--vim/after/ftplugin/text/spell.vim19
-rw-r--r--vim/after/ftplugin/vim/lint.vim35
-rw-r--r--vim/after/indent/vim.vim7
-rw-r--r--vim/doc/user_ftplugin.txt27
-rw-r--r--vim/doc/user_indent.txt27
-rw-r--r--vim/ftplugin.vim1
-rw-r--r--vim/ftplugin/html.vim36
-rw-r--r--vim/ftplugin/mail.vim6
-rw-r--r--vim/ftplugin/markdown.vim8
-rw-r--r--vim/ftplugin/perl.vim20
-rw-r--r--vim/ftplugin/sh.vim53
-rw-r--r--vim/ftplugin/text.vim8
-rw-r--r--vim/ftplugin/vim.vim10
-rw-r--r--vim/indent.vim1
-rw-r--r--vim/indent/csv.vim10
-rw-r--r--vim/indent/tsv.vim10
-rw-r--r--vim/indent/vim.vim9
-rw-r--r--vim/plugin/auto_backupdir.vim3
-rw-r--r--vim/plugin/auto_swapdir.vim3
-rw-r--r--vim/plugin/auto_undodir.vim4
-rw-r--r--vim/plugin/big_file_options.vim4
-rw-r--r--vim/plugin/command_typos.vim4
-rw-r--r--vim/plugin/copy_linebreak.vim4
-rw-r--r--vim/plugin/fixed_join.vim3
-rw-r--r--vim/plugin/mail_mutt.vim4
-rw-r--r--vim/plugin/strip_trailing_whitespace.vim3
-rw-r--r--vim/plugin/toggle_option_flag.vim4
-rw-r--r--vim/plugin/user_ftplugin.vim27
-rw-r--r--vim/plugin/user_indent.vim27
43 files changed, 514 insertions, 305 deletions
diff --git a/Makefile b/Makefile
index 196f3ed5..63d192f8 100644
--- a/Makefile
+++ b/Makefile
@@ -39,11 +39,13 @@
install-urxvt \
install-vim \
install-vim-after \
+ install-vim-after-ftdetect \
+ install-vim-after-indent \
+ install-vim-after-syntax \
install-vim-autoload \
install-vim-bundle \
install-vim-config \
install-vim-ftdetect \
- install-vim-ftplugin \
install-vim-gui \
install-vim-gui-config \
install-vim-indent \
@@ -483,14 +485,27 @@ install-vim: install-vim-after \
install-vim-config \
install-vim-doc \
install-vim-ftdetect \
- install-vim-ftplugin \
install-vim-indent \
install-vim-plugin
-install-vim-after:
- find vim/after -name .git -prune -o \
- -type d -exec sh -c 'mkdir -p -- $(HOME)/."$$1"' _ {} \; -o \
- -type f -exec sh -c 'cp -p -- "$$1" $(HOME)/."$$1"' _ {} \;
+install-vim-after: install-vim-after-ftplugin \
+ install-vim-after-indent \
+ install-vim-after-syntax
+
+install-vim-after-ftplugin:
+ mkdir -p $(HOME)/.vim/after/ftplugin
+ for type in vim/after/ftplugin/* ; do \
+ mkdir -p -- $(HOME)/.vim/after/ftplugin/"$${type##*/}" ; \
+ cp -p "$$type"/* $(HOME)/.vim/after/ftplugin/"$${type##*/}" ; \
+ done
+
+install-vim-after-indent:
+ mkdir -p $(HOME)/.vim/after/indent
+ cp -p -- vim/after/indent/*.vim $(HOME)/.vim/after/indent
+
+install-vim-after-syntax:
+ mkdir -p $(HOME)/.vim/after/syntax
+ cp -p -- vim/after/syntax/*.vim $(HOME)/.vim/after/syntax
install-vim-autoload:
mkdir -p -- $(HOME)/.vim/autoload
@@ -514,14 +529,8 @@ install-vim-ftdetect:
mkdir -p -- $(HOME)/.vim/ftdetect
cp -p -- vim/ftdetect/*.vim $(HOME)/.vim/ftdetect
-install-vim-ftplugin:
- mkdir -p -- $(HOME)/.vim/ftplugin
- cp -p -- vim/ftplugin.vim $(HOME)/.vim/ftplugin.vim
- cp -p -- vim/ftplugin/*.vim $(HOME)/.vim/ftplugin
-
install-vim-indent:
mkdir -p -- $(HOME)/.vim/indent
- cp -p -- vim/indent.vim $(HOME)/.vim/indent.vim
cp -p -- vim/indent/*.vim $(HOME)/.vim/indent
install-vim-plugin:
diff --git a/lint/vim.sh b/lint/vim.sh
index 64ac63ba..9af8d203 100644
--- a/lint/vim.sh
+++ b/lint/vim.sh
@@ -3,7 +3,6 @@ set -- \
vim/autoload \
vim/config \
vim/ftdetect \
- vim/ftplugin \
vim/gvimrc \
vim/indent \
vim/plugin \
diff --git a/vim/after/ftplugin/html/lint.vim b/vim/after/ftplugin/html/lint.vim
new file mode 100644
index 00000000..3ac760ed
--- /dev/null
+++ b/vim/after/ftplugin/html/lint.vim
@@ -0,0 +1,37 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_html_lint') || &compatible
+ finish
+endif
+let b:did_ftplugin_html_lint = 1
+
+" Initialise undo variable if not already done
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_html_lint'
+endif
+
+" Set up a mapping for the linter, if we're allowed
+if !exists('g:no_plugin_maps') && !exists('g:no_html_maps')
+
+ " Define a mapping target
+ nnoremap <buffer> <silent> <unique>
+ \ <Plug>HtmlLint
+ \ :<C-U>write !tidy -errors -quiet<CR>
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <Plug>HtmlLint'
+ endif
+
+ " If there isn't a key mapping already, use a default one
+ if !hasmapto('<Plug>HtmlLint')
+ nmap <buffer> <unique>
+ \ <LocalLeader>l
+ \ <Plug>HtmlLint
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <LocalLeader>l'
+ endif
+ endif
+
+endif
diff --git a/vim/after/ftplugin/html/tidy.vim b/vim/after/ftplugin/html/tidy.vim
new file mode 100644
index 00000000..519a7cd6
--- /dev/null
+++ b/vim/after/ftplugin/html/tidy.vim
@@ -0,0 +1,35 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_html_tidy') || &compatible
+ finish
+endif
+let b:did_ftplugin_html_tidy = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_html_tidy'
+endif
+
+" Set up a mapping for the tidier, if we're allowed
+if !exists('g:no_plugin_maps') && !exists('g:no_html_maps')
+
+ " Define a mapping target
+ nnoremap <buffer> <silent> <unique>
+ \ <Plug>HtmlTidy
+ \ :<C-U>%!tidy -quiet<CR>
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <Plug>HtmlTidy'
+ endif
+
+ " If there isn't a key mapping already, use a default one
+ if !hasmapto('<Plug>HtmlTidy')
+ nmap <buffer> <unique>
+ \ <LocalLeader>t
+ \ <Plug>HtmlTidy
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <LocalLeader>t'
+ endif
+ endif
+
+endif
diff --git a/vim/after/ftplugin/html/url_link.vim b/vim/after/ftplugin/html/url_link.vim
new file mode 100644
index 00000000..4f2d2526
--- /dev/null
+++ b/vim/after/ftplugin/html/url_link.vim
@@ -0,0 +1,53 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_html_url_link') || &compatible
+ finish
+endif
+let b:did_ftplugin_html_url_link = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_html_url_link'
+endif
+
+" Make a bare URL into a link to itself
+if !exists('*s:UrlLink')
+ function! s:UrlLink()
+
+ " Yank this whole whitespace-separated word
+ normal! yiW
+ " 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
+ " Close the link tag
+ normal! a</a>
+
+ endfunction
+endif
+
+" Set up a mapping for the function, if we're allowed
+if !exists('g:no_plugin_maps') && !exists('g:no_html_maps')
+
+ " Define a mapping target
+ nnoremap <buffer> <silent> <unique>
+ \ <Plug>HtmlUrlLink
+ \ :<C-U>call <SID>HtmlUrlLink()<CR>
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <Plug>HtmlUrlLink'
+ endif
+
+ " If there isn't a key mapping already, use a default one
+ if !hasmapto('<Plug>HtmlUrlLink')
+ nmap <buffer> <unique>
+ \ <LocalLeader>r
+ \ <Plug>HtmlUrlLink
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <LocalLeader>r'
+ endif
+ endif
+
+endif
diff --git a/vim/after/ftplugin/mail/format_flowed.vim b/vim/after/ftplugin/mail/format_flowed.vim
new file mode 100644
index 00000000..040a1a51
--- /dev/null
+++ b/vim/after/ftplugin/mail/format_flowed.vim
@@ -0,0 +1,17 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_mail_format_flowed') || &compatible
+ finish
+endif
+let b:did_ftplugin_mail_format_flowed = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_mail_format_flowed'
+endif
+
+" Use trailing whitespace to denote continued paragraph
+setlocal formatoptions+=w
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|setlocal formatoptions<'
+endif
diff --git a/vim/after/ftplugin/markdown/spell.vim b/vim/after/ftplugin/markdown/spell.vim
new file mode 100644
index 00000000..bb344374
--- /dev/null
+++ b/vim/after/ftplugin/markdown/spell.vim
@@ -0,0 +1,19 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_markdown_spell') || &compatible
+ finish
+endif
+let b:did_ftplugin_markdown_spell = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_markdown_spell'
+endif
+
+" Spellcheck documents by default
+if has('syntax')
+ setlocal spell
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|setlocal spell<'
+ endif
+endif
diff --git a/vim/after/ftplugin/perl/check.vim b/vim/after/ftplugin/perl/check.vim
new file mode 100644
index 00000000..6b057c82
--- /dev/null
+++ b/vim/after/ftplugin/perl/check.vim
@@ -0,0 +1,35 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_perl_check') || &compatible
+ finish
+endif
+let b:did_ftplugin_perl_check = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_perl_check'
+endif
+
+" Set up a mapping for the checker, if we're allowed
+if !exists('g:no_plugin_maps') && !exists('g:no_perl_maps')
+
+ " Define a mapping target
+ nnoremap <buffer> <silent> <unique>
+ \ <Plug>PerlCheck
+ \ :<C-U>write !perl -c<CR>
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <Plug>PerlCheck'
+ endif
+
+ " If there isn't a key mapping already, use a default one
+ if !hasmapto('<Plug>PerlCheck')
+ nmap <buffer> <unique>
+ \ <LocalLeader>c
+ \ <Plug>PerlCheck
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <LocalLeader>c'
+ endif
+ endif
+
+endif
diff --git a/vim/after/ftplugin/perl/lint.vim b/vim/after/ftplugin/perl/lint.vim
new file mode 100644
index 00000000..86740c81
--- /dev/null
+++ b/vim/after/ftplugin/perl/lint.vim
@@ -0,0 +1,35 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_perl_lint') || &compatible
+ finish
+endif
+let b:did_ftplugin_perl_lint = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_perl_lint'
+endif
+
+" Set up a mapping for the linter, if we're allowed
+if !exists('g:no_plugin_maps') && !exists('g:no_perl_maps')
+
+ " Define a mapping target
+ nnoremap <buffer> <silent> <unique>
+ \ <Plug>PerlLint
+ \ :<C-U>write !perlcritic<CR>
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <Plug>PerlLint'
+ endif
+
+ " If there isn't a key mapping already, use a default one
+ if !hasmapto('<Plug>PerlLint')
+ nmap <buffer> <unique>
+ \ <LocalLeader>l
+ \ <Plug>PerlLint
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <LocalLeader>l'
+ endif
+ endif
+
+endif
diff --git a/vim/after/ftplugin/perl/tidy.vim b/vim/after/ftplugin/perl/tidy.vim
new file mode 100644
index 00000000..18033a42
--- /dev/null
+++ b/vim/after/ftplugin/perl/tidy.vim
@@ -0,0 +1,35 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_perl_tidy') || &compatible
+ finish
+endif
+let b:did_ftplugin_perl_tidy = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_perl_tidy'
+endif
+
+" Set up a mapping for the tidier, if we're allowed
+if !exists('g:no_plugin_maps') && !exists('g:no_perl_maps')
+
+ " Define a mapping target
+ nnoremap <buffer> <silent> <unique>
+ \ <Plug>PerlTidy
+ \ :<C-U>%!perltidy<CR>
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <Plug>PerlTidy'
+ endif
+
+ " If there isn't a key mapping already, use a default one
+ if !hasmapto('<Plug>PerlTidy')
+ nmap <buffer> <unique>
+ \ <LocalLeader>t
+ \ <Plug>PerlTidy
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <LocalLeader>t'
+ endif
+ endif
+
+endif
diff --git a/vim/after/ftplugin/sh/bash_han.vim b/vim/after/ftplugin/sh/bash_han.vim
new file mode 100644
index 00000000..a160165c
--- /dev/null
+++ b/vim/after/ftplugin/sh/bash_han.vim
@@ -0,0 +1,19 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_sh_bash_han') || &compatible
+ finish
+endif
+let b:did_ftplugin_sh_bash_han = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_sh_bash_han'
+endif
+
+" Use han(1df) as a man(1) wrapper for Bash files if available
+if exists('b:is_bash') && executable('han')
+ setlocal keywordprg=han
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|setlocal keywordprg<'
+ endif
+endif
diff --git a/vim/after/ftplugin/sh/check.vim b/vim/after/ftplugin/sh/check.vim
new file mode 100644
index 00000000..334ec1db
--- /dev/null
+++ b/vim/after/ftplugin/sh/check.vim
@@ -0,0 +1,48 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_sh_check') || &compatible
+ finish
+endif
+let b:did_ftplugin_sh_check = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_sh_check'
+endif
+
+" Choose checker based on shell family
+if exists('b:is_bash')
+ let b:sh_check = 'write !bash -n'
+elseif exists('b:is_kornshell')
+ let b:sh_check = 'write !ksh -n'
+else
+ let b:sh_check = 'write !sh -n'
+endif
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:sh_check'
+endif
+
+" Set up a mapping for the checker, if we're allowed
+if !exists('g:no_plugin_maps') && !exists('g:no_sh_maps')
+
+ " Define a mapping target
+ nnoremap <buffer> <silent> <unique>
+ \ <Plug>ShCheck
+ \ :<C-U>execute b:sh_check<CR>
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <Plug>ShCheck'
+ endif
+
+ " If there isn't a key mapping already, use a default one
+ if !hasmapto('<Plug>ShCheck')
+ nmap <buffer> <unique>
+ \ <LocalLeader>c
+ \ <Plug>ShCheck
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <LocalLeader>c'
+ endif
+ endif
+
+endif
diff --git a/vim/after/ftplugin/sh/lint.vim b/vim/after/ftplugin/sh/lint.vim
new file mode 100644
index 00000000..8745a31e
--- /dev/null
+++ b/vim/after/ftplugin/sh/lint.vim
@@ -0,0 +1,48 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_sh_lint') || &compatible
+ finish
+endif
+let b:did_ftplugin_sh_lint = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_sh_lint'
+endif
+
+" Choose linter based on shell family
+if exists('b:is_bash')
+ let b:sh_lint = 'write !shellcheck -e SC1090 -s bash -'
+elseif exists('b:is_kornshell')
+ let b:sh_lint = 'write !shellcheck -e SC1090 -s ksh -'
+else
+ let b:sh_lint = 'write !shellcheck -e SC1090 -s sh -'
+endif
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:sh_lint'
+endif
+
+" Set up a mapping for the linter, if we're allowed
+if !exists('g:no_plugin_maps') && !exists('g:no_sh_maps')
+
+ " Define a mapping target
+ nnoremap <buffer> <silent> <unique>
+ \ <Plug>ShLint
+ \ :<C-U>execute b:sh_lint<CR>
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <Plug>ShLint'
+ endif
+
+ " If there isn't a key mapping already, use a default one
+ if !hasmapto('<Plug>ShLint')
+ nmap <buffer> <unique>
+ \ <LocalLeader>l
+ \ <Plug>ShLint
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <LocalLeader>l'
+ endif
+ endif
+
+endif
diff --git a/vim/after/ftplugin/sh/posix.vim b/vim/after/ftplugin/sh/posix.vim
new file mode 100644
index 00000000..a1b2c7ff
--- /dev/null
+++ b/vim/after/ftplugin/sh/posix.vim
@@ -0,0 +1,27 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_sh_posix') || &compatible
+ finish
+endif
+let b:did_ftplugin_sh_posix = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_sh_posix'
+endif
+
+"
+" If we have a #!/bin/sh shebang and filetype.vim determined we were neither
+" POSIX nor Bash nor Korn shell, we'll guess POSIX, just because it's far more
+" likely that's what I want to write than plain Bourne shell.
+"
+" You're supposed to be able to do this by setting g:is_posix, but if that's
+" set, the syntax file ends up setting g:is_kornshell for you too, for reasons
+" I don't really understand. This method works though, and is cleaner than
+" the other workaround I had been trying.
+"
+if exists('b:is_sh')
+ unlet b:is_sh
+ if !exists('b:is_bash') && !exists('b:is_kornshell')
+ let b:is_posix = 1
+ endif
+endif
diff --git a/vim/after/ftplugin/text/spell.vim b/vim/after/ftplugin/text/spell.vim
new file mode 100644
index 00000000..322090ca
--- /dev/null
+++ b/vim/after/ftplugin/text/spell.vim
@@ -0,0 +1,19 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_text_spell') || &compatible
+ finish
+endif
+let b:did_ftplugin_text_spell = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_text_spell'
+endif
+
+" Spellcheck documents by default
+if has('syntax')
+ setlocal spell
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|setlocal spell<'
+ endif
+endif
diff --git a/vim/after/ftplugin/vim/lint.vim b/vim/after/ftplugin/vim/lint.vim
new file mode 100644
index 00000000..1b557593
--- /dev/null
+++ b/vim/after/ftplugin/vim/lint.vim
@@ -0,0 +1,35 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_vim_lint') || &compatible
+ finish
+endif
+let b:did_ftplugin_vim_lint = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_vim_lint'
+endif
+
+" Set up a mapping for the linter, if we're allowed
+if !exists('g:no_plugin_maps') && !exists('g:no_vim_maps')
+
+ " Define a mapping target
+ nnoremap <buffer> <silent> <unique>
+ \ <Plug>VimLint
+ \ :<C-U>write !vint -s /dev/stdin<CR>
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <Plug>VimLint'
+ endif
+
+ " If there isn't a key mapping already, use a default one
+ if !hasmapto('<Plug>VimLint')
+ nmap <buffer> <unique>
+ \ <LocalLeader>l
+ \ <Plug>VimLint
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <LocalLeader>l'
+ endif
+ endif
+
+endif
diff --git a/vim/after/indent/vim.vim b/vim/after/indent/vim.vim
new file mode 100644
index 00000000..0cb1d397
--- /dev/null
+++ b/vim/after/indent/vim.vim
@@ -0,0 +1,7 @@
+" Observe VimL conventions for two-space indents
+setlocal shiftwidth=2
+setlocal softtabstop=2
+if exists('b:undo_indent')
+ let b:undo_indent = b:undo_indent
+ \ . '|setlocal shiftwidth< softtabstop<'
+endif
diff --git a/vim/doc/user_ftplugin.txt b/vim/doc/user_ftplugin.txt
deleted file mode 100644
index 603bf4d0..00000000
--- a/vim/doc/user_ftplugin.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-*user_ftplugin.txt* "Undo" for local ftplugin files
-
-Author: Tom Ryder <tom@sanctum.geek.nz>
-License: Same terms as Vim itself (see |license|)
-
-This plugin adds an |autocmd| hook to |FileType| to run before the one that the
-core ftplugin.vim sets, to allow setting a b:undo_user_ftplugin variable with
-code to |:execute| when the filetype is next changed, in much the same way that
-the core files in Vim >= 7.0x support a b:|undo_ftplugin| variable.
-
-This will only work if it's loaded before ftplugin.vim so that the autocmd
-hooks run in the right order. There are a couple of ways to do this:
-
-1. Create your own ~/.vim/ftplugin.vim with the following contents:
-
- silent! runtime plugin/user_ftplugin.vim
-
- This will then be sourced before the core ftplugin.vim runs. This is the
- suggested method.
-
-2. Run the same line in your ~/.vimrc before your `filetype ftplugin on` line.
-
-See also: user_indent.vim.
-
-This plugin lives in Tom Ryder's "dotfiles" suite, and will eventually be spun
-off into a separate distribution as it solidifies and this documentation
-improves.
diff --git a/vim/doc/user_indent.txt b/vim/doc/user_indent.txt
deleted file mode 100644
index e0152e32..00000000
--- a/vim/doc/user_indent.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-*user_indent.txt* "Undo" for local indent files
-
-Author: Tom Ryder <tom@sanctum.geek.nz>
-License: Same terms as Vim itself (see |license|)
-
-This plugin adds an |autocmd| hook to |FileType| to run before the one that the
-core indent.vim sets, to allow setting a b:undo_user_indent variable with
-code to |:execute| when the filetype is next changed, in much the same way that
-the core files in Vim >= 7.0x support a b:|undo_indent| variable.
-
-This will only work if it's loaded before indent.vim so that the autocmd hooks
-run in the right order. There are a couple of ways to do this:
-
-1. Create your own ~/.vim/indent.vim with the following contents:
-
- silent! runtime plugin/user_indent.vim
-
- This will then be sourced before the core indent.vim runs. This is the
- suggested method.
-
-2. Run the same line in your ~/.vimrc before your `filetype indent on` line.
-
-See also: user_ftplugin.vim.
-
-This plugin lives in Tom Ryder's "dotfiles" suite, and will eventually be spun
-off into a separate distribution as it solidifies and this documentation
-improves.
diff --git a/vim/ftplugin.vim b/vim/ftplugin.vim
deleted file mode 100644
index 21665dad..00000000
--- a/vim/ftplugin.vim
+++ /dev/null
@@ -1 +0,0 @@
-silent! runtime plugin/user_ftplugin.vim
diff --git a/vim/ftplugin/html.vim b/vim/ftplugin/html.vim
deleted file mode 100644
index d2c6a3e3..00000000
--- a/vim/ftplugin/html.vim
+++ /dev/null
@@ -1,36 +0,0 @@
-" Run `tidy -errors -quiet` over buffer
-nnoremap <buffer> <silent>
- \ <LocalLeader>c
- \ :<C-U>write !tidy -errors -quiet<CR>
-
-" Filter buffer through `tidy`
-nnoremap <buffer> <silent>
- \ <LocalLeader>t
- \ :<C-U>%!tidy -quiet<CR>
-
-" Make a bare URL into a link to itself
-function! s:UrlLink()
-
- " Yank this whole whitespace-separated word
- normal! yiW
- " 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
- " Close the link tag
- normal! a</a>
-
-endfunction
-
-" Mapping for the function above
-nnoremap <buffer> <silent>
- \ <LocalLeader>r
- \ :<C-U>call <SID>UrlLink()<CR>
-
-" Unload this filetype plugin
-let b:undo_user_ftplugin
- \ = 'silent! nunmap <LocalLeader>c'
- \ . '|silent! nunmap <LocalLeader>t'
- \ . '|silent! nunmap <LocalLeader>r'
diff --git a/vim/ftplugin/mail.vim b/vim/ftplugin/mail.vim
deleted file mode 100644
index 697ce499..00000000
--- a/vim/ftplugin/mail.vim
+++ /dev/null
@@ -1,6 +0,0 @@
-" Use trailing whitespace to denote continued paragraph
-setlocal formatoptions+=w
-
-" Unload this filetype plugin
-let b:undo_user_ftplugin
- \ = 'setlocal formatoptions<'
diff --git a/vim/ftplugin/markdown.vim b/vim/ftplugin/markdown.vim
deleted file mode 100644
index f26fb156..00000000
--- a/vim/ftplugin/markdown.vim
+++ /dev/null
@@ -1,8 +0,0 @@
-" Spellcheck documents by default
-if has('syntax')
- setlocal spell
-endif
-
-" Unload this filetype plugin
-let b:undo_user_ftplugin
- \ = 'silent! setlocal spell<'
diff --git a/vim/ftplugin/perl.vim b/vim/ftplugin/perl.vim
deleted file mode 100644
index 5549e33d..00000000
--- a/vim/ftplugin/perl.vim
+++ /dev/null
@@ -1,20 +0,0 @@
-" Run `perl -c` over buffer
-nnoremap <buffer> <silent>
- \ <LocalLeader>c
- \ :<C-U>write !perl -c<CR>
-
-" Run `perlcritic` over buffer
-nnoremap <buffer> <silent>
- \ <LocalLeader>l
- \ :<C-U>write !perlcritic<CR>
-
-" Filter buffer through `perltidy`
-nnoremap <buffer> <silent>
- \ <LocalLeader>t
- \ :<C-U>%!perltidy<CR>
-
-" Unload this filetype plugin
-let b:undo_user_ftplugin
- \ = 'silent! nunmap <LocalLeader>c'
- \ . '|silent! nunmap <LocalLeader>l'
- \ . '|silent! nunmap <LocalLeader>t'
diff --git a/vim/ftplugin/sh.vim b/vim/ftplugin/sh.vim
deleted file mode 100644
index 60e8b6c4..00000000
--- a/vim/ftplugin/sh.vim
+++ /dev/null
@@ -1,53 +0,0 @@
-"
-" If we have a #!/bin/sh shebang and filetype.vim determined we were neither
-" POSIX nor Bash nor Korn shell, we'll guess POSIX, just because it's far more
-" likely that's what I want to write than plain Bourne shell.
-"
-" You're supposed to be able to do this by setting g:is_posix, but if that's
-" set, the syntax file ends up setting g:is_kornshell for you too, for reasons
-" I don't really understand. This method works though, and is cleaner than
-" the other workaround I had been trying.
-"
-if exists('b:is_sh')
- unlet b:is_sh
- if !exists('b:is_bash') && !exists('b:is_kornshell')
- let b:is_posix = 1
- endif
-endif
-
-" Use han(1df) as a man(1) wrapper for Bash files if available
-if exists('b:is_bash')
- \ && executable('han')
- setlocal keywordprg=han
-endif
-
-" Map checker based on shell family
-if exists('b:is_bash')
- let b:sh_check = 'write !bash -n'
-elseif exists('b:is_kornshell')
- let b:sh_check = 'write !ksh -n'
-else
- let b:sh_check = 'write !sh -n'
-endif
-nnoremap <buffer> <silent>
- \ <LocalLeader>c
- \ :<C-U>execute b:sh_check<CR>
-
-" Map linter based on shell family
-if exists('b:is_bash')
- let b:sh_lint = 'write !shellcheck -s bash -'
-elseif exists('b:is_kornshell')
- let b:sh_lint = 'write !shellcheck -s ksh -'
-else
- let b:sh_lint = 'write !shellcheck -s sh -'
-endif
-nnoremap <buffer> <silent>
- \ <LocalLeader>l
- \ :<C-U>execute b:sh_lint<CR>
-
-" Unload this filetype plugin
-let b:undo_user_ftplugin
- \ = 'setlocal keywordprg<'
- \ . '|unlet! b:sh_check b:sh_lint'
- \ . '|silent! nunmap <LocalLeader>c'
- \ . '|silent! nunmap <LocalLeader>l'
diff --git a/vim/ftplugin/text.vim b/vim/ftplugin/text.vim
deleted file mode 100644
index f26fb156..00000000
--- a/vim/ftplugin/text.vim
+++ /dev/null
@@ -1,8 +0,0 @@
-" Spellcheck documents by default
-if has('syntax')
- setlocal spell
-endif
-
-" Unload this filetype plugin
-let b:undo_user_ftplugin
- \ = 'silent! setlocal spell<'
diff --git a/vim/ftplugin/vim.vim b/vim/ftplugin/vim.vim
deleted file mode 100644
index e8113134..00000000
--- a/vim/ftplugin/vim.vim
+++ /dev/null
@@ -1,10 +0,0 @@
-" 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
- \ :<C-U>write !vint -s /dev/stdin<CR>
-
-" Unload this filetype plugin
-let b:undo_user_ftplugin
- \ = 'silent! nunmap <LocalLeader>l'
diff --git a/vim/indent.vim b/vim/indent.vim
deleted file mode 100644
index baedf89b..00000000
--- a/vim/indent.vim
+++ /dev/null
@@ -1 +0,0 @@
-silent! runtime plugin/user_indent.vim
diff --git a/vim/indent/csv.vim b/vim/indent/csv.vim
index ae2b6f6c..d092838f 100644
--- a/vim/indent/csv.vim
+++ b/vim/indent/csv.vim
@@ -1,7 +1,11 @@
+" Only do this when not done yet for this buffer
+if exists('b:did_indent')
+ finish
+endif
+let b:did_indent = 1
+
" Manual indenting and literal tabs for CSVs
setlocal noautoindent
setlocal noexpandtab
-
-" Unload this indent plugin
-let b:undo_user_indent
+let b:undo_indent
\ = 'setlocal autoindent< expandtab<'
diff --git a/vim/indent/tsv.vim b/vim/indent/tsv.vim
index 759602ed..56721a4c 100644
--- a/vim/indent/tsv.vim
+++ b/vim/indent/tsv.vim
@@ -1,7 +1,11 @@
+" Only do this when not done yet for this buffer
+if exists('b:did_indent')
+ finish
+endif
+let b:did_indent = 1
+
" Manual indenting and literal tabs for TSVs
setlocal noautoindent
setlocal noexpandtab
-
-" Unload this indent plugin
-let b:undo_user_indent
+let b:undo_indent
\ = 'setlocal autoindent< expandtab<'
diff --git a/vim/indent/vim.vim b/vim/indent/vim.vim
deleted file mode 100644
index 138b9205..00000000
--- a/vim/indent/vim.vim
+++ /dev/null
@@ -1,9 +0,0 @@
-" Observe VimL conventions for two-space indents
-setlocal shiftwidth=2
-setlocal softtabstop=2
-setlocal tabstop=2
-
-" Unload this indent plugin; suppress errors because ancient Vim can't use the
-" '<' suffix syntax for resetting local integer
-let b:undo_user_indent
- \ = 'silent! setlocal shiftwidth< softtabstop< tabstop<'
diff --git a/vim/plugin/auto_backupdir.vim b/vim/plugin/auto_backupdir.vim
index f15e7ce6..d15c3150 100644
--- a/vim/plugin/auto_backupdir.vim
+++ b/vim/plugin/auto_backupdir.vim
@@ -5,8 +5,7 @@
" Author: Tom Ryder <tom@sanctum.geek.nz>
" License: Same as Vim itself
"
-if exists('g:loaded_auto_backupdir')
- \ || &compatible
+if exists('g:loaded_auto_backupdir') || &compatible
finish
endif
let g:loaded_auto_backupdir = 1
diff --git a/vim/plugin/auto_swapdir.vim b/vim/plugin/auto_swapdir.vim
index ea41a0f0..b5f9ce3a 100644
--- a/vim/plugin/auto_swapdir.vim
+++ b/vim/plugin/auto_swapdir.vim
@@ -5,8 +5,7 @@
" Author: Tom Ryder <tom@sanctum.geek.nz>
" License: Same as Vim itself
"
-if exists('g:loaded_auto_swapdir')
- \ || &compatible
+if exists('g:loaded_auto_swapdir') || &compatible
finish
endif
let g:loaded_auto_swapdir = 1
diff --git a/vim/plugin/auto_undodir.vim b/vim/plugin/auto_undodir.vim
index 1d20ba95..9a686fb1 100644
--- a/vim/plugin/auto_undodir.vim
+++ b/vim/plugin/auto_undodir.vim
@@ -5,9 +5,7 @@
" Author: Tom Ryder <tom@sanctum.geek.nz>
" License: Same as Vim itself
"
-if exists('g:loaded_auto_undodir')
- \ || !has('persistent_undo')
- \ || &compatible
+if exists('g:loaded_auto_undodir') || &compatible || !has('persistent_undo')
finish
endif
let g:loaded_auto_undodir = 1
diff --git a/vim/plugin/big_file_options.vim b/vim/plugin/big_file_options.vim
index cdced67d..cbbacc42 100644
--- a/vim/plugin/big_file_options.vim
+++ b/vim/plugin/big_file_options.vim
@@ -5,9 +5,7 @@
" Author: Tom Ryder <tom@sanctum.geek.nz>
" License: Same as Vim itself
"
-if exists('g:loaded_big_file_options')
- \ || !has('autocmd')
- \ || &compatible
+if exists('g:loaded_big_file_options') || &compatible || !has('autocmd')
finish
endif
let g:loaded_big_file_options = 1
diff --git a/vim/plugin/command_typos.vim b/vim/plugin/command_typos.vim
index 60245a30..afc04ed3 100644
--- a/vim/plugin/command_typos.vim
+++ b/vim/plugin/command_typos.vim
@@ -7,9 +7,7 @@
" Author: Tom Ryder <tom@sanctum.geek.nz>
" License: Same as Vim itself
"
-if exists('g:loaded_command_typos')
- \ || !has('user_commands')
- \ || &compatible
+if exists('g:loaded_command_typos') || &compatible || !has('user_commands')
finish
endif
let g:loaded_command_typos = 1
diff --git a/vim/plugin/copy_linebreak.vim b/vim/plugin/copy_linebreak.vim
index 732acfea..158282bf 100644
--- a/vim/plugin/copy_linebreak.vim
+++ b/vim/plugin/copy_linebreak.vim
@@ -6,9 +6,7 @@
" Author: Tom Ryder <tom@sanctum.geek.nz>
" License: Same as Vim itself
"
-if exists('g:loaded_copy_linebreak')
- \ || !has('linebreak')
- \ || &compatible
+if exists('g:loaded_copy_linebreak') || &compatible || !has('linebreak')
finish
endif
let g:loaded_copy_linebreak = 1
diff --git a/vim/plugin/fixed_join.vim b/vim/plugin/fixed_join.vim
index 2c9e1d92..83977c2f 100644
--- a/vim/plugin/fixed_join.vim
+++ b/vim/plugin/fixed_join.vim
@@ -5,8 +5,7 @@
" Author: Tom Ryder <tom@sanctum.geek.nz>
" License: Same as Vim itself
"
-if exists('g:loaded_fixed_join')
- \ || &compatible
+if exists('g:loaded_fixed_join') || &compatible
finish
endif
let g:loaded_fixed_join = 1
diff --git a/vim/plugin/mail_mutt.vim b/vim/plugin/mail_mutt.vim
index 9bb4abd4..24ce01dd 100644
--- a/vim/plugin/mail_mutt.vim
+++ b/vim/plugin/mail_mutt.vim
@@ -5,9 +5,7 @@
" Author: Tom Ryder <tom@sanctum.geek.nz>
" License: Same as Vim itself
"
-if exists('g:loaded_mail_mutt')
- \ || !has('user_commands')
- \ || &compatible
+if exists('g:loaded_mail_mutt') || &compatible || !has('user_commands')
finish
endif
let g:loaded_mail_mutt = 1
diff --git a/vim/plugin/strip_trailing_whitespace.vim b/vim/plugin/strip_trailing_whitespace.vim
index 1264a11f..1b6d2f38 100644
--- a/vim/plugin/strip_trailing_whitespace.vim
+++ b/vim/plugin/strip_trailing_whitespace.vim
@@ -5,8 +5,7 @@
" Author: Tom Ryder <tom@sanctum.geek.nz>
" License: Same as Vim itself
"
-if exists('g:loaded_strip_trailing_whitespace')
- \ || &compatible
+if exists('g:loaded_strip_trailing_whitespace') || &compatible
finish
endif
let g:loaded_strip_trailing_whitespace = 1
diff --git a/vim/plugin/toggle_option_flag.vim b/vim/plugin/toggle_option_flag.vim
index dcc26cce..5c848368 100644
--- a/vim/plugin/toggle_option_flag.vim
+++ b/vim/plugin/toggle_option_flag.vim
@@ -5,9 +5,7 @@
" Author: Tom Ryder <tom@sanctum.geek.nz>
" License: Same as Vim itself
"
-if exists('g:loaded_toggle_option_flag')
- \ || !has('user_commands')
- \ || &compatible
+if exists('g:loaded_toggle_option_flag') || &compatible || !has('user_commands')
finish
endif
let g:loaded_toggle_option_flag = 1
diff --git a/vim/plugin/user_ftplugin.vim b/vim/plugin/user_ftplugin.vim
deleted file mode 100644
index d19348ae..00000000
--- a/vim/plugin/user_ftplugin.vim
+++ /dev/null
@@ -1,27 +0,0 @@
-"
-" user_ftplugin.vim: When switching filetypes, look for a b:undo_user_ftplugin
-" variable and use it in much the same way the core's ftplugin.vim does
-" b:undo_ftplugin in Vim >= 7.0. This allows you to undo your own ftplugin
-" files the same way you can the core ones.
-"
-" Author: Tom Ryder <tom@sanctum.geek.nz>
-" License: Same as Vim itself
-"
-if exists('g:loaded_user_ftplugin')
- \ || !has('autocmd')
- \ || &compatible
- finish
-endif
-let g:loaded_user_ftplugin = 1
-
-function! s:LoadUserFtplugin()
- if exists('b:undo_user_ftplugin')
- execute b:undo_user_ftplugin
- unlet b:undo_user_ftplugin
- endif
-endfunction
-
-augroup user_ftplugin
- autocmd!
- autocmd FileType * call s:LoadUserFtplugin()
-augroup END
diff --git a/vim/plugin/user_indent.vim b/vim/plugin/user_indent.vim
deleted file mode 100644
index 84b966d6..00000000
--- a/vim/plugin/user_indent.vim
+++ /dev/null
@@ -1,27 +0,0 @@
-"
-" user_indent.vim: When switching filetypes, look for a b:undo_user_indent
-" variable and use it in much the same way the core's indent.vim does
-" b:undo_indent in Vim >= 7.0. This allows you to undo your own indent files
-" the same way you can the core ones.
-"
-" Author: Tom Ryder <tom@sanctum.geek.nz>
-" License: Same as Vim itself
-"
-if exists('g:loaded_user_indent')
- \ || !has('autocmd')
- \ || &compatible
- finish
-endif
-let g:loaded_user_indent = 1
-
-function! s:LoadUserIndent()
- if exists('b:undo_user_indent')
- execute b:undo_user_indent
- unlet b:undo_user_indent
- endif
-endfunction
-
-augroup user_indent
- autocmd!
- autocmd FileType * call s:LoadUserIndent()
-augroup END