summaryrefslogblamecommitdiff
path: root/vimrc
blob: 3cca783d0e6525a1649a1488bdd96dce10de15d2 (plain) (tree)


























































































































































































































































































                                                                                                                                                                                   
" dotfiles -- vimrc
" author: johannst

set nocompatible     
inoremap jj <Esc>

let mapleader=";"
nnoremap <leader>ev :edit ~/.vimrc<CR>
nnoremap <leader>sv :source ~/.vimrc<CR>

"{{{ Plugin Management 

" to install plugins open vim and run :PluginInstall from within vim OR
" vim +PluginInstall +qall from cmd line

filetype off         " necessary for vundle!!!
set runtimepath+=~/.vim/bundle/Vundle.vim

call vundle#begin()

Plugin 'VundleVim/Vundle.vim'

let g:bufexplorer_enable="-"
Plugin 'jlanzarotta/bufexplorer'

let g:buftabline_enable="-"
Plugin 'ap/vim-buftabline'

"let g:airline_enable="-"
"Plugin 'vim-airline/vim-airline'
"Plugin 'vim-airline/vim-airline-themes'

let g:tagbar_enable="-"
Plugin 'majutsushi/tagbar'

let g:ctrlp_enable="-"
Plugin 'kien/ctrlp.vim'

"let g:omnicppcomplete_enable="-"
"Plugin 'vim-scripts/OmniCppComplete'

call vundle#end()         

"}}}
"{{{ Plugin Config 

if exists('g:bufexplorer_enable')
   nnoremap <leader>be :call BufExplorer()<CR>
endif

if exists('g:airline_enable')
   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
endif

if exists('g:tagbar_enable')
   let g:tagbar_ctags_bin='~/.vim/bin/ctags'
   if !empty(glob(g:tagbar_ctags_bin))
      augroup aug:TagbarKeymaps
         autocmd!
         autocmd FileType c,cpp nnoremap <buffer> <leader>tb :TagbarToggle<CR>
      augroup end
   else
      echom "[vimrc]: ctags not detected, please link to " g:tagbar_ctags_bin
   endif
endif

if exists('g:ctrlp_enable')
   let g:ctrlp_buftag_ctags_bin='~/.vim/bin/ctags'
   let g:ctrlp_extensions = ['buffertag', 'line', 'changes', 'mixed']
endif

if exists('g:buftabline_enable')
   let g:buftabline_indicators = 1
endif

if exists('g:omnicppcomplete_enable')
   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
   autocmd! CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
   set completeopt=menuone,menu,longest,preview
endif

"}}}
"{{{ Vim Basic

syntax on
"set background=dark
colorscheme johannst

filetype plugin indent on       " enable loading indent file for filetype
set fileformats=unix,dos,mac    " try recognizing dos, unix, and mac line endings.
set encoding=utf-8              " set default encoding to UTF-8.

set confirm                     " prompt if closing with unsaved changes.
set shortmess=tTa               " use abbreviations in messages and truncate too long strings
set showcmd                     " show command at end of cmd line (like keymaps,..)

set scrolloff=3                 " set vertical scroll distance to 3 lines
set nowrap                      " dont't wrap text

set backspace=indent,eol,start  " backspace behav in insert mode

set noautowrite                 " never write a file unless I request it.
set noautowriteall              " NEVER.
set noautoread                  " don't automatically re-read changed files.

set number                      " display line numbers
set relativenumber              " display relative line numbers

set cursorline                  " cursor line highlighting
set cursorcolumn                " cursor column highlighting 

"set list                        " show invisible character
set listchars=tab:>-,eol:$,trail:-,precedes:<,extends:>

"}}}
"{{{ Basic Movement

" 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>

"}}}
"{{{ Folding 

set foldmethod=marker     

augroup aug:FileTypeCommentString
   autocmd!
   autocmd FileType vim execute "let b:comment_symbol=\"\\\"\""
   autocmd FileType c,cpp execute "let b:comment_symbol=\"//\""
   autocmd FileType sh,make,python  execute "let b:comment_symbol=\"#\""
augroup end

augroup aug:FoldMarkerKeymaps
   autocmd!
   autocmd FileType * if exists('b:comment_symbol') | execute "nnoremap <buffer> <leader>fm o". b:comment_symbol . "{{{ <Esc>o" . b:comment_symbol. "}}}<Esc><Up>A" | endif
   autocmd FileType * if exists('b:comment_symbol') | execute "inoremap <buffer> <leader>fm <Esc>o". b:comment_symbol . "{{{ <Esc>o" . b:comment_symbol. "}}}<Esc><Up>A" | endif
   autocmd FileType * if exists('b:comment_symbol') | execute "vnoremap <buffer> <leader>fm VV'<O". b:comment_symbol . "{{{ <Esc>'>o" . b:comment_symbol. "}}}<Esc>'<<Up>A" | endif
augroup end

"}}}
"{{{ Tabwidth 

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

"}}}
"{{{ Search & Replace

set ignorecase                " case insensitive matching
set incsearch                 " already start searching while typing pattern
set hlsearch                  " highlight search results
set smartcase                 " overwrite ignorecase if pattern contains capital letters
set showmatch                 " show matching brackets.
set matchtime=5               " how many tenths of a second to blink when matching brackets
set matchpairs+=<:>           " show matching <> as well

vnoremap <leader>r "hy:%s/<C-r>h/<C-r>h/gc<left><left><left>

"}}}
"{{{ Buffer & Splits 

set hidden                    " do not unload abandoned buffers
noremap <leader>q :bd

" navigate between different buffers 
nnoremap <S-Left>  :bprevious<CR>
nnoremap <S-Right> :bnext<CR>
nnoremap <S-h>  :bprevious<CR>
nnoremap <S-l>  :bnext<CR>

" move between 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
"(deprecated) map <C-j>     <C-w>5-
"(deprecated) map <C-k>     <C-w>5+
"(deprecated) map <C-l>     <C-w>5<
"(deprecated) map <C-h>     <C-w>5>

"}}}
"{{{ Statusline 

set laststatus=2              " always show status line
set ruler                     " display cursor position in status line

"}}}
"{{{ Indentation 

nnoremap <leader>ri mzgg=G`z
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:VimLangStyle
   autocmd!
   autocmd FileType vim setlocal formatoptions-=cro   " disable auto-comment
augroup end

augroup aug:CLangStyle
   autocmd!
   autocmd FileType c,cpp setlocal cinoptions=:1,=2,g1,h2  " switch-case/class-lable indentation
   autocmd FileType c,cpp setlocal formatoptions-=cro      " disable auto-comment
augroup end

"}}}
"{{{ Wildmenu 

" 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

"}}}
"{{{ Save & Restore 

augroup aug:AutoSaveResore
   autocmd!
   "autocmd VimEnter * silent! source .vim_last_session
   "autocmd QuitPre * mksession! .vim_last_session
augroup end

"}}}
"{{{ QuickFix 

augroup aug:QuickFixConfig
   autocmd!
   autocmd QuickFixCmdPost [^l]* nested botright cwindow
   autocmd QuickFixCmdPost    l* nested botright lwindow
augroup end

"}}}
"{{{ SCons Integration 

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>)

"}}}
"{{{ Tmux Specific 

"" 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

"}}}