" 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 *
set nocompatible
set encoding=utf8
-set modeline
set number
set backspace=indent,eol,start
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 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
-filetype off
call pathogen#runtime_append_all_bundles()
call pathogen#helptags()
-syntax on
-filetype plugin indent on
-
"Power saving tip: powertop-homepage
let &guicursor = &guicursor . ",a:blinkon0"
" Use 256 colors
set t_Co=256
-let g:CSApprox_attr_map = { 'bold' : 'bold', 'italic' : '', 'sp' : '' }
+let g:CSApprox_attr_map = { 'bold' : 'bold', 'italic' : 'underline', 'sp' : 'bg' }
colorscheme shuber-wombat
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
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" key bindings
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+nmap <s-PageDown> :bn<CR>
+nmap <s-PageUp> :bp<CR>
+
map <a-c> <plug>NERDCommenterToggle
+nmap <F9> :NERDTreeToggle<CR>
+nmap <F10> :TagbarToggle<CR>
-nmap <c-q> :q<CR>
-nmap <c-s> :w<CR>
-vmap <c-s> <Esc><c-s>gv
-imap <c-s> <c-o><c-s>
+"nmap <c-q> :q<CR>
+"nmap <c-s> :w<CR>
+"vmap <c-s> <Esc><c-s>gv
+"imap <c-s> <c-o><c-s>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" C, C++, C#, objc, java
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-au Filetype c,cpp,cs,objc,java map <F4> :cnext <CR>
-au Filetype c,cpp,cs,objc,java map <S-F4> :cprevious <CR>
-au Filetype c,cpp,cs,objc,java map <F11> :AS <CR>
-au Filetype c,cpp,cs,objc,java map <S-F11> :A <CR>
+au Filetype c,cpp,cs,objc,java map <buffer> <F4> :cnext <CR>
+au Filetype c,cpp,cs,objc,java map <buffer> <S-F4> :cprevious <CR>
+au Filetype c,cpp,cs,objc,java map <buffer> <F11> :AS <CR>
+au Filetype c,cpp,cs,objc,java map <buffer> <S-F11> :A <CR>
au Filetype c,cpp,cs,objc,java set cindent cst csto=0
-au Filetype c,cpp,cs,objc map <F7> :make <CR>
-au Filetype java map <F7> :!ant -f ../build.xml <CR>
-au Filetype c,cpp,cs,obj set makeprg=make
+au Filetype c,cpp,cs,objc map <buffer> <F7> :make <CR>
+au Filetype java map <buffer> <F7> :!ant -f ../build.xml <CR>
+au Filetype c,cpp,cs,objc set makeprg=make
"Prepend the namespace to an identifier, e.g. 'std::' before 'map' excluding
" |/* id */
" |::id
" |/**/ ::id
+ " |#include <id>
"
" In order to not match '* id' it is assumed that multi-line comment lines
" in the middle begin with a star.
- " If // and /* and ^* and :: is not prepend:
- execute ':%s_\(\(\/\/\|\/\*\|^\s*\*[^/]\).*\|::\)\@<!\<' . a:id . '\>_' . a:ns . '::' . a:id . '_ge'
- " If // and :: is not prepend, but */ is, and no further /* or // are found
- execute ':%s_\(\/\/.*\)\@<!\*\/\(\/[^\/\*]\|[^\/]\)*\zs\(::\)\@<!\<' . a:id . '\>_' . a:ns . '::' . a:id . '_ge'
+ " If #include and // and /* and ^* and :: is not prepend:
+ execute ':%s@\(\(#include\|\/\/\|\/\*\|^\s*\*[^/]\).*\|::\)\@<!\<' . a:id . '\>@' . a:ns . '::' . a:id . '@ge'
+ " If #include and // and :: is not prepend, but */ is, and no further /* or // are found
+ execute ':%s@\(\(#include\|\/\/\).*\)\@<!\*\/\(\/[^\/\*]\|[^\/]\)*\zs\(::\)\@<!\<' . a:id . '\>@' . 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']
+ let id = id +['ostream', 'istream', 'sstream']
let id = id +['pair', 'string']
- let id = ['map']
for i in id
call PrependCppNamespaceToIdent("std", i)
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()
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
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
"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 <buffer> <F10> :LatexTOCToggle<CR>
+au Filetype tex nmap <buffer> <F11> :LatexLabels<CR>
+
"Remove Umlaute
function TexTransUmlaute()
" call cursor(pos)
endfunction
-let g:tex_flavor = "latex"
-let g:LatexBox_viewer="okular"
-let g:LatexBox_latexmk_options="-pvc"
-
-au Filetype tex set smartindent
-
-if version >= 700
- au Filetype tex set spell
-endif
-
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" python
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-au Filetype python map <F5> :!python % <CR>
+au Filetype python map <buffer> <F5> :!python % <CR>
" vimrc file for following the coding standards specified in PEP 7 & 8.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Opens the current file in ipe
-au Filetype xml map <M-o> :call OpenIn("ipe") <CR>
+au BufRead,BufNewFile *.ipe set filetype=ipe
+au Filetype xml,ipe map <buffer> <M-o> :call OpenIn("ipe") <CR>
+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 <M-o> :call OpenIn("gnuplot -persist") <CR>
+au Filetype gnuplot map <buffer> <M-o> :call OpenIn("gnuplot -persist") <CR>
+
+
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" 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 <buffer> <F5> :InstantMarkdownPreview<CR>
+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_min_num_of_chars_for_completion = 999
+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 = ['<Down>']
+nnoremap <buffer> <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR>
+
+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
+