X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/eaba3abef798780da5126d319c316da8a06d477a..ca5e587bfa6ad1b35f11e899575cb872cf000fd0:/vim/vimrc diff --git a/vim/vimrc b/vim/vimrc index 841be45..14ebec3 100644 --- a/vim/vimrc +++ b/vim/vimrc @@ -1,166 +1,351 @@ -" My vimrc file. +" My vimrc. " " Author: Samir Benmendil " -" use xdg -set runtimepath=$XDG_CONFIG_HOME/vim,$VIMRUNTIME,$XDG_CONFIG_HOME/vim/after - -" bundles {{{1 +" plugins {{{1 filetype off -set rtp+=$XDG_DATA_HOME/vim/vundle +set runtimepath& " reset rtp +" remove all autocommands +autocmd! + +set runtimepath+=$XDG_DATA_HOME/vim/vundle call vundle#rc('$XDG_DATA_HOME/vim') -Bundle 'gmarik/vundle' -Bundle 'bling/vim-airline' -Bundle 'ctrlp.vim' -Bundle 'fugitive.vim' -Bundle 'Gundo' -Bundle 'The-NERD-tree' -Bundle 'surround.vim' -Bundle 'Syntastic' -Bundle 'Tagbar' -Bundle 'tComment' -Bundle 'Valloric/YouCompleteMe' -Bundle 'elzr/vim-json' -Bundle 'http://git.code.sf.net/p/vim-latex/vim-latex' +Plugin 'gmarik/vundle' + +Plugin 'airblade/vim-gitgutter' +Plugin 'bling/vim-airline' +Plugin 'elzr/vim-json' +Plugin 'http://git.code.sf.net/p/vim-latex/vim-latex' +Plugin 'junegunn/vim-easy-align' +Plugin 'kien/ctrlp.vim' +Plugin 'kshenoy/vim-signature' +Plugin 'majutsushi/tagbar' +Plugin 'rking/ag.vim' +Plugin 'scrooloose/nerdtree' +Plugin 'scrooloose/syntastic' +Plugin 'sirver/ultisnips' +Plugin 'sjl/gundo.vim' +Plugin 'tomtom/tcomment_vim' +Plugin 'tpope/vim-fugitive' +Plugin 'tpope/vim-repeat' +Plugin 'tpope/vim-surround' +Plugin 'tpope/vim-unimpaired' +Plugin 'valloric/youcompleteme' + +Plugin 'ompugao/ros.vim' +Plugin 'ompugao/ctrlp-ros' + +Plugin 'firef0x/pkgbuild.vim' +Plugin 'derekwyatt/vim-fswitch' +" seems to have problems right now... may be add later? +" Plugin 'jalcine/cmake.vim' +" Plugin 'powerman/vim-plugin-viewdoc' + +" endwise needs to be after delimitmate +Plugin 'raimondi/delimitmate' +Plugin 'tpope/vim-endwise' +Plugin 'lokaltog/vim-easymotion' +Plugin 'chrisbra/checkattach' +Plugin 'klen/python-mode' +Plugin 'nathanaelkane/vim-indent-guides' + +" remove entries first +set runtimepath -=$HOME/.vim +set runtimepath -=$HOME/.vim/after +set runtimepath -=$XDG_CONFIG_HOME/vim +set runtimepath -=$XDG_CONFIG_HOME/vim/after +" then prepend and append them +set runtimepath ^=$XDG_CONFIG_HOME/vim +set runtimepath +=$XDG_CONFIG_HOME/vim/after filetype plugin indent on -" moving around, searching and patterns {{{1 +" colorscheme {{{1 +syntax on +colorscheme badwolf + +" options {{{1 +" moving around, searching and patterns {{{2 set incsearch " show match for partly typed search command set ignorecase " ignore case when using a search pattern set smartcase " override 'ignorecase' when pattern has upper case characters -set hlsearch " highlight all matches for the last used search pattern - -" use leader-n to unhighlight search -nmap n :silent nohl -" use leader-# to display the number of matches for the last search -nmap # :%s:/::gn -" center cursor after search -nnoremap n nzz -" disable arrows -inoremap -inoremap -inoremap -inoremap -noremap -noremap -noremap -noremap +set hlsearch " highlight all matches for the last used search pattern -set nostartofline " don't move the cursor to the first non-blank char of a line -set path=.,** " current + subdirectory search for :find, :grep:, ... +set nostartofline " don't move the cursor to the first non-blank char of a line +set path=.,include/,../include/,/usr/include/c++/*,/opt/ros/hydro/include -" displaying text {{{1 +" displaying text {{{2 set scrolloff=5 " number of screen lines to show around the cursor -set wrap " long lines wrap +set nowrap " long lines wrap set linebreak " wrap long lines at a character in 'breakat' -set showbreak=▒▒ " show these chars for wrapped lines +set showbreak=↪ " show these chars for wrapped lines set lazyredraw " don't redraw while executing macros set list " show chars defined in 'listchars' -set listchars=tab:»·,trail:· " list of strings used for list mode - -set number " show the line number for each line -set relativenumber " show the relative line number for each line -" toggle relativenumber -nnoremap u :exe "set relativenumber!" - -if has("autocmd") - " When editing a file, always jump to the last known cursor position. - " Don't do it when the position is invalid or when inside an event handler - " (happens when dropping a file on gvim). - " Also don't do it when the mark is in the first line, that is the default - " position when opening a file. - " blacklist certain filetype, you can get a file type with :echo &ft - let blacklist = ['gitcommit'] - autocmd BufReadPost * - \ if index(blacklist, &ft) < 0 && line("'\"") > 1 && line("'\"") <= line("$") | - \ exe "normal! g`\"" | - \ endif -endif +set listchars=tab:▸\ " list of strings used for list mode +set listchars+=extends:❯,precedes:❮ +" Only shown when not in insert mode +augroup trailing + au! + au InsertEnter * :set listchars-=trail:· + au InsertLeave * :set listchars+=trail:· +augroup END +set sidescroll=1 " number of collumns to scroll +set sidescrolloff=1 " don't scroll over the listchars -" syntax, highlighting and spelling {{{1 -set background=dark " Dark background, d'uh! -syntax on +set fillchars=diff:⣿,vert:│ + +set nonumber " show the line number for each line +set norelativenumber " show the relative line number for each line + +" syntax, highlighting and spelling {{{2 +set synmaxcol=800 " don't highlight long lines -set spelllang=en_gb " list of accepted languages set dictionary=spell " list of dictionary files for keyword completion -" Spell Check http://tex.stackexchange.com/a/52932 -let b:myLang=0 -let g:myLangList=["nospell","en_gb","en_us","de","fr"] -function! ToggleSpell() - let b:myLang=b:myLang+1 - if b:myLang>=len(g:myLangList) | let b:myLang=0 | endif - if b:myLang==0 - setlocal nospell - else - execute "setlocal spell spelllang=".get(g:myLangList, b:myLang) - endif - echo "spell checking language:" g:myLangList[b:myLang] -endfunction -map :call ToggleSpell() -imap :call ToggleSpell() -if has("autocmd") - au Filetype * - \ if &omnifunc == "" | setl omnifunc=syntaxcomplete#Complete | endif -endif +set colorcolumn=+1 -" multiple windows {{{1 +" multiple windows {{{2 set laststatus=2 " 0, 1 or 2; when to use a status line for the last window set previewheight=20 " default height for the preview window -set splitright " a new window is put right of the current one +set hidden -nmap j -nmap k -nmap h -nmap l +" set splitbelow " a new window is put below of the current one +set splitright " a new window is put right of the current one -map :ls:b +" terminal {{{2 +set ttyfast -" using the mouse {{{1 +" using the mouse {{{2 set mouse=rnv " list of flags for using the mouse set ttymouse=xterm " type of mouse -"xterm mouse with middleclick paste -nnoremap i -vnoremap s - -" messages and info {{{1 +" messages and info {{{2 set showcmd " Show (partial) command in status line. set ruler " show the cursor position all the time set confirm " Ask what to do when closing unsaved documents +set shortmess=filnxtoOI " don't show intro message -" editing text {{{1 +" editing text {{{2 set backspace=indent,eol,start " allow backspacing over everything in insert mode set showmatch " Show matching brackets. set nojoinspaces " don't use two spaces after '.' when joining a line -set formatoptions+=j " remove comment leader when joining lines +set formatoptions=jcrnql set nrformats=hex " number formats recognized for CTRL-A and CTRL-X commands +set complete=.,w,b,u,t " whether to use a popup menu for Insert mode completion set completeopt=longest,menuone,preview -" Indent if we're at the beginning of a line. Else, do completion. -function! InsertTabWrapper() - let col = col('.') - 1 - if !col || getline('.')[col - 1] !~ '\k' - return "\" - else - return "\" -endif -endfunction -inoremap =InsertTabWrapper() -inoremap +" tabs and indent {{{2 +set shiftwidth=4 " number of spaces used for each step of (auto)indent +set smarttab " a in an indent inserts 'shiftwidth' spaces +set softtabstop=4 " if non-zero, number of spaces to insert for a +set shiftround " round to 'shiftwidth' for "<<" and ">>" +set expandtab " expand to spaces in Insert mode +set autoindent + +set pastetoggle= " key sequence to toggle paste mode + +" folding {{{2 +set foldmethod=marker " folding type +set foldlevelstart=0 " value for 'foldlevel' when starting to edit a file + +" save and restore folds +set viewoptions=folds,cursor " don't save local options + +" diff mode {{{2 +set diffopt=filler,vertical + +" reading and writing files {{{2 +set modeline " read modelines +set modelines=2 " only check first/last 2 lines +set writebackup " write a backup file before overwriting a file +set backup " keep a backup after owerwriting a file +set backupdir=$XDG_CACHE_HOME/vim// + +set undofile " persistent undo history +set undodir=$XDG_CACHE_HOME/vim// + +set autowrite " automatically write a file when leaving a modified buffer +set autoread " automatically read a file that has been modified + +" the swap file {{{2 +set noswapfile +set directory=$XDG_CACHE_HOME/vim// + +" command line editing {{{2 +set history=5000 " how many command lines are remembered +set wildmenu " command-line completion shows a list of matches +set wildmode=longest:full,full " specifies how command line completion works + +set wildignore+=.hg,.git,.svn " Version control +set wildignore+=*.aux,*.out,*.toc " LaTeX intermediate files +set wildignore+=*.jpg,*.bmp,*.gif,*.png,*.jpeg " binary images +set wildignore+=*.o,*.obj,*.exe,*.dll,*.manifest " compiled object files +set wildignore+=*.spl " compiled spelling word lists +set wildignore+=*.sw? " Vim swap files +set wildignore+=*.luac " Lua byte code +set wildignore+=*.pyc " Python byte code +set wildignore+=*.orig " Merge resolution files + +" various {{{2 +set virtualedit=block " let cursor move past last char in mode +set viminfo='100,<50,s10,h,n$XDG_CACHE_HOME/vim/viminfo " viminfo defaults but save file in .cache + +set viewdir=$XDG_CACHE_HOME/vim + +" autocmds {{{1 +" Resize splits when the window is resized {{{2 +augroup resize + au! + autocmd VimResized * :wincmd = +augroup END + +" Only show cursorline in the current window and in normal mode {{{2 +augroup cline + au! + au WinLeave,InsertEnter * set nocursorline + au WinEnter,InsertLeave * set cursorline +augroup END + +" Treat buffers from stdin (e.g.: echo foo | vim -) as scratch {{{2 +augroup ft_stdin + au! + au StdinReadPost * :set buftype=nofile +augroup END + +" Jump to last known cursor position {{{2 +augroup cursor_pos + au! + " blacklist certain filetype + let blacklist = ['gitcommit'] + autocmd BufReadPost * + \ if index(blacklist, &ft) < 0 && line("'\"") > 1 && line("'\"") <= line("$") | + \ exe "normal! g`\"" | + \ endif +augroup END + +" bindings {{{1 + +" allow both and / to be +map + +" make +nnoremap :make + +" unhighlight search +nnoremap / :silent nohl + +" Tabs +nnoremap [ :tabprev +nnoremap ] :tabnext + +" Wrap +nnoremap W :set wrap! + +" paste from selection +nnoremap p* :silent! set paste"*p:set nopaste +" paste from clipboard +nnoremap p+ :silent! set paste"+p:set nopaste + +" Clean trailing whitespace +nnoremap ww m':%s/\s\+$//:let @/=''``zz + +" Source +vnoremap S y:execute @@:echo 'Sourced selection.' +nnoremap S ^vg_y:execute @@:echo 'Sourced line.' + +" jump to last cursor position +noremap ' ` + +" Select (charwise) the contents of the current line, excluding indentation. +nnoremap vv ^vg_ + +" Toggle [i]nvisible characters +nnoremap i :set list! + +" Unfuck my screen +nnoremap U :syntax sync fromstart:AirlineRefresh:redraw! + +" Ranger +nnoremap r :silent !ranger %:h:redraw! +nnoremap R :silent !ranger:redraw! + +" Use sane regexes. +nnoremap / /\v +vnoremap / /\v +cnoremap s/ s/\v + +" display the number of matches for the last search +nmap # :%s:/::gn + +" center cursor after search and open folds +nnoremap n nzzzv +nnoremap N Nzzzv + +" same when jumping around +nnoremap g; g;zzzv +nnoremap g, g,zzzv +nnoremap zzzv + +" Not using the default mappings of 'To line from top/bottom' +noremap H ^ +noremap L $ +vnoremap H ^ +vnoremap L g_ + +" Heresy, emacs insert bindings +inoremap I +inoremap A +cnoremap +cnoremap + +" proper movement when lines are wrapped +noremap j (v:count == 0 ? 'gj' : 'j') +noremap k (v:count == 0 ? 'gk' : 'k') + +" disable arrows +noremap +noremap +noremap +noremap +inoremap +inoremap +inoremap +inoremap +cnoremap +cnoremap +cnoremap +cnoremap +cnoremap +cnoremap +cnoremap +cnoremap + +" close all folds open fold in cursor +nnoremap zx zMzxzt + +" edit vimrc in new tab +nmap ev :tabedit $MYVIMRC:lcd %:p:h + +map :ls:b + +nnoremap w +nnoremap W + +"xterm mouse with middleclick paste +nnoremap i +vnoremap s " fix legacy vi inconsistency map Y y$ @@ -169,8 +354,8 @@ map Y y$ vnoremap . :normal . " add line without changing position or leaving mode -map o :set pastem`o``:set nopaste -map O :set pastem`O``:set nopaste +noremap o :set pastem`o``:set nopaste +noremap O :set pastem`O``:set nopaste " Don't use Ex mode, use Q for formatting map Q gq @@ -179,89 +364,82 @@ map Q gq inoremap u inoremap u -" tabs and indent {{{1 -set shiftwidth=4 " number of spaces used for each step of (auto)indent -set smarttab " a in an indent inserts 'shiftwidth' spaces -set softtabstop=4 " if non-zero, number of spaces to insert for a -set shiftround " round to 'shiftwidth' for "<<" and ">>" -set expandtab " expand to spaces in Insert mode - -set cindent " use smart C indenting (see :h C-indenting) -set cinoptions=l1,c4,(0,U1,w1,m1,j1,J1 - -set pastetoggle= " key sequence to toggle paste mode - nmap b :set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nmap B :set expandtab tabstop=8 shiftwidth=8 softtabstop=4 nmap M :set noexpandtab tabstop=8 softtabstop=4 shiftwidth=4 nmap m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2 -" folding {{{1 -set foldmethod=marker " folding type -set foldlevelstart=0 " value for 'foldlevel' when starting to edit a file - " space will toggle current fold in normal mode -nnoremap @=(foldlevel('.')?'za':"\") +nnoremap za " create folds around visual selection -vnoremap zf +vnoremap zf -" save and restore folds -set viewoptions=folds,cursor " don't save local options autocmd BufWinLeave *.* mkview autocmd BufWinEnter *.* silent loadview -" reading and writing files {{{1 -set writebackup " write a backup file before overwriting a file -set backup " keep a backup after owerwriting a file -set backupdir=$XDG_CACHE_HOME/vim - -set undofile " persistent undo history -set undodir=$XDG_CACHE_HOME/vim +" save with sudo +cnoremap w!! w !sudo tee % > /dev/null -set autowrite " automatically write a file when leaving a modified buffer +" plugins {{{1 +" ag {{{2 +let g:AgSmartCase = 1 +nnoremap ag yiw:Ag " +vnoremap ag y:Ag " -" save with sudo -cmap w!! w !sudo tee % > /dev/null +" airline {{{2 +let g:airline_detect_whitespace=2 +let g:airline#extensions#tabline#enabled = 1 +let g:airline_powerline_fonts = 1 -" the swap file {{{1 -set directory=$XDG_CACHE_HOME/vim,.,/var/tmp +" checkattach {{{2 +let g:checkattach_filebrowser = 'ranger' -" command line editing {{{1 -set history=500 " how many command lines are remembered -set wildmode=longest:full " specifies how command line completion works -set wildmenu " command-line completion shows a list of matches +" delimitmate {{{2 +let delimitMate_expand_cr = 2 +let g:delimitMate_expand_space = 1 -" various {{{1 -set virtualedit=block " let cursor move past last char in mode -set viminfo='100,<50,s10,h,n$XDG_CACHE_HOME/vim/viminfo " viminfo defaults but save file in .vim +" fswitch {{{2 +nnoremap ff :FSHere +nnoremap fl :FSRight +nnoremap fh :FSLeft +nnoremap fL :FSSplitRight +nnoremap fH :FSSplitLeft -set viewdir=$XDG_CACHE_HOME/vim +" fugitive {{{2 +nmap dd :tab split \| Gdiff \| wincmd h +" delete fugitive buffers when closed +autocmd BufReadPost fugitive://* set bufhidden=delete -" plugins {{{1 -" airline {{{2 -let g:airline_detect_whitespace=2 -let g:airline_whitespace_symbol = 'Ξ' -let g:airline_linecolumn_prefix = '␊ ' -let g:airline_left_sep = '▶' -let g:airline_right_sep = '◀' -let g:airline#extensions#tabline#enabled = 1 +nnoremap gs :Gstatus +nnoremap gd :Gdiff +nnoremap gc :tab Gcommit -v +nnoremap ga :Gwrite +nnoremap gb :Gblame " Gundo {{{2 nnoremap :GundoToggle -" fugitive {{{2 -nmap dd :tab split \| Gdiff \| wincmd h + +" indent-guides {{{2 +let g:indent_guides_default_mapping = 0 +let g:indent_guides_guide_size = 1 +nmap cog IndentGuidesToggle +nmap [og IndentGuidesEnable +nmap ]og IndentGuidesDisable " NERDTree {{{2 " open/close NERDTree with \e nmap e :NERDTreeToggle nmap :NERDTreeToggle " to open files/dirs -let NERDTreeMapActivateNode='' -" open NERDTree if no files were selected -autocmd vimenter * if !argc() | NERDTree | endif +let NERDTreeMapActivateNode='l' " close vim if only NERDTree is open autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif +" python-mode {{{2 + +let g:pymode_rope_completion = 0 +let g:pymode_folding = 1 + " synastic {{{2 let g:syntastic_enable_highlighting = 0 let g:syntastic_error_symbol='E' @@ -272,7 +450,7 @@ let g:syntastic_always_populate_loc_list=1 nmap y :SyntasticCheck if ! &diff - let g:syntastic_check_on_open=1 + let g:syntastic_check_on_open=1 endif " tagbar {{{2 @@ -283,8 +461,26 @@ let g:tagbar_autoshowtag = 1 let g:tagbar_width = 25 let g:tagbar_iconchars = ['+', '-'] -" YouCompleteMe {{{2 -let g:ycm_extra_conf_globlist = ['/mnt/data/src/*'] +" UltiSnips {{{2 +let g:UltiSnipsEditSplit = 'vertical' +let g:UltiSnipsSnippetsDir = expand("$XDG_CONFIG_HOME/vim/ultisnips") +let g:UltiSnipsSnippetDirectories = ["UltiSnips", "ultisnips"] +let g:UltiSnipsExpandTrigger = "" +let g:UltiSnipsJumpForwardTrigger = "" +let g:UltiSnipsJumpBackwardTrigger = "" + +" youcompleteme {{{2 +let g:ycm_extra_conf_globlist = ['~/src/*','/mnt/data/src/*'] +let g:ycm_global_ycm_extra_conf = expand('$XDG_CONFIG_HOME/vim/ycm_extra_conf.py') +let g:ycm_extra_conf_vim_data = ['getcwd()'] +let g:ycm_add_preview_to_completeopt = 1 +let g:ycm_autoclose_preview_window_after_insertion = 1 +"let g:ycm_extra_conf_vim_data = ['%:p'] +nnoremap jd :YcmCompleter GoTo + +" vim-easy-align {{{2 +" start interactive EasyAlign in visual mode +vmap (EasyAlign) " vim-json {{{2 let g:vim_json_syntax_conceal = 0 @@ -292,8 +488,11 @@ let g:vim_json_syntax_conceal = 0 " vim-latex {{{2 let g:tex_flavor='latex' let g:Tex_DefaultTargetFormat='pdf' +let g:Tex_MultipleCompileFormats='pdf' + " functions {{{1 + " Convenient command to see the difference between the current buffer and the " file it was loaded from, thus the changes you made. " Only define it when not defined already. @@ -301,3 +500,34 @@ if !exists(":DiffOrig") command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis \ | wincmd p | diffthis endif + +" spell check {{{2 +" http://tex.stackexchange.com/a/52932 +let g:myLangList=["en_gb","en_us","de","fr"] + +function! ToggleSpell() + if !exists("b:myLang") + let b:myLang=0 + endif + execute "setlocal spell!" + if (&spell) + echo "setlocal spelllang=" g:myLangList[b:myLang] + endif +endfunction + +function! SwitchSpell() + if !exists("b:myLang") + let b:myLang=0 + endif + if (&spell) + let b:myLang=b:myLang+1 + if b:myLang>=len(g:myLangList) | let b:myLang=0 | endif + endif + execute "setlocal spell spelllang=".get(g:myLangList, b:myLang) + echo "setlocal spelllang=" g:myLangList[b:myLang] +endfunction + +nnoremap s :call ToggleSpell() +nnoremap S :call SwitchSpell() +" fix spelling with first choice +nnoremap f 1z=