+" AUTO COMMANDS
+
+" Use a custom auto group to prevent problems when the vimrc files is sourced
+" twice.
+if has('autocmd')
+ augroup vimrc
+
+" 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. InsertLeave
+" doesn't exist in older Vims.
+ if exists('##InsertLeave')
+ autocmd InsertLeave * set nopaste
+ endif
+
+" Write all files when running :mak[e] before 'makeprg' is called.
+" QuickFixCmdPre doesn't exist in older Vims.
+ if exists('##QuickFixCmdPre')
+ autocmd QuickFixCmdPre * wall
+ endif
+
+" Don't ignore case while in insert mode, but ignore case in all other modes.
+" This causes <C-N>/<C-P> to honor the case and thus only complete matching
+" capitalization. But while searching (/) 'ignorecase' is used.
+" InsertEnter/InsertLeave doesn't exist in older Vims.
+ if exists('##InsertEnter') && exists('##InsertLeave')
+ autocmd InsertEnter * set noignorecase
+ autocmd InsertLeave * set ignorecase
+ endif
+
+" Display a warning when editing a file which contains "do not edit" (ignoring
+" the case, \c), for example template files which were preprocessed or
+" auto-generated files. Especially useful when the header is not displayed on
+" the first screen, e.g. when the old position is restored. Not for vimrc
+" though.
+ function! s:SearchForDoNotEditHeader()
+ if search('\cdo not edit', 'n') == 0
+ \ || expand('<afile>:t') =~# '^.\?vimrc$'
+ return
+ endif
+
+ echoerr 'Do not edit this file! (Maybe a template file.)'
+ endfunction
+ autocmd BufRead * call <SID>SearchForDoNotEditHeader()
+
+" 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 AND COMMANDS
+
+if has('eval')
+" Convenient command to see the difference between the current buffer and the
+" file it was loaded from, thus the changes you made. Thanks to the
+" vimrc_example.vim file in Vim's source. Modified to use the same filetype
+" for the diffed file than the filetype for the original file.
+ if !exists(':DiffOrig')
+ command DiffOrig
+ \ let s:diff_orig_filetype = &filetype
+ \ | vertical new
+ \ | let &filetype = s:diff_orig_filetype
+ \ | unlet s:diff_orig_filetype
+ \ | set buftype=nofile
+ \ | read ++edit #
+ \ | 0d_
+ \ | diffthis
+ \ | wincmd p
+ \ | diffthis
+ endif
+endif