"============================================================================== " General Settings "============================================================================== let $MYVIMFILES=fnamemodify(resolve(expand("")), ":p:h") set nocompatible syntax enable filetype plugin indent on set backspace=indent,eol,start set autoindent set copyindent set tabstop=4 set shiftwidth=4 set expandtab set softtabstop=4 set ruler set showmatch "if has("persistent_undo") " set undodir=$MYVIMFILES/undo " set undofile "endif set mouse=a set hlsearch set incsearch set tags=./tags;/ set grepprg=internal set tabpagemax=999 set nobackup set nowritebackup set noswapfile set wildmode=longest,list,full set splitright set showcmd set background=dark set showtabline=1 set cinoptions=:0 runtime ftplugin/man.vim nnoremap K :Man if has("gui_running") " GUI-specific settings colorscheme ir_black set scrolloff=8 set guioptions-=m " remove menu bar set guioptions-=T " remove toolbar set colorcolumn=80 set nomousehide hi ColorColumn guibg=#220000 else " console-specific settings set scrolloff=4 endif if has("win32") || has("win64") set directory=$TMP if filereadable('C:/cygwin/bin/bash.exe') set shell=C:/cygwin/bin/bash.exe set shellcmdflag=--login\ -c let $CHERE_INVOKING=1 endif set guifont=Consolas:h11:cANSI set linespace=0 endif " mappings let mapleader = ',' nnoremap C# :set pasteO75A#yypO# :set nopasteA nnoremap c# :set pasteo75A#yypO# :set nopasteA nnoremap C* :set pasteO/74A*o 73A*A/O * :set nopasteA nnoremap c* :set pasteo/74A*o 73A*A/O * :set nopasteA nnoremap c; :set pasteO;74A*o;*72A A*o;74A*0klll:set nopasteR nnoremap c8 :set pasteo20A-A8<20A-:set nopaste0 nnoremap m m`:%s///g:noh`` nnoremap t :tabn nnoremap T :tabp nnoremap s m`:%s/\v\s+$//`` " jump to tag in a new tab nnoremap w :tab :tag " re-indent the following line how vim would automatically do it nnoremap j Ji nnoremap :cnext nnoremap :cprev vnoremap vnoremap < >gv inoremap :call PtagSymbolBeforeParen() inoremap :pclose inoremap O if has("autocmd") autocmd FileType text setlocal noautoindent autocmd FileType c syn match Constant display "\<[A-Z_][A-Z_0-9]*\>" autocmd FileType cpp syn match Constant display "\<[A-Z_][A-Z_0-9]*\>" autocmd FileType dosbatch syn match Comment "^@rem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument autocmd BufRead,BufNewFile *.dxl setf java autocmd BufRead,BufNewFile *.dxl setlocal sw=2 ts=2 sts=2 " install glsl.vim in ~/.vim/syntax to use syntax highlighting for GLSL: autocmd BufRead,BufNewFile *.frag,*.vert,*.fp,*.vp,*.glsl setf glsl autocmd Syntax {cpp,c,idl} runtime syntax/doxygen.vim autocmd QuickFixCmdPre grep copen autocmd QuickFixCmdPre vimgrep copen autocmd FileType html setlocal sw=2 ts=2 sts=2 autocmd FileType xhtml setlocal sw=2 ts=2 sts=2 autocmd FileType xml setlocal sw=2 ts=2 sts=2 autocmd FileType yaml setlocal sw=2 ts=2 sts=2 autocmd FileType text setlocal textwidth=78 autocmd BufRead,BufNewFile *.icf set syntax=cpp autocmd FileType ruby,eruby setlocal sw=2 ts=2 sts=2 iskeyword+=@-@,? autocmd BufRead,BufNewFile *.di set filetype=d if has("gui_running") autocmd WinLeave * set nocursorline nocursorcolumn autocmd WinEnter * set cursorline cursorcolumn set cursorline cursorcolumn end " When editing a file, always jump to the last known cursor position. " Don't do it when the position is invalid or when inside an event handler " (happens when dropping a file on gvim). autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif autocmd BufWinEnter * call LoadProject() autocmd BufEnter * call ProjectCD() endif " has("autocmd") "============================================================================== " Functions "============================================================================== " LoadProject - Searches for and loads project specific settings function! LoadProject() if exists("b:project_loaded") && b:project_loaded == 1 return endif let projfile = findfile("project.vim", ".;") if projfile != "" let b:project_directory = fnamemodify(projfile, ":p:h") exec "source " . fnameescape(projfile) let b:project_loaded = 1 else let projdir = finddir("project.vim", ".;") if projdir != "" let b:project_directory = fnamemodify(projdir, ":p:h:h") for f in split(glob(projdir . '/*.vim'), '\n') exec 'source ' . fnameescape(f) endfor let b:project_loaded = 1 endif endif endfunction " ProjectCD - Change to the project directory " for some reason doing this in LoadProject() didn't work on Windows function! ProjectCD() if exists("b:project_directory") exec "cd " . fnameescape(b:project_directory) endif endfunction function! FindSymbolInSources(sources, ...) if a:0 > 0 let sym = a:1 else let sym = expand("") endif exec 'vimgrep /\<' . sym . '\>/gj ' . a:sources let n_matches = len(getqflist()) if n_matches == 0 cclose else redraw " the following echo will be lost without redrawing here echo "Found " . n_matches . " matches" endif endfunction " PtagSymbolBeforeParen - can be called from insert mode when the cursor " is anywhere within the parentheses of a function call in order to open " the called-function's prototype in the Preview window using :ptag function! PtagSymbolBeforeParen() let l:line = getline(".") let l:paren_pos = strridx(l:line, "(", col(".")) if l:paren_pos != -1 let l:line = strpart(l:line, 0, l:paren_pos) endif let l:symidx = match(l:line, '\v[a-zA-Z_][a-zA-Z_0-9]*$') if l:symidx != -1 let l:line = strpart(l:line, l:symidx) endif if &syntax == 'vim' execute 'silent! help ' . l:line if &filetype == 'help' " we successfully opened the help window execute "normal 1000\-" setlocal winheight=10 execute "normal \\" startinsert endif else execute 'silent! ptag ' . l:line endif endfunction "============================================================================== " Commands "============================================================================== command! -nargs=? Bf call FindSymbolInSources(b:project_sources . ' ' . b:test_sources, ) command! -nargs=? Cf call FindSymbolInSources(b:project_sources, ) command! -nargs=? Tf call FindSymbolInSources(b:test_sources, ) "============================================================================== " Machine-local Settings "============================================================================== if filereadable($MYVIMRC . ".local") exec 'source ' . $MYVIMRC . ".local" endif