]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - vimrc
vimrc: Add support to undo Ctrl-U in insert mode.
[config/dotfiles.git] / vimrc
diff --git a/vimrc b/vimrc
index 5c80473dc265cddb6483d8ebe890ff0367ae1fcf..9e98ef675bca1522958bea887413e1e8de949165 100644 (file)
--- a/vimrc
+++ b/vimrc
@@ -4,9 +4,12 @@
 " EDITOR SETTINGS
 
 " Save 'runtimepath' in case it was changed by the system's configuration
-" files.
+" files. Also save 'diff' as set all& resets it; but somehow later (after
+" sourcing the vimrc - for example in a VimEnter autocmd) it gets
+" automagically restored to the correct value.
 if has('eval')
     let s:save_runtimepath = &runtimepath
+    let s:save_diff = &diff
 endif
 " Reset all options (except 'term', 'lines' and 'columns'). This makes sure a
 " system wide configuration file doesn't change default values.
@@ -14,14 +17,16 @@ set all&
 " And restore it after all other options were reset.
 if has('eval')
     let &runtimepath = s:save_runtimepath
+    let &diff = s:save_diff
     unlet s:save_runtimepath
+    unlet s:save_diff
 endif
 
 " Make sure Vim (and not Vi) settings are used.
 set nocompatible
 
 " Load my scripts from ~/.vim (my scripts) and ~/.vim/runtime (checkout of Vim
-" runtime files).
+" runtime files) if available.
 set runtimepath-=~/.vim
 set runtimepath^=~/.vim,~/.vim/runtime
 
@@ -111,10 +116,12 @@ endif
 set ignorecase
 set smartcase
 
-" Activate spell checking, use English as default. Don't use spell checking
-" when diffing.
-if exists('+spell') && has('syntax') && !&diff
-    set spell
+" Activate spell checking, use English as default.
+if exists('+spell') && has('syntax')
+    " But not when diffing as spell checking is distracting in this case.
+    if !&diff
+        set spell
+    endif
     set spelllang=en_us
 endif
 
@@ -321,6 +328,11 @@ endif
 " vimgor (bot) in #vim on Freenode (2010-03-30 05:58 CEST).
 noremap <silent> <C-L> :nohlsearch<CR><C-L>
 
+" Ctrl-U in insert mode deletes a lot, break undo sequence before deleting the
+" line so the change can be undone. Thanks to the vimrc_example.vim file in
+" Vim's source.
+inoremap <C-U> <C-G>u<C-U>
+
 
 " ABBREVIATIONS
 
@@ -443,7 +455,7 @@ if has('autocmd')
             autocmd InsertLeave * set nopaste
         endif
 
-" Save changes when running :mak[e] before 'makeprg' is called.
+" Write file when running :mak[e] before 'makeprg' is called.
         autocmd QuickFixCmdPre * write
 
 " AFTER/FTPLUGIN AUTO COMMANDS
@@ -486,13 +498,12 @@ if has('autocmd')
 endif
 
 
-" CUSTOM FUNCTIONS
+" CUSTOM FUNCTIONS AND COMMANDS
 
 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).
+" 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
@@ -532,4 +543,21 @@ if has('eval')
         endif
     endfunction
 
+" 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