" Purpose: My personal .vimrc " Author: Stefan Huber "profile start /tmp/profile.log "profile func * "profile file * set nocompatible set encoding=utf8 set number set backspace=indent,eol,start set tagstack set grepprg=grep\ -nH\ $* set foldcolumn=1 set incsearch set hlsearch set cursorline set laststatus=2 set listchars=tab:»­,trail:·,eol:$ set virtualedit=block set autoindent set tabstop=4 set shiftwidth=4 set expandtab if version >= 703 set spelllang=de_at,en set tabpagemax=20 set colorcolumn=+1 endif set wildmode=longest,list:longest set tags=./tags;/ syntax on filetype plugin indent on " Pathogen runtime path manipulation "call pathogen#infect() "Using the infect method breaks ft detection call pathogen#runtime_append_all_bundles() call pathogen#helptags() "Power saving tip: powertop-homepage let &guicursor = &guicursor . ",a:blinkon0" "According to vim help -- enable mouse in xterm... set mouse=a " Use 256 colors set t_Co=256 let g:CSApprox_attr_map = { 'bold' : 'bold', 'italic' : 'underline', 'sp' : 'bg' } colorscheme shuber-wombat " Use the below highlight group when displaying bad whitespace is desired. highlight BadWhitespace ctermbg=red guibg=red " Make trailing whitespace be flagged as bad. au Filetype python,tex,c,cpp,cs,objc,java,vim syn match BadWhitespace /\s\+$/ containedin=ALL au Filetype python,tex,c,cpp,cs,objc,java,vim let g:airline#extensions#whitespace#enabled = 0 " Detect indentation, but otherwise set expandtab if exists(":DetectIndent") au BufReadPost * :DetectIndent endif let g:syntastic_mode_map = { 'mode' : 'active', 'active_filetypes' : [], 'passive_filetypes' : ['html'] } """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Airline """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:airline_powerline_fonts = 0 let g:airline_theme = 'wombat' let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#tagbar#enabled = 0 let g:airline#extensions#whitespace#enabled = 0 let g:airline#extensions#branch#enabled = 1 let g:airline#extensions#branch#use_vcscommand = 1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Some macros """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Open current file with a specific program function OpenIn(prog) execute ":!" . a:prog . " % &" endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " key bindings """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" nmap :bn nmap :bp map NERDCommenterToggle nmap :NERDTreeToggle nmap :TagbarToggle "nmap :q "nmap :w "vmap gv "imap """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " fortran """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "let fortran_free_source=1 au BufNewFile *.f90 set fortran_free_source=1 au Filetype fortran set cindent cst csto=0 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " C, C++, C#, objc, java """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" au Filetype c,cpp,cs,objc,java map :cnext au Filetype c,cpp,cs,objc,java map :cprevious au Filetype c,cpp,cs,objc,java map :AS au Filetype c,cpp,cs,objc,java map :A au Filetype c,cpp,cs,objc,java set cindent cst csto=0 au Filetype c,cpp,cs,objc map :make au Filetype java map :!ant -f ../build.xml au Filetype c,cpp,cs,objc set makeprg=make "Prepend the namespace to an identifier, e.g. 'std::' before 'map' excluding "those in C/C++ comments. function PrependCppNamespaceToIdent(ns, id) " To match Not to match " "|id |// id "| id |// /* */ id "|/* */ /* */ id |/* */ // id "|id /* */ |/* id "|*/ id | * id " |/* id */ " |::id " |/**/ ::id " |#include " " In order to not match '* id' it is assumed that multi-line comment lines " in the middle begin with a star. " If #include and // and /* and ^* and :: is not prepend: execute ':%s@\(\(#include\|\/\/\|\/\*\|^\s*\*[^/]\).*\|::\)\@@' . a:ns . '::' . a:id . '@ge' " If #include and // and :: is not prepend, but */ is, and no further /* or // are found execute ':%s@\(\(#include\|\/\/\).*\)\@@' . a:ns . '::' . a:id . '@ge' endfunction "Prepend STL namespace 'std::' to several identifiers function PrependSTLNamespace() " This list of identifier is not complete, but adding all of them is too " much. We rather like to add identifieres that are 'typical' for C++. " Others, like 'move' are likely to not be C++ specific. In this cases the " user is asked to call PrependCppNamespaceToIdent by hand. let id = [] let id = id +['cin', 'cout', 'cerr', 'endl'] let id = id +['swap', 'sort', 'max', 'min'] let id = id +['vector', 'deque', 'list', 'map', 'multimap', 'set'] let id = id +['queue', 'stack', 'priority_queue'] let id = id +['ostream', 'istream', 'sstream'] let id = id +['pair', 'string'] for i in id call PrependCppNamespaceToIdent("std", i) endfor endfunction function EscapeHexToChar() echo 'Call "x/Nxb addr" in GDB to print N bytes at addr' execute '%s/^.*://' execute '%s/\s*0x\(\x\x\)/\\x\1/g' execute '%s/^\(.*\)$/"\1"/' endfunction function InsertIncludeGuardsWithoutEndif() let gatename = substitute(expand("%:t"), "\\.", "_", "g") . '_' . strpart(system('pwgen -c 16 1'), 0, 16) execute "normal! i#ifndef " . gatename execute "normal! o#define " . gatename endfunction function AddIncludeGuards() execute "normal! Go#endif" execute "normal! gg" call InsertIncludeGuardsWithoutEndif() endfunction autocmd BufNewFile *.{h,hpp,hxx} call AddIncludeGuards() """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Text and mail """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" au Filetype text set textwidth=80 au Filetype markddown set textwidth=80 "According to thunderbirds settings au Filetype mail set textwidth=72 au Filetype mail set expandtab "a and w reformat the paragraph automatically and a new paragraph "is indicated by lines not ending with white-space if version>=700 au Filetype mail,text set fo+=n spell endif "Scissor line au Filetype mail syn match Statement /^\s*-*\s*>8\s*-*\s*$/ au Filetype mail syn match Statement /^\s*-*\s*8<\s*-*\s*$/ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " PHP """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "au Filetype php set fo=tcqn if version >= 700 au Filetype php set spell endif au Filetype php set textwidth=80 "au Filetype php set cindent """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " maxima """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" au BufRead,BufNewFile *.wxm set filetype=maxima """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " LaTeX """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:LatexBox_split_side = "rightbelow" "let g:LatexBox_split_resize = 1 let g:LatexBox_ref_pattern = '\c\\\a*ref\*\?\_\s*{' let g:tex_flavor = "latex" let g:LatexBox_output_type = "pdf" let g:LatexBox_viewer = "okular" let g:LatexBox_latexmk_async = 1 let g:LatexBox_latexmk_preview_continuously = 1 "let g:LatexBox_show_warnings = 0 let g:LatexBox_quickfix = 4 if version >= 700 au Filetype tex set spell endif au BufRead,BufNewFile *.cls set filetype=tex au Filetype tex set textwidth=80 au Filetype tex set smartindent " Override Tagbar Toggle with LatexBox TOC au Filetype tex nmap :LatexTOCToggle au Filetype tex nmap :LatexLabels "Remove Umlaute function TexTransUmlaute() execute ':%s/ü/\\\"u/ge' execute ':%s/Ü/\\\"U/&' execute ':%s/ö/\\\"o/&' execute ':%s/Ö/\\\"O/&' execute ':%s/ä/\\\"a/&' execute ':%s/Ä/\\\"A/&' execute ':%s/ß/\\\"s/&' execute ':%s/²/\^2/&' endfunction function FindWordRepeatings() execute '/\(\<\S\+\>\)\s\+\1\>' " let pos = search('\(\<\S\+\>\)\s\+\1\>', "cw") " call cursor(pos) endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " python """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" au Filetype python map :!python % " vimrc file for following the coding standards specified in PEP 7 & 8. " Number of spaces that a pre-existing tab is equal to. " For the amount of space used for a new tab use shiftwidth. au Filetype python set shiftwidth=4 au Filetype python set expandtab " Wrap text after a certain number of characters au Filetype python set textwidth=79 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " XML, Ipe """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Opens the current file in ipe au BufRead,BufNewFile *.ipe set filetype=ipe au Filetype xml,ipe map :call OpenIn("ipe") au Filetype xml let g:tagbar_sort = 0 let g:tagbar_type_xml = { \ 'ctagstype' : 'xml', \ 'kinds' : [ \ 't:Tag' \ ] \ } """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " gnuplot """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Opens the current file in ipe au Filetype gnuplot map :call OpenIn("gnuplot -persist") """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " remind """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" au BufRead,BufNewFile */.remind/* set filetype=remind """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " vim-orgmode """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" au BufRead,BufNewFile *.org set filetype=org let g:org_todo_keywords=['TODO', 'FEEDBACK', 'VERIFY', '|', 'DONE', 'DELEGATED'] let g:org_todo_keyword_faces = [['FEEDBACK', 'magenta'], ['TODO', 'yellow']] """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " markdown """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:instant_markdown_autostart = 0 let g:instant_markdown_slow = 1 au Filetype markdown map :InstantMarkdownPreview au Filetype markdown let g:tagbar_sort = 0 let g:tagbar_type_markdown = { \ 'ctagstype' : 'markdown', \ 'kinds' : [ \ 'h:Heading_L1', \ 'i:Heading_L2', \ 'k:Heading_L3' \ ] \ } if executable('marktag') let g:tagbar_type_markdown = { \ 'ctagstype' : 'markdown', \ 'ctagsbin' : 'marktag', \ 'kinds' : [ \ 'h:header' \ ], \ 'sro' : '.', \ 'kind2scope' : { \ 'h' : 'header' \ }, \ 'scope2kind' : { \ 'header' : 'h' \ } \ } end """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " youcompleteme """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py' let g:ycm_min_num_of_chars_for_completion = 4 let g:ycm_collect_identifiers_from_tags_files = 1 let g:ycm_autoclose_preview_window_after_completion = 1 let g:ycm_key_list_select_completion = [''] nnoremap jd :YcmCompleter GoToDefinitionElseDeclaration let g:ycm_filetype_whitelist = { 'c' : 1, 'cpp' : 1, 'cs' : 1, 'objc' : 1, 'java' : 1, 'python' : 1 } "let g:ycm_server_use_vim_stdout = 1 "let g:ycm_server_log_level = 'debug' if filereadable($HOME . "/.vimrc-local") source ~/.vimrc-local endif " Being able to load project specific vimrc files set exrc set secure