From 69cac9e123d74fa9fecf96177cb79d8370a833f1 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Fri, 10 Nov 2017 21:13:21 +1300 Subject: Move backup, swap, and undo dir logic into plugins --- vim/plugin/auto_backupdir.vim | 56 ++++++++++++++++++++++++++++++++++++++++++ vim/plugin/auto_swapdir.vim | 56 ++++++++++++++++++++++++++++++++++++++++++ vim/plugin/auto_undodir.vim | 57 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 vim/plugin/auto_backupdir.vim create mode 100644 vim/plugin/auto_swapdir.vim create mode 100644 vim/plugin/auto_undodir.vim (limited to 'vim/plugin') diff --git a/vim/plugin/auto_backupdir.vim b/vim/plugin/auto_backupdir.vim new file mode 100644 index 00000000..f15e7ce6 --- /dev/null +++ b/vim/plugin/auto_backupdir.vim @@ -0,0 +1,56 @@ +" +" auto_backupdir.vim: Configure 'backupdir' automatically, including trying +" hard to create it. +" +" Author: Tom Ryder +" License: Same as Vim itself +" +if exists('g:loaded_auto_backupdir') + \ || &compatible + finish +endif +let g:loaded_auto_backupdir = 1 + +" Define the backup path we want +if exists('$VIM_BACKUPDIR') + let s:backupdir = $VIM_BACKUPDIR +else + + " This is imperfect in that it will break if you have a backslashed comma in + " the first component of your &runtimepath, but if you're doing that, you + " probably already have way bigger problems + let s:backupdir + \ = strpart(&runtimepath, 0, stridx(&runtimepath, ',')) + \ . '/backup' +endif + +" If the prospective backup directory does not exist, try hard to create it +if !isdirectory(expand(s:backupdir)) + + " Try Vim's native mkdir() first + if exists('*mkdir') + silent! call mkdir(expand(s:backupdir), 'p', 0700) + + " Failing that, use an OS-dependent command + " (Fortunately, Unix and Windows are the only OS types in the world) + elseif has('unix') + silent! execute '!mkdir -m 0700 -p ' + \ . shellescape(expand(s:backupdir)) + elseif has('win32') || has('win64') + silent! execute '!mkdir ' + \ . shellescape(expand(s:backupdir)) + endif + +endif + +" If the directory exists after that... +if isdirectory(expand(s:backupdir)) + + " Set the backup directory and turn backups on + execute 'set backupdir^=' . s:backupdir . '//' + set backup + +" If not, give up and raise an error +else + echoerr 'Could not create backupdir ' . s:backupdir +endif diff --git a/vim/plugin/auto_swapdir.vim b/vim/plugin/auto_swapdir.vim new file mode 100644 index 00000000..ea41a0f0 --- /dev/null +++ b/vim/plugin/auto_swapdir.vim @@ -0,0 +1,56 @@ +" +" auto_swapdir.vim: Configure 'directory' automatically, including trying hard +" to create it. +" +" Author: Tom Ryder +" License: Same as Vim itself +" +if exists('g:loaded_auto_swapdir') + \ || &compatible + finish +endif +let g:loaded_auto_swapdir = 1 + +" Define the swap path we want +if exists('$VIM_SWAPDIR') + let s:swapdir = $VIM_SWAPDIR +else + + " This is imperfect in that it will break if you have a backslashed comma in + " the first component of your &runtimepath, but if you're doing that, you + " probably already have way bigger problems + let s:swapdir + \ = strpart(&runtimepath, 0, stridx(&runtimepath, ',')) + \ . '/swap' +endif + +" If the prospective swapfile directory does not exist, try hard to create it +if !isdirectory(expand(s:swapdir)) + + " Try Vim's native mkdir() first + if exists('*mkdir') + silent! call mkdir(expand(s:swapdir), 'p', 0700) + + " Failing that, use an OS-dependent command + " (Fortunately, Unix and Windows are the only OS types in the world) + elseif has('unix') + silent! execute '!mkdir -m 0700 -p ' + \ . shellescape(expand(s:swapdir)) + elseif has('win32') || has('win64') + silent! execute '!mkdir ' + \ . shellescape(expand(s:swapdir)) + endif + +endif + +" If the directory exists after that... +if isdirectory(expand(s:swapdir)) + + " Set the swapfile directory and turn swapfiles on + execute 'set directory^=' . s:swapdir . '//' + set swapfile + +" If not, give up and raise an error +else + echoerr 'Could not create swapdir ' . s:swapdir +endif diff --git a/vim/plugin/auto_undodir.vim b/vim/plugin/auto_undodir.vim new file mode 100644 index 00000000..1d20ba95 --- /dev/null +++ b/vim/plugin/auto_undodir.vim @@ -0,0 +1,57 @@ +" +" auto_undodir.vim: Configure 'undodir' automatically, including trying hard +" to create it. +" +" Author: Tom Ryder +" License: Same as Vim itself +" +if exists('g:loaded_auto_undodir') + \ || !has('persistent_undo') + \ || &compatible + finish +endif +let g:loaded_auto_undodir = 1 + +" Define the undo path we want +if exists('$VIM_UNDODIR') + let s:undodir = $VIM_UNDODIR +else + + " This is imperfect in that it will break if you have a backslashed comma in + " the first component of your &runtimepath, but if you're doing that, you + " probably already have way bigger problems + let s:undodir + \ = strpart(&runtimepath, 0, stridx(&runtimepath, ',')) + \ . '/undo' +endif + +" If the prospective undo directory does not exist, try hard to create it +if !isdirectory(expand(s:undodir)) + + " Try Vim's native mkdir() first + if exists('*mkdir') + silent! call mkdir(expand(s:undodir), 'p', 0700) + + " Failing that, use an OS-dependent command + " (Fortunately, Unix and Windows are the only OS types in the world) + elseif has('unix') + silent! execute '!mkdir -m 0700 -p ' + \ . shellescape(expand(s:undodir)) + elseif has('win32') || has('win64') + silent! execute '!mkdir ' + \ . shellescape(expand(s:undodir)) + endif + +endif + +" If the directory exists after that... +if isdirectory(expand(s:undodir)) + + " Set the undo directory and turn persistent undo files on + execute 'set undodir^=' . s:undodir . '//' + set undofile + +" If not, give up and raise an error +else + echoerr 'Could not create undodir ' . s:undodir +endif -- cgit v1.2.3 From 8b79ec9365491f8fb2bd48452b6aca68d2b673d2 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Fri, 10 Nov 2017 21:54:42 +1300 Subject: Use exists+ test rather than exists& From :help hidden-options: >Not all options are supported in all versions. This depends on the >supported features and sometimes on the system. A remark about this is >in curly braces below. When an option is not supported it may still be >set without getting an error, this is called a hidden option. You can't >get the value of a hidden option though, it is not stored. > >To test if option "foo" can be used with ":set" use something like this: > if exists('&foo') >This also returns true for a hidden option. To test if option "foo" is >really supported use something like this: > if exists('+foo') --- vim/plugin/big_file_options.vim | 2 +- vim/plugin/copy_linebreak.vim | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'vim/plugin') diff --git a/vim/plugin/big_file_options.vim b/vim/plugin/big_file_options.vim index bbbedc96..cdced67d 100644 --- a/vim/plugin/big_file_options.vim +++ b/vim/plugin/big_file_options.vim @@ -44,7 +44,7 @@ function! s:BigFileOptions() endif " Limit the number of columns of syntax highlighting - if exists('&synmaxcol') + if exists('+synmaxcol') \ && &synmaxcol > g:big_file_synmaxcol execute 'setlocal synmaxcol=' . g:big_file_synmaxcol endif diff --git a/vim/plugin/copy_linebreak.vim b/vim/plugin/copy_linebreak.vim index 2b5f7243..732acfea 100644 --- a/vim/plugin/copy_linebreak.vim +++ b/vim/plugin/copy_linebreak.vim @@ -17,7 +17,7 @@ let g:loaded_copy_linebreak = 1 function! s:CopyLinebreakEnable() setlocal nolinebreak linebreak? setlocal showbreak= - if exists('&breakindent') + if exists('+breakindent') setlocal nobreakindent endif endfunction @@ -26,7 +26,7 @@ endfunction function! s:CopyLinebreakDisable() setlocal linebreak linebreak? setlocal showbreak< - if exists('&breakindent') + if exists('+breakindent') setlocal breakindent< endif endfunction -- cgit v1.2.3 From fe8e94bea39895f2544ae83916da83a4f2affa21 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Sat, 11 Nov 2017 00:59:12 +1300 Subject: Add new mail_mutt.vim plugin, apply mappings This plugin provides a shortcut for staring email messages in Mutt with a range of lines. --- vim/plugin/mail_mutt.vim | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 vim/plugin/mail_mutt.vim (limited to 'vim/plugin') diff --git a/vim/plugin/mail_mutt.vim b/vim/plugin/mail_mutt.vim new file mode 100644 index 00000000..67444e4d --- /dev/null +++ b/vim/plugin/mail_mutt.vim @@ -0,0 +1,41 @@ +" +" mail_mutt.vim: Start a mutt(1) message with the lines in the given range, +" defaulting to the entire buffer. +" +" Author: Tom Ryder +" License: Same as Vim itself +" +if exists('g:loaded_mail_mutt') + \ || !has('user_commands') + \ || &compatible + finish +endif +let g:loaded_mail_mutt = 1 + +" Declare function +function! s:MailMutt(start, end) + + " Check we'll have mutt(1) to execute + if !executable('mutt') + echoerr 'mutt not found in $PATH' + finish + endif + + " Create a temporary file + let l:tf = tempname() + + " Write the contents of the buffer to it + let l:range = a:start . ',' . a:end + let l:command = 'write ' . fnameescape(l:tf) + execute l:range . l:command + + + " Run mutt(1) with that file as its input + execute '!mutt -i ' . shellescape(l:tf) + +endfunction + +" Create a command to wrap around that function +command -nargs=0 -range=% + \ MailMutt + \ call MailMutt(, ) -- cgit v1.2.3 From f9600abb2182b467dfd24ce16e3eebed26723338 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Sat, 11 Nov 2017 01:05:15 +1300 Subject: Move mutt_mail.vim line select logic into plugin This makes the configuration shorter and easier to read. --- vim/plugin/mail_mutt.vim | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'vim/plugin') diff --git a/vim/plugin/mail_mutt.vim b/vim/plugin/mail_mutt.vim index 67444e4d..9bb4abd4 100644 --- a/vim/plugin/mail_mutt.vim +++ b/vim/plugin/mail_mutt.vim @@ -39,3 +39,18 @@ endfunction command -nargs=0 -range=% \ MailMutt \ call MailMutt(, ) + +" Mapping to mail current line in normal mode +nnoremap + \ MailMuttLine + \ :.MailMutt + +" Mapping to mail whole buffer in normal mode +nnoremap + \ MailMuttBuffer + \ :%MailMutt + +" Mapping to mail selected lines in visual/select mode +vnoremap + \ MailMuttSelected + \ :MailMutt -- cgit v1.2.3