+" PLUGIN SETTINGS
+
+if has('eval')
+" Use pathogen which allows one 'runtimepath' entry per plugin. This makes
+" installing/removing/updating plugins simple. (Used for plugins with more
+" than one file.)
+ if v:version >= 700
+ execute 'call pathogen#runtime_append_all_bundles()'
+ endif
+
+" Settings for the NERD commenter.
+ " Don't create any mappings I don't want to use.
+ let NERDCreateDefaultMappings = 0
+ " Map toggle comment.
+ map <Leader><Leader> <Plug>NERDCommenterToggle
+
+" XPTemplate settings.
+ " Try to maintain snippet rendering even after editing outside of a
+ " snippet.
+ let g:xptemplate_strict = 0
+ " Don't complete any braces automatically.
+ let g:xptemplate_brace_complete = 0
+ " Only highlight the current placeholder.
+ let g:xptemplate_highlight = 'current'
+endif
+
+
+" AUTO COMMANDS
+
+" Use a custom auto group to prevent problems when the vimrc files is sourced
+" twice.
+if has('autocmd')
+ augroup vimrc
+" Remove all autocmds from the current group.
+ autocmd!
+
+" Go to last position of opened files. Taken from :help last-position-jump.
+ autocmd BufReadPost *
+ \ if line("'\"") > 1 && line("'\"") <= line("$") |
+ \ execute "normal! g'\"" |
+ \ endif
+" But not for Git commits, go to beginning of the file.
+ autocmd BufReadPost COMMIT_EDITMSG normal! gg
+
+" Make sure 'list' and 'number' is disabled in help files. This is necessary
+" when switching to a help buffer which is in the background with :buffer as
+" these options are local to windows (and not only to buffers). This happens
+" because I often want to use only one window and thus the help buffer is in
+" the background.
+ autocmd BufWinEnter *.txt
+ \ if &filetype == 'help' |
+ \ setlocal nolist |
+ \ setlocal nonumber |
+ \ endif
+
+" Automatically disable 'paste' mode when leaving insert mode. Thanks to
+" Raimondi in #vim on Freenode (2010-08-14 23:01 CEST). Very useful as I only
+" want to paste once and then 'paste' gets automatically unset.
+ if exists('##InsertLeave')
+ autocmd InsertLeave * set nopaste
+ endif
+
+" Save changes when running :mak[e] before 'makeprg' is called.
+ autocmd QuickFixCmdPre * write
+
+" AFTER/FTPLUGIN AUTO COMMANDS
+
+" Disable spell checking for files which don't need it.
+ autocmd FileType deb setlocal nospell
+ autocmd FileType diff setlocal nospell
+ autocmd FileType tar setlocal nospell
+" Fix to allow Vim edit crontab files as crontab doesn't work with
+" backupcopy=auto.
+ autocmd FileType crontab setlocal backupcopy=yes
+" Don't use the modeline in git commits as the diff created by `git commit -v`
+" may contain one which could change the filetype or other settings of the
+" commit buffer. Also make sure we use only 72 characters per line which is
+" the recommendation for git commit messages (http://tpope.net/node/106).
+ autocmd FileType gitcommit let g:secure_modelines_allowed_items = [] |
+ \ setlocal textwidth=72
+" Use the same comment string as for Vim files in Vimperator files.
+ autocmd FileType vimperator setlocal commentstring=\"%s
+" Use tex compiler for (La)TeX files.
+ autocmd FileType tex compiler tex
+
+" FTDETECT AUTO COMMANDS
+
+" Recognize .md as markdown files (Vim default is .mkd).
+ autocmd BufRead,BufNewFile *.md set filetype=mkd
+" Recognize .test as Tcl files.
+ autocmd BufRead,BufNewFile *.test set filetype=tcl
+
+" OTHER AUTO COMMANDS
+
+" Disable spell checking, displaying of list characters and long lines when
+" viewing documentation.
+ autocmd BufReadPost /usr/share/doc/* setlocal nospell nolist | 2match
+
+" Use diff filetype for mercurial patches in patch queue.
+ autocmd BufReadPost */.hg/patches/* set filetype=diff
+
+ augroup END
+endif
+
+
+" CUSTOM FUNCTIONS
+
+if has('eval')
+ " New text-objects ii and ai to work on text with the same indentation.
+ " Thanks to
+ " http://vim.wikia.com/index.php?title=Indent_text_object&oldid=27126
+ " (visited on 2011-11-19).
+ onoremap <silent>ai :<C-U>call <SID>IndTxtObj(0)<CR>
+ onoremap <silent>ii :<C-U>call <SID>IndTxtObj(1)<CR>
+ vnoremap <silent>ai :<C-U>call <SID>IndTxtObj(0)<CR><Esc>gv
+ vnoremap <silent>ii :<C-U>call <SID>IndTxtObj(1)<CR><Esc>gv
+
+ function! s:IndTxtObj(inner)
+ let curline = line(".")
+ let lastline = line("$")
+ let i = indent(line(".")) - &shiftwidth * (v:count1 - 1)
+ let i = i < 0 ? 0 : i
+ if getline(".") !~ "^\\s*$"
+ let p = line(".") - 1
+ let nextblank = getline(p) =~ "^\\s*$"
+ while p > 0
+ \ && ((i == 0 && !nextblank)
+ \ || (i > 0 && ((indent(p) >= i
+ \ && !(nextblank && a:inner))
+ \ || (nextblank && !a:inner))))
+ -
+ let p = line(".") - 1
+ let nextblank = getline(p) =~ "^\\s*$"
+ endwhile
+ normal! 0V
+ call cursor(curline, 0)
+ let p = line(".") + 1
+ let nextblank = getline(p) =~ "^\\s*$"
+ while p <= lastline
+ \ && ((i == 0 && !nextblank)
+ \ || (i > 0 && ((indent(p) >= i
+ \ && !(nextblank && a:inner))
+ \ || (nextblank && !a:inner))))
+ +
+ let p = line(".") + 1
+ let nextblank = getline(p) =~ "^\\s*$"
+ endwhile
+ normal! $
+ endif
+ endfunction
+
+endif