X-Git-Url: https://git.sthu.org/?p=shutils.git;a=blobdiff_plain;f=dotfiles%2Fvim%2F.vimrc;h=1afa776496a204596986348607661b3d96ab2a07;hp=78f58a1b9fd69973bd94f306dbc9fee1382ad724;hb=89b9f9a318f772b6ad4805a411abfadfcf426242;hpb=799ba44bafe18cf394cf8a59e9fdd0fe7bb6a023 diff --git a/dotfiles/vim/.vimrc b/dotfiles/vim/.vimrc index 78f58a1..1afa776 100644 --- a/dotfiles/vim/.vimrc +++ b/dotfiles/vim/.vimrc @@ -1,157 +1,209 @@ " Purpose: My personal .vimrc " Author: Stefan Huber -" -"Essential resources for vim users -" - vim.sf.net -- find tips and scripts for vim and gvim -" -"By calling ":help keyword" you get help for the specific -"option and setting. +"profile start /tmp/profile.log +"profile func * +"profile file * -" Pathogen runtime path manipulation -"call pathogen#infect() "Using the infect method breaks ft detection -call pathogen#runtime_append_all_bundles() - - -"Activate syntax highlighting -syntax on -"Activate filetype plugins: syntax highlighting, indentation, and more -filetype plugin indent on -set modeline -set autoindent -"set tabstop=4 +set nocompatible +set encoding=utf8 set number -set bs=2 - -"vim-7 and newer has vimspell (spell checker) built in -if version >= 703 - set spelllang=de_at,en - set tabpagemax=20 - set colorcolumn=80,+1 -endif +set backspace=indent,eol,start -"Set some properties for ctags, grep and the size of the -"most-left column for foldings set tagstack set grepprg=grep\ -nH\ $* set foldcolumn=1 -"Set incremental search and highlighted search results set incsearch set hlsearch +set cursorline +set laststatus=2 +set scrolloff=4 + +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" +"let &guicursor = &guicursor . ",a:blinkon0" "According to vim help -- enable mouse in xterm... set mouse=a - -"Open current file with a specific program -function OpenIn(prog) - execute ":!" . a:prog . " % &" -endfunction +" 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 syn match BadWhitespace /\s\+$/ containedin=ALL +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 -" set list to activate -set listchars=tab:»­,trail:·,eol:$ + +" 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'] } """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" fortran -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Airline +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -"let fortran_free_source=1 -au BufNewFile *.f90 set fortran_free_source=1 -au BufRead,BufNewFile *.INC set filetype=fortran -au Filetype fortran set cindent cst csto=0 +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 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" IRSSI logs +" key bindings """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -au BufRead,BufNewFile */.irssi/logs/*.log set filetype=irssilog +nmap :bn +nmap :bp + +map NERDCommenterToggle +nmap :NERDTreeToggle +nmap :TagbarToggle + +"nmap :q +"nmap :w +"vmap gv +"imap """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Easychair conference system review form -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" fortran +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -au BufRead,BufNewFile review_form_*.txt set filetype=easychair -au Syntax easychair runtime! syntax/easychair.vim +"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 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,obj set makeprg=make -au Filetype c,cpp,cs,obj set tabstop=4 -au Filetype c,cpp,cs,obj set shiftwidth=4 - - -"Adds STL prefix 'std::' to 'id' -function AddNamespaceDeclTo(ns, id) - echo "Add '" . a:ns . "' to " . a:id - "Line starts with a:id - execute ":%s!^\\(\\s*\\)" . a:id . "\\>!\\1" . a:ns . "::" . a:id . "!e" - "Line beginning, white space, not # or / (preprocessor or comment) - execute ":%s!^\\(\\s*[^#/].*[^:]\\)\\<" . a:id . "\\>!\\1" . a:ns . "::" . a:id . "!ge" +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 -"Adds STL prefix 'std::' to several identifiers -function AddSTLNamespaceDecl() - call AddNamespaceDeclTo("std","cin") - call AddNamespaceDeclTo("std","cout") - call AddNamespaceDeclTo("std","cerr") - - call AddNamespaceDeclTo("std","swap") - call AddNamespaceDeclTo("std","sort") - call AddNamespaceDeclTo("std","max") - call AddNamespaceDeclTo("std","min") - - call AddNamespaceDeclTo("std","deque") - call AddNamespaceDeclTo("std","endl") - call AddNamespaceDeclTo("std","list") - call AddNamespaceDeclTo("std","map") - call AddNamespaceDeclTo("std","multimap") - call AddNamespaceDeclTo("std","ostream") - call AddNamespaceDeclTo("std","pair") - call AddNamespaceDeclTo("std","priority_queue") - call AddNamespaceDeclTo("std","set") - call AddNamespaceDeclTo("std","queue") - call AddNamespaceDeclTo("std","stack") - call AddNamespaceDeclTo("std","string") - call AddNamespaceDeclTo("std","vector") +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 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"/' +function AddIncludeGuards() + execute "normal! Go#endif" + execute "normal! gg" + call InsertIncludeGuardsWithoutEndif() endfunction +autocmd BufNewFile *.{h,hpp,hxx} call AddIncludeGuards() """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" @@ -159,15 +211,20 @@ endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 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 + 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*$/ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" @@ -176,137 +233,205 @@ endif "au Filetype php set fo=tcqn if version >= 700 - au Filetype php set spell + 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/&' + 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\>' + execute '/\(\<\S\+\>\)\s\+\1\>' " let pos = search('\(\<\S\+\>\)\s\+\1\>', "cw") " call cursor(pos) endfunction -let g:tex_flavor = "latex" -let g:LatexBox_viewer="okular" -let g:LatexBox_latexmk_options="-pvc" +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" python +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -au Filetype tex set smartindent +au Filetype python map :!python % -au Filetype tex set tabstop=4 -au Filetype tex set shiftwidth=4 +" vimrc file for following the coding standards specified in PEP 7 & 8. -au Filetype tex map! ,b \begin{}i -au Filetype tex map! ,e :call TexClosePrev(0)a -au Filetype tex map! ,i \begin{itemize}\end{itemize}O\item -au Filetype tex map! ,f \begin{frame}\end{frame}O\frametitle{ -au Filetype tex map! ,p \begin{figure}\end{figure}O\centering\includegraphics{ +" 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 -if version >= 700 - au Filetype tex set spell -endif +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" 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' + \ ] +\ } """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" python +" gnuplot """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -au Filetype python map :!python % +"Opens the current file in ipe +au Filetype gnuplot map :call OpenIn("gnuplot -persist") -" vimrc file for following the coding standards specified in PEP 7 & 8. +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" remind +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" 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 tabstop=4 -au Filetype python set shiftwidth=4 -au Filetype python set expandtab +au BufRead,BufNewFile */.remind/* set filetype=remind -" Wrap text after a certain number of characters -au BufRead,BufNewFile *.py,*.pyw set textwidth=79 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" 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']] """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" XML, Ipe +" markdown """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -"Opens the current file in ipe -au Filetype xml map :call OpenIn("ipe") +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 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" gnuplot +" youcompleteme """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py' -au BufRead,BufNewFile *.plt set filetype=gnuplot -au BufRead,BufNewFile *.plot set filetype=gnuplot -au BufRead,BufNewFile *.gnuplot set filetype=gnuplot +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 -"Opens the current file in ipe -au Filetype gnuplot map :call OpenIn("gnuplot -persist") +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' """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Commenting +" syntastic """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -let g:EnhCommentifyUseAltKeys = 'Yes' - +let g:ycm_show_diagnostics_ui = 0 +let g:syntastic_c_checkers = ["cppcheck"] +let g:syntastic_cpp_checkers = g:syntastic_c_checkers """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Tab completion +" signify """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -"function InsertTabWrapper() -" let col = col('.') - 1 -" if !col || getline('.')[col - 1] !~ '\k' -" return "\" -" else -" return "\" -" endif -"endfunction +let g:signify_vcs_list = ['git'] + -" Remap the tab key to select action with InsertTabWrapper -"inoremap =InsertTabWrapper() -let g:SuperTabMappingForward = "" -let g:SuperTabDefaultCompletionType = 'context' -"let g:SuperTabDefaultCompletionType = '' +if filereadable($HOME . "/.vimrc-local") + source ~/.vimrc-local +endif -source ~/.vimrc-local +" Being able to load project specific vimrc files +set exrc +set secure