aboutsummaryrefslogtreecommitdiff
path: root/vim/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'vim/plugin')
-rw-r--r--vim/plugin/auto_backupdir.vim56
-rw-r--r--vim/plugin/auto_swapdir.vim56
-rw-r--r--vim/plugin/auto_undodir.vim57
-rw-r--r--vim/plugin/big_file_options.vim2
-rw-r--r--vim/plugin/copy_linebreak.vim4
-rw-r--r--vim/plugin/mail_mutt.vim56
6 files changed, 228 insertions, 3 deletions
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 <tom@sanctum.geek.nz>
+" 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 <tom@sanctum.geek.nz>
+" 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 <tom@sanctum.geek.nz>
+" 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
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
diff --git a/vim/plugin/mail_mutt.vim b/vim/plugin/mail_mutt.vim
new file mode 100644
index 00000000..9bb4abd4
--- /dev/null
+++ b/vim/plugin/mail_mutt.vim
@@ -0,0 +1,56 @@
+"
+" mail_mutt.vim: Start a mutt(1) message with the lines in the given range,
+" defaulting to the entire buffer.
+"
+" Author: Tom Ryder <tom@sanctum.geek.nz>
+" 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 <SID>MailMutt(<line1>, <line2>)
+
+" Mapping to mail current line in normal mode
+nnoremap <silent> <unique>
+ \ <Plug>MailMuttLine
+ \ :<C-U>.MailMutt<CR>
+
+" Mapping to mail whole buffer in normal mode
+nnoremap <silent> <unique>
+ \ <Plug>MailMuttBuffer
+ \ :<C-U>%MailMutt<CR>
+
+" Mapping to mail selected lines in visual/select mode
+vnoremap <silent> <unique>
+ \ <Plug>MailMuttSelected
+ \ :MailMutt<CR>