" Vim main configuration file.
-" Copyright (C) 2008-2012 Simon Ruderich
+" Copyright (C) 2008-2013 Simon Ruderich
"
" This file is free software: you can redistribute it and/or modify
" it under the terms of the GNU General Public License as published by
" Save 'runtimepath' in case it was changed by the system's configuration
" 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.
+" automagically restored to the correct value. Not sure what exactly Vim is
+" doing there.
if has('eval')
let s:save_runtimepath = &runtimepath
let s:save_diff = &diff
set runtimepath-=~/.vim
set runtimepath^=~/.vim,~/.vim/runtime
-" Don't store swap files in the same directory as the edited file. But only if
+" Don't store swap files in the same directory as the edited file, but only if
" we have a "safe" writable directory available.
if filewritable('~/.tmp') == 2 || filewritable('~/tmp') == 2
set directory-=.
" started.
set formatoptions+=l
" Remove comment leader when joining lines where it makes sense.
-if <SID>HasVersionAndPatch(703, 541)
+if s:HasVersionAndPatch(703, 541)
set formatoptions+=j
endif
set spelllang=en_us
endif
-" Allow buffers with changes to be hidden. Very important for effective
+" Allow buffers with changes to be hidden. Very important for efficient
" editing with multiple buffers. Prevents the "E37: No write since last change
-" (add ! to override)" warning when switching buffers.
+" (add ! to override)" warning when switching modified buffers.
set hidden
" When splitting vertically put the new window right of the current one.
" Short function names to make 'statusline' more readable.
function! SBC()
- return <SID>StatuslineBufferCount()
+ return s:StatuslineBufferCount()
endfunction
function! SRF()
- return <SID>StatuslineRelativeFilename()
+ return s:StatuslineRelativeFilename()
endfunction
function! SFF()
- return <SID>StatuslineFileFormat()
+ return s:StatuslineFileFormat()
endfunction
function! SFE()
- return <SID>StatuslineFileEncoding()
+ return s:StatuslineFileEncoding()
endfunction
function! SSG()
- return <SID>StatuslineSyntaxGroup()
+ return s:StatuslineSyntaxGroup()
endfunction
set statusline=
" on Freenode for an improved version which doesn't clobber any marks.
nnoremap <silent> <Leader>; :call setline(line('.'), getline('.') . ';')<CR>
+if has('eval')
" * and # for selections in visual mode. Thanks to
" http://got-ravings.blogspot.com/2008/07/vim-pr0n-visual-search-mappings.html
" and all nerds involved (godlygeek, strull in #vim on Freenode).
-if has('eval')
function! s:VSetSearch()
let l:temp = @@ " unnamed register
normal! gvy
endfunction
vnoremap * :<C-U>call <SID>VSetSearch()<CR>//<CR>
vnoremap # :<C-U>call <SID>VSetSearch()<CR>??<CR>
+
+" Use 'noignorecase' for * and #. See comment in s:VSetSearch() for details.
+" Thanks to the writers of s:VSetSearch(), see above.
+ function! s:NSetSearch()
+ let l:cword = expand('<cword>')
+ let l:regex = substitute(escape(l:cword, '\'), '\n', '\\n', 'g')
+ let @/ = '\C\V'. '\<' . l:regex . '\>'
+ endfunction
+ nnoremap * :call <SID>NSetSearch()<CR>//<CR>
+ nnoremap # :call <SID>NSetSearch()<CR>??<CR>
endif
" I often type "W" instead of "w" when trying to save a file. Fix my mistake.
if !&diff && exists(':2match')
" Use ColorColumn for overlong lines if available and my color
" scheme is used.
- if &t_Co == 256 && <SID>HasSyntaxGroup('ColorColumn')
+ if &t_Co == 256 && s:HasSyntaxGroup('ColorColumn')
2match ColorColumn /\%>78v./
else
2match Todo /\%>78v./
" Special highlight for tabs to reduce their visibility in contrast to other
" SpecialKey characters (e.g. ^L).
- if &t_Co == 256 && <SID>HasSyntaxGroup('specialKeyTab')
+ if &t_Co == 256 && s:HasSyntaxGroup('specialKeyTab')
call matchadd('specialKeyTab', '\t')
endif
endif
endfunction
" Enable highlights for the current and all new windows. Thanks to bairui in
" #vim on Freenode (2012-04-01 00:22 CEST) for the WinEnter suggestion.
- call <SID>CustomSyntaxHighlights()
+ call s:CustomSyntaxHighlights()
if has('autocmd')
augroup vimrc
- autocmd WinEnter * call <SID>CustomSyntaxHighlights()
+ autocmd WinEnter * call s:CustomSyntaxHighlights()
augroup END
endif
" Don't manage the working directory (the default setting is too slow for
" me).
let g:ctrlp_working_path_mode = 0
+
" Path to cache directory. I prefer to keep generated files as local as
" possible.
let g:ctrlp_cache_dir = $HOME . '/.vim/cache/ctrlp'
- " Permanent cache, cleared by a crontab entry.
+ " Permanent cache, cleared by a crontab entry. Use <F5> to update the
+ " cache manually.
let g:ctrlp_clear_cache_on_exit = 0
+ " Don't switch the window if the selected buffer is already open. I want
+ " to open another view on this buffer in most cases.
+ let g:ctrlp_switch_buffer = 0
+
" FSWitch settings.
- " Default don't work well for my projects.
+ " Defaults don't work well for my projects.
augroup vimrc
autocmd BufEnter *.cc let b:fswitchdst = 'h'
\ | let b:fswitchlocs = './'
" 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.
+" doesn't exist in older Vims. Use "*p to paste X11's selection, no need for
+" 'paste' in this case.
if exists('##InsertLeave')
autocmd InsertLeave * set nopaste
endif
echoerr 'Do not edit this file! (Maybe a template file.)'
endfunction
- autocmd BufRead * call <SID>SearchForDoNotEditHeader()
+ autocmd BufRead * call s:SearchForDoNotEditHeader()
" AFTER/FTPLUGIN AUTO COMMANDS
" 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.
+" for the diffed file as the filetype for the original file.
if !exists(':DiffOrig')
command DiffOrig
\ let s:diff_orig_filetype = &filetype