" dotfiles -- .vimrc
" author: johannst
set nocompatible " make vim less vi
"{{{ Vundle
" to install plugins open vim and run :PluginInstall from within vim OR
" vim +PluginInstall +qall from cmd line
filetype off " necessary for vundle!!!
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'jlanzarotta/bufexplorer'
Plugin 'ap/vim-buftabline'
" Plugin 'vim-airline/vim-airline'
" Plugin 'vim-airline/vim-airline-themes'
Plugin 'majutsushi/tagbar'
Plugin 'kien/ctrlp.vim'
" c++ modifief headers: http://www.vim.org/scripts/script.php?script_id=2358
"Plugin 'vim-scripts/OmniCppComplete'
call vundle#end()
"}}}
"{{{ Plugin Config
" powerline
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#fnamemod = ':t'
let g:airline_powerline_fonts = 1
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
" tagbar
let g:tagbar_ctags_bin='~/.vim/bin/ctags'
" CtrlP
let g:ctrlp_buftag_ctags_bin='~/.vim/bin/ctags'
let g:ctrlp_extensions = ['buffertag', 'line', 'changes', 'mixed']
" buftabline
let g:buftabline_indicators = 1
" omni complete
" add tags
" set tags+=~/.vim/tags/cpp_tags
"let OmniCpp_NamespaceSearch = 1
"let OmniCpp_GlobalScopeSearch = 1
"let OmniCpp_ShowAccess = 1
"let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameters
"let OmniCpp_MayCompleteDot = 1 " autocomplete after .
"let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->
"let OmniCpp_MayCompleteScope = 1 " autocomplete after ::
"let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
"" automatically open and close the popup menu / preview window
"au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
"set completeopt=menuone,menu,longest,preview
"}}}
augroup aug:AutoSaveResore
autocmd!
"autocmd VimEnter * silent! source .vim_last_session
autocmd QuitPre * mksession! .vim_last_session
augroup end
function! TriggerSCons(arg_string)
let base_cmd = "scons -u "
let &makeprg=base_cmd.a:arg_string
make
endfunction
" use like :SCons -j20 ...
command! -nargs=1 SCons call TriggerSCons(<f-args>)
" +----------------------------+
" | Color Settings |
" +----------------------------+
syntax on
set background=dark
colorscheme buddy
" +----------------------------+
" | Basic Settings |
" +----------------------------+
set timeoutlen=1000 " time in ms until keymap interpreted
set ttimeoutlen=100 " time in ms for key code delay, NEVER USE 0 again!!! if random numbers/letters occur, maybe change this value
filetype plugin indent on " enable loading indent file for filetype
set ffs=unix,dos,mac " try recognizing dos, unix, and mac line endings.
set encoding=utf-8 " set default encoding to UTF-8.
" Basic settings
set title " show title in console title bar
set confirm " prompt if closing with unsaved changes.
set laststatus=2 " always show status line
set shortmess+=a " Use [+]/[RO]/[w] for modified/readonly/written.
set showcmd " show command in status line.
set mouse=a " enable mouse usage (all modes)
set history=1000 " sets how many lines of history VIM has to remember
set tabpagemax=100 " sets how many tabs will be opened
set scrolloff=3 " set vertical scroll distance to 7 lines
set backspace=2 " had some issues with BS on empty line didn't deleted line
set noautowrite " never write a file unless I request it.
set noautowriteall " NEVER.
set noautoread " don't automatically re-read changed files.
set nowrap
" Line/Column settings
set number " Display line numbers
set relativenumber " Display relative line numbers
set ruler " display cursor position
set cursorline " cursor line highlighting
set cursorcolumn " cursor column highlighting
" buffer settings
set hidden " do not unload abandoned buffers
" Tab settings
set expandtab " expand tabs to spaces
set tabstop=8 " number of columns a tab counts
set shiftwidth=3 " number of columns text is indented
set softtabstop=3 " number of columns tab counts in insert mode
set shiftround " rounds indent to a multiple of shiftwidth
"set smarttab " Handle tabs more intelligently
" Fold settings
set foldmethod=marker " set fold method
" Indentation settings
set autoindent " copy indent from current line when starting a new line
set smartindent " use smart indent if there is no indent file
augroup aug:CLangStyle
autocmd!
autocmd BufRead,BufNewFile *.h,*.hh,*.hpp,*.c,*.cc,*.cpp set cinoptions=:1,=2,g1,h2 " switch-case/class-lable indentation
autocmd BufRead,BufNewFile * setlocal formatoptions-=cro " disable auto-comment
augroup end
" Invisible character settings
"set list " show invisible character
set listchars=tab:>-,eol:$,trail:-,precedes:<,extends:>
" Search settings
set ignorecase " case insensitive matching
set incsearch " incremental search
set hlsearch " highlight search results
set smartcase " overwrite ignorecase if pattern contains capital letters
set showmatch " show matching brackets.
set matchtime=2 " how many tenths of a second to blink when matching brackets
set matchpairs+=<:> " show matching <> as well
set magic " for regular expressions turn magic on
" Vim command completion settings
set wildmenu " turn on the wild menu
set wildmode=longest:full " <Tab> cycles between all matching choices.
set wildignore+=*.o,*.obj,.git,*.pyc,*~ " Ignore these files when completing
" No annoying sound on errors
set noerrorbells
set novisualbell
" automatically open Quickfix
augroup aug:QuickFixConfig
autocmd!
autocmd QuickFixCmdPost [^l]* nested botright cwindow
autocmd QuickFixCmdPost l* nested botright lwindow
augroup end
"{{{ Keymaps
" unset .
" noremap . <nop>
" set leader key
"execute "set <M-s>=\es"
let mapleader=";"
" re-source .vimrc
nnoremap <leader>v :source ~/.vimrc<CR>
"remap esc button
" inoremap <Esc> <nop>
inoremap jj <Esc>
" quit buffer
noremap <leader>q :bd
" re-adjust indentation
nnoremap <leader>f mzgg=G`z
" navigate between different splits
nnoremap <C-Down> <C-w>j
nnoremap <C-Up> <C-w>k
nnoremap <C-Right> <C-w>l
nnoremap <C-Left> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
nnoremap <C-h> <C-w>h
" resize splits
"map <C-j> <C-w>5-
"map <C-k> <C-w>5+
"map <C-l> <C-w>5<
"map <C-h> <C-w>5>
" navigate between different buffers
nnoremap <S-Left> :bprevious<CR>
nnoremap <S-Right> :bnext<CR>
nnoremap <S-h> :bprevious<CR>
nnoremap <S-l> :bnext<CR>
" ctrl-ae jump to line start/end
nnoremap <C-a> 0
nnoremap <C-e> $
inoremap <C-a> <C-o>0
inoremap <C-e> <C-o>$
vnoremap <C-a> 0
vnoremap <C-e> $
cnoremap <C-a> <Home>
cnoremap <C-e> <End>
" Shortcut to toggle relative numbering mode
nnoremap <C-n> :call ToggleRelativeNumber()<CR>
" add a marker fold snippet (for C/C++)
nnoremap <C-f> o//{{{ <Esc>o//}}}<Esc><Up>A
inoremap <C-f> <ESC>o//{{{ <Esc>o//}}}<Esc><Up>A
" only works with v-block (not v-line)
vnoremap <C-f> VV'<O//{{{<Esc>'>o//}}}<Esc>'<<ESC><Up>A
" substitute selection
vnoremap <C-r> "hy:%s/<C-r>h/<C-r>h/gc<left><left><left>
" yank/paste into/from register
vnoremap <C-c> "ay
inoremap <C-v> <C-r>a
cnoremap <C-v> <C-r>a
" +-----------------+
" | Plugin specific |
" +-----------------+
" Open BufferExplorer
nnoremap <C-b> :call BufExplorer()<CR>
" Toggle Tagbar
nnoremap <leader>t :TagbarToggle<CR>
" build tags of your own project with Ctrl-F12
map <C-t> :!ctags -R --sort=yes --c++-kinds=+pl --fields=+iaS --extra=+q --language-force=C++ .<CR>
"}}}
"{{{ Global Highlighting
" hi clear CursorLine
" augroup aug:CLClear
" autocmd! ColorScheme * hi clear CursorLine
" augroup end
"hi LineNr ctermfg=208
" Highlight color of current line
hi CursorLineNR cterm=bold ctermfg=255 ctermbg=208
"hi CursorLineNR cterm=bold ctermfg=226
augroup aug:CLNRSet
autocmd! ColorScheme * hi CursorLineNR cterm=bold ctermfg=255 ctermbg=208
"autocmd! ColorScheme * hi CursorLineNR cterm=bold ctermfg=226
augroup end
" matching brackets
"hi MatchParen cterm=underline ctermbg=141 ctermfg=yellow
hi MatchParen cterm=underline ctermbg=89 ctermfg=208
"hi MatchParen cterm=underline ctermbg=DarkMagenta ctermfg=12
"}}}
"{{{ Functions
" Split Window and scroll down
function! SplitScroll()
:wincmd v
:wincmd w
execute "normal! \<C-d>"
:set scrollbind
:wincmd w
:set scrollbind
endfunc
" toggle relative line number mode
function! ToggleRelativeNumber()
if(&relativenumber == 1)
set norelativenumber
else
set relativenumber
endif
endfunc
"}}}
" +----------------------------+
" | Tmux specific settings |
" +----------------------------+
" tmux will send xterm-style keys when its xterm-keys option is on
if &term =~ '^screen'
execute "set <xUp>=\e[1;*A"
execute "set <xDown>=\e[1;*B"
execute "set <xRight>=\e[1;*C"
execute "set <xLeft>=\e[1;*D"
endif