From 9929ca9ec20867cc910bf6b17839ee20dcd35f46 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Sat, 22 Jun 2019 16:59:28 +1200 Subject: Round out and apply alternate filetypes plugin This is a good one. --- vim/after/ftplugin/html.vim | 5 ----- vim/after/ftplugin/php.vim | 11 +++-------- vim/autoload/alternate_filetypes.vim | 14 ++++++++++++++ vim/ftplugin/textarea.vim | 11 +++++------ vim/plugin/alternate_filetypes.vim | 13 ++----------- vim/vimrc | 3 +++ 6 files changed, 27 insertions(+), 30 deletions(-) create mode 100644 vim/autoload/alternate_filetypes.vim (limited to 'vim') diff --git a/vim/after/ftplugin/html.vim b/vim/after/ftplugin/html.vim index 027fed1f..7866f31b 100644 --- a/vim/after/ftplugin/html.vim +++ b/vim/after/ftplugin/html.vim @@ -41,8 +41,3 @@ endif nnoremap r \ :call html#UrlLink() let b:undo_ftplugin .= '|nunmap r' - -" Switch to PHP filetype for templated PHP -nnoremap f - \ :setlocal filetype=php -let b:undo_ftplugin .= '|nunmap f' diff --git a/vim/after/ftplugin/php.vim b/vim/after/ftplugin/php.vim index 3b023f9e..c7f77ece 100644 --- a/vim/after/ftplugin/php.vim +++ b/vim/after/ftplugin/php.vim @@ -21,12 +21,7 @@ let b:undo_ftplugin .= '|setlocal keywordprg<' let b:regex_escape_flavor = 'ere' let b:undo_ftplugin .= '|unlet b:regex_escape_flavor' -" Stop here if the user doesn't want ftplugin mappings -if exists('no_plugin_maps') || exists('no_php_maps') - finish +" Set HTML as an alternative filetype +if !exists('b:alternate_filetypes') + let b:alternate_filetypes = [&filetype, 'html'] endif - -" Switch to HTML filetype for templated PHP -nnoremap f - \ :setlocal filetype=html -let b:undo_ftplugin .= '|nunmap f' diff --git a/vim/autoload/alternate_filetypes.vim b/vim/autoload/alternate_filetypes.vim new file mode 100644 index 00000000..26c2a0d5 --- /dev/null +++ b/vim/autoload/alternate_filetypes.vim @@ -0,0 +1,14 @@ +function! alternate_filetypes#() abort + if exists('b:alternate_filetypes') + let filetypes = b:alternate_filetypes + let index = index(filetypes, &filetype) + if index >= 0 + let &filetype = filetypes[ + \ (index + 1) % len(filetypes) + \] + else + unlet b:alternate_filetypes + endif + endif + set filetype? +endfunction diff --git a/vim/ftplugin/textarea.vim b/vim/ftplugin/textarea.vim index 5cdb2bba..4db97b58 100644 --- a/vim/ftplugin/textarea.vim +++ b/vim/ftplugin/textarea.vim @@ -1,13 +1,12 @@ +" Set mail message as an alternative filetype +if !exists('b:alternate_filetypes') + let b:alternate_filetypes = [&filetype, 'mail'] +endif + " Stop here if the user doesn't want ftplugin mappings if exists('no_plugin_maps') || exists('no_textarea_maps') finish endif -" Local mapping to switch to mail filetype, just because that's very often the -" contents of text areas I edit using TextEditorAnywhere -nnoremap f - \ :setlocal filetype=mail -let b:undo_ftplugin = 'nunmap f' - " #s expands to the #signature tag used in Cerb inoreabbrev #s #signature diff --git a/vim/plugin/alternate_filetypes.vim b/vim/plugin/alternate_filetypes.vim index 6e765feb..d530b874 100644 --- a/vim/plugin/alternate_filetypes.vim +++ b/vim/plugin/alternate_filetypes.vim @@ -1,13 +1,4 @@ -function! s:AlternateFileType() abort - let filetypes = get(b:, 'alternate_filetypes', [&filetype]) - if &filetype !=# filetypes[0] - let &filetype = filetypes[0] - endif - set filetype? -endfunction command -bar AlternateFileType - \ call s:AlternateFileType() -nnoremap (AlternateFileType) + \ call alternate_filetypes#() +nnoremap (AlternateFileType) \ :AlternateFileType -nmap # (AlternateFileType) -nmap 3 # diff --git a/vim/vimrc b/vim/vimrc index 79445ea6..7ce683a8 100644 --- a/vim/vimrc +++ b/vim/vimrc @@ -1611,6 +1611,9 @@ xmap r (ReplaceOperator) nnoremap ! \ :! nmap 1 ! +"" Leader,#/3 gives me my fortune +nmap # (AlternateFileType) +nmap 3 # "" Leader,$/4 gives me my fortune nnoremap $ \ :Fortune -- cgit v1.2.3