From 2c20a3c3427befd77029fc37cbda0476f650b681 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Sat, 4 Nov 2017 18:21:16 +1300 Subject: Rename toggle plugin again, use commands not funcs This method makes a bit more sense, and amounts to slightly less verbose mapping commands. It does really on the +user_commands feature being available, however. --- vim/autoload/flag_toggle.vim | 51 --------------------------------------- vim/config/format.vim | 16 ++++++------ vim/doc/flag_toggle.txt | 15 ------------ vim/doc/toggle_option_flag.txt | 16 ++++++++++++ vim/plugin/toggle_option_flag.vim | 44 +++++++++++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 74 deletions(-) delete mode 100644 vim/autoload/flag_toggle.vim delete mode 100644 vim/doc/flag_toggle.txt create mode 100644 vim/doc/toggle_option_flag.txt create mode 100644 vim/plugin/toggle_option_flag.vim diff --git a/vim/autoload/flag_toggle.vim b/vim/autoload/flag_toggle.vim deleted file mode 100644 index 2ff4584d..00000000 --- a/vim/autoload/flag_toggle.vim +++ /dev/null @@ -1,51 +0,0 @@ -" -" flag_toggle.vim: Provide functions to toggle flags in single-char grouped -" options like 'formatoptions', 'shortmess', 'complete' etc. -" -" This will fail hilariously if you try to set e.g. 'switchbuf' with it! -" -" Author: Tom Ryder -" License: Same as Vim itself -" - -" Public wrapper function to toggle a flag with 'set' -function! flag_toggle#Toggle(option, flag) - call s:Toggle(a:option, a:flag, 0) -endfunction - -" Public wrapper function to toggle a flag with 'setlocal' -function! flag_toggle#ToggleLocal(option, flag) - call s:Toggle(a:option, a:flag, 1) -endfunction - -" Internal function to do the toggling -function! s:Toggle(option, flag, local) - - " Check for weird options, we don't want to eval() anything funny - if a:option =~# '[^a-z]' - echoerr 'Illegal option name' - return - endif - - " Weird flags, too; should be a single inoffensive char - if a:flag !~# '^[a-z0-9.]$' - echoerr 'Illegal flag' - return - endif - - " Choose which set command to use - if a:local - let l:set = 'setlocal ' - else - let l:set = 'set ' - endif - - " Use eval() to assign -= or += to l:op for the option toggle - " (I couldn't get {curly braces} indirection to work) - let l:op = '' - execute 'let l:op = &'.a:option.' =~# a:flag ? "-=" : "+="' - - " Use eval() to perform the option toggle and then print the value - execute l:set . ' ' . a:option . l:op . a:flag . ' ' . a:option . '?' - -endfunction diff --git a/vim/config/format.vim b/vim/config/format.vim index 9c68d843..572e9877 100644 --- a/vim/config/format.vim +++ b/vim/config/format.vim @@ -5,7 +5,7 @@ if v:version > 703 || v:version ==# 703 && has('patch541') endif " -" Use flag_toggle.vim plugin to bind quick toggle actions for some +" Use toggle_option_flag.vim plugin to bind quick toggle actions for some " 'formatoptions' flags: " " a - Automatically format paragraphs, reapplying the wrap on every text @@ -16,11 +16,11 @@ endif " to set for me) " t - Automatically wrap text at 'textwidth' (as above) " -if has('eval') && v:version >= 701 - silent! nnoremap a - \ :call flag_toggle#ToggleLocal('formatoptions', 'a') - silent! nnoremap c - \ :call flag_toggle#ToggleLocal('formatoptions', 'c') - silent! nnoremap t - \ :call flag_toggle#ToggleLocal('formatoptions', 't') +if has('eval') && has('user_commands') + nnoremap a + \ :ToggleOptionFlagLocal formatoptions a + nnoremap c + \ :ToggleOptionFlagLocal formatoptions c + nnoremap t + \ :ToggleOptionFlagLocal formatoptions t endif diff --git a/vim/doc/flag_toggle.txt b/vim/doc/flag_toggle.txt deleted file mode 100644 index 5f1b504a..00000000 --- a/vim/doc/flag_toggle.txt +++ /dev/null @@ -1,15 +0,0 @@ -*flag_toggle.txt* Functions to toggle single-character flags in options - -Author: Tom Ryder -License: Same terms as Vim itself (see |license|) - -This plugin provides functions flag_toggle#Toggle(option, flag) and -flag_toggle#ToggleLocal(option, flag) to toggle the values of options like -|'formatoptions'| or |'complete'| that have values comprised of -single-character flags. The author originally designed it for toggling flags in -|'formatoptions'| quickly. - -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/toggle_option_flag.txt b/vim/doc/toggle_option_flag.txt new file mode 100644 index 00000000..16557d5c --- /dev/null +++ b/vim/doc/toggle_option_flag.txt @@ -0,0 +1,16 @@ +*toggle_option_flag.txt* Commands to toggle single-character option flags + +Author: Tom Ryder +License: Same terms as Vim itself (see |license|) + +This plugin provides commands :ToggleOptionFlag and :ToggleOptionFlagLocal to +toggle the values of options like |'formatoptions'| or |'complete'| that have +values comprised of single-character flags. The author originally designed it +for toggling flags in |'formatoptions'| quickly. + + :ToggleOptionFlag formatoptions a + :ToggleOptionFlagLocal shortmess I + +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/plugin/toggle_option_flag.vim b/vim/plugin/toggle_option_flag.vim new file mode 100644 index 00000000..10b4fe7a --- /dev/null +++ b/vim/plugin/toggle_option_flag.vim @@ -0,0 +1,44 @@ +" +" toggle_option_flag.vim: Provide commands to toggle flags in single-char +" grouped options like 'formatoptions', 'shortmess', 'complete' etc. +" +" This will fail hilariously if you try to set e.g. 'switchbuf' with it! +" +" Author: Tom Ryder +" License: Same as Vim itself +" +if has('eval') && has('user_commands') + + " Internal function to do the toggling + function! s:Toggle(option, flag, local) + + " Check for weird options, we don't want to eval() anything funny + if a:option =~# '[^a-z]' + echoerr 'Illegal option name' + return + endif + + " Weird flags, too; should be a single inoffensive char + if a:flag !~# '^[a-z0-9.]$' + echoerr 'Illegal flag' + return + endif + + " Choose which set command to use + let l:set = a:local ? 'setlocal' : 'set' + + " Use eval() to assign -= or += to l:op for the option toggle + " (I couldn't get {curly braces} indirection to work) + let l:op = '' + execute 'let l:op = &'.a:option.' =~# a:flag ? "-=" : "+="' + + " Use eval() to perform the option toggle and then print the value + execute l:set . ' ' . a:option . l:op . a:flag . ' ' . a:option . '?' + + endfunction + + " User commands wrapping around calls to the above function + command! -nargs=+ ToggleOptionFlag :call Toggle(, 0) + command! -nargs=+ ToggleOptionFlagLocal :call Toggle(, 1) + +endif -- cgit v1.2.3