" matches after another (full). Thanks to pbrisbin
" (http://pbrisbin.com:8080/dotfiles/vimrc).
set wildmode=list:longest,full
+" Ignore case when completing files/directories.
+if exists('+wildignorecase')
+ set wildignorecase
+endif
+
+" Ignore files with the following extensions because I almost never want to
+" edit them in Vim (specifying them manually still works of course).
+set wildignore=
+" C
+set wildignore+=*.o,*.d,*.so
+" Java
+set wildignore+=*.class
+" LaTeX
+set wildignore+=*.aux,*.log,*.out,*.toc,*.pdf
+" Python
+set wildignore+=*.pyc
+
+" Show completion menu even if only one entry matches.
+if exists('+completeopt')
+ set completeopt+=menuone
+endif
-" Increase history of executed commands (:).
+" Increase history of executed commands (:) and search patterns (/).
set history=1000
" Increase number of possible undos.
set undolevels=1000
-" Remember marks (including the last cursor position) for more files.
+" Remember marks (including the last cursor position) for more files. ^= is
+" necessary because 'viminfo' is parsed from the beginning and the first match
+" is used.
if has('viminfo')
set viminfo^='1000
endif
endif
" Clear all vimrc-related autocmds. Has to be done here as the vimrc augroup
-" is used multiple times.
+" is used multiple times. Necessary to support reloading the vimrc.
if has('autocmd')
augroup vimrc
autocmd!
set virtualedit=block
" Already display matches while typing the search command. This makes spotting
-" errors easy.
+" typos easy and searching faster.
set incsearch
" Activate syntax folding.
endif
set foldlevel=99 " no closed folds at default, 'foldenable' would disable
" folding which is not what I want
+ " Don't open folds for block movements like '(', '{', '[[', '[{', etc.
+ set foldopen-=block
endif
" Only check case if the searched word contains a capital character.
" Allow buffers with changes to be hidden. Very important for effective
" editing with multiple buffers. Prevents the "E37: No write since last change
-" (add ! to override)" warning.
+" (add ! to override)" warning when switching buffers.
set hidden
endif
endfunction
+ " Return current syntax group in brackets or nothing if there's none.
+ function! StatuslineSyntaxGroup()
+ let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
+ if l:group != ''
+ return '[' . l:group . '] '
+ else
+ return ''
+ endif
+ endfunction
+
set statusline=
" on the left
set statusline+=%02n " buffer number
set statusline+=%{StatuslineBufferCount()} " highest buffer number
set statusline+=:
- if has('modify_fname')
+ if has('modify_fname') && v:version >= 700 " some functions need 7.0
set statusline+=%{StatuslineRelativeFilename()} " path to current file
set statusline+=\ " space after path
else
nnoremap <silent> <Leader>sn :set nospell<CR>
nnoremap <silent> <Leader>se :set spell spelllang=en_us<CR>
nnoremap <silent> <Leader>sd :set spell spelllang=de_de<CR>
+" If no spell support is available, these mappings do nothing.
+else
+ nmap <Leader>sn <Nop>
+ nmap <Leader>se <Nop>
+ nmap <Leader>sd <Nop>
endif
" Add semicolon to the end of the line. Thanks to
" In case 'hlsearch' is used disable it with <C-L>. Thanks to frogonwheels and
" vimgor (bot) in #vim on Freenode (2010-03-30 05:58 CEST).
-noremap <silent> <C-L> :nohlsearch<CR><C-L>
+nnoremap <silent> <C-L> :nohlsearch<CR><C-L>
" <C-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
let g:hs_highlight_boolean = 1
let g:hs_highlight_types = 1
let g:hs_highlight_more_types = 1
+ " Java.
+ let g:java_highlight_java_lang_ids = 1 " color java.lang.* identifiers
" Perl.
let g:perl_fold = 1
let g:perl_fold_blocks = 1
" Settings for securemodelines.
" Only allow items I need (also includes spl which is not enabled by
" default).
- let g:secure_modelines_allowed_items = ['ft', 'spl', 'fdm',
- \ 'sw', 'sts', 'noet']
+ if v:version >= 700 " need lists
+ let g:secure_modelines_allowed_items = ['ft', 'spl', 'fdm',
+ \ 'sw', 'sts', 'noet']
+ endif
" Settings for the NERD commenter.
" Don't create any mappings I don't want to use.
let g:xptemplate_brace_complete = 0
" Only highlight the current placeholder.
let g:xptemplate_highlight = 'current'
+
+" CtrlP settings.
+ " 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.
+ let g:ctrlp_clear_cache_on_exit = 0
+
+" FSWitch settings.
+ " Default don't work well for my projects.
+ augroup vimrc
+ autocmd BufEnter *.cc let b:fswitchdst = 'h'
+ \ | let b:fswitchlocs = './'
+ autocmd BufEnter *.h let b:fswitchdst = 'cc,c'
+ \ | let b:fswitchlocs = './'
+ augroup END
+
+ " Switch to corresponding header/source file.
+ nnoremap <silent> <Leader>h :FSHere<CR>
endif
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
+
+ echohl WarningMsg
+ echo 'Do not edit this file! (Maybe a template file.)'
+ echohl None
+ endfunction
+ autocmd BufRead * call <SID>SearchForDoNotEditHeader()
+
" AFTER/FTPLUGIN AUTO COMMANDS
" Disable spell checking for files which don't need it.