X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/976f75b5442f919820b94cc241e6c64f2c017dfd..4322868924b51e28d1e5d0cd48043a09bee6b60e:/vimrc diff --git a/vimrc b/vimrc index 99d28ba..a9040f1 100644 --- a/vimrc +++ b/vimrc @@ -1,90 +1,55 @@ " My vimrc file. " -" Maintainer: Samir Benmendil +" Author: Samir Benmendil " -if v:progname =~? "evim" - finish -endif - -" TODO -" organize this file, never thought it'll get this big -" TODO +filetype plugin indent on " pathogen.vim runtime path manipulation silent! call pathogen#infect() -" Use Vim settings, rather than Vi settings (much better!). -" This must be first, because it changes other options as a side effect. -set nocompatible - -" allow backspacing over everything in insert mode -set backspace=indent,eol,start - -if has("vms") - set nobackup " do not keep a backup file, use versions instead -else - set backup " keep a backup file - set backupdir=$HOME/.vim/backupdir -endif -set history=50 " keep 50 lines of command line history -set ruler " show the cursor position all the time -set showcmd " display incomplete commands -set incsearch " do incremental searching -set number " show some linenumbers -" viminfo defaults but save file in .vim -set viminfo='100,<50,s10,h,n~/.vim/viminfo - -" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries -" let &guioptions = substitute(&guioptions, "t", "", "g") - -" Don't use Ex mode, use Q for formatting -map Q gq +" moving around, searching and patterns {{{1 +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 nostartofline " don't move the cursor to the first non-blank char of a line +set path=.,** " current + subdirectory search for :find, :grep:, ... + +" displaying text {{{1 +set scrolloff=5 " number of screen lines to show around the cursor +set wrap " long lines wrap +set linebreak " wrap long lines at a character in 'breakat' +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!" -" CTRL-U in insert mode deletes a lot. Use CTRL-G u to first break undo, -" so that you can undo CTRL-U after inserting a line break. -inoremap u - -"paste toggle -nmap :set paste! paste? -imap :set paste! -vmap :set paste!gv -set pastetoggle= - -" In many terminal emulators the mouse works just fine, thus enable it. -"if has('mouse') -" "xterm mouse with middleclick paste -" nnoremap i -" vnoremap s -" set mouse=rnv -" "choose either one -" set ttymouse=xterm -" "set ttymouse=xterm2 -"endif - -" Switch syntax highlighting on, when the terminal has colors -" Also switch on highlighting the last used search pattern. -if &t_Co > 2 || has("gui_running") - syntax on - set hlsearch -endif - -" Only do this part when compiled with support for autocommands. if has("autocmd") - - " Enable file type detection. - " Use the default filetype settings, so that mail gets 'tw' set to 72, - " 'cindent' is on in C files, etc. - " Also load indent files, to automatically do language-dependent indenting. - filetype plugin indent on - - " Put these in an autocmd group, so that we can delete them easily. - augroup vimrcEx - au! - - " For all text files set 'textwidth' to 78 characters. - autocmd FileType text setlocal textwidth=78 - " 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). @@ -96,115 +61,195 @@ if has("autocmd") \ if index(blacklist, &ft) < 0 && line("'\"") > 1 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif +endif - augroup END -else +" syntax, highlighting and spelling {{{1 +set background=dark " Dark background, d'uh! +syntax on - set autoindent " always set autoindenting on +set spelllang=en,de,fr " list of accepted languages +set dictionary=spell " list of dictionary files for keyword completion +" toggle spell-checking +map :set nospell!:set nospell? -endif " has("autocmd") +if has("autocmd") + au Filetype * + \ if &omnifunc == "" | setl omnifunc=syntaxcomplete#Complete | endif +endif -" 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. -if !exists(":DiffOrig") - command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis - \ | wincmd p | diffthis +" multiple windows {{{1 +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 + +nmap j +nmap k +nmap h +nmap l + +map :ls:b + +" using the mouse {{{1 +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 +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 + +" editing text {{{1 +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 nrformats=hex " number formats recognized for CTRL-A and CTRL-X commands + +" 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 + +" fix legacy vi inconsistency +map Y y$ + +" allow repeat operator on visual +vnoremap . :normal . + +" add line without changing position or leaving mode +map o :set pastem`o``:set nopaste +map O :set pastem`O``:set nopaste + +" Don't use Ex mode, use Q for formatting +map Q gq + +" allow undoing in insert-mode +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 -" Ask what to do when closing unsaved documents -set confirm - -" If using a dark background within the editing area and syntax highlighting -" turn on this option as well -set background=dark - -" The following are commented out as they cause vim to behave a lot -" differently from regular Vi. They are highly recommended though. -set showcmd " Show (partial) command in status line. -set showmatch " Show matching brackets. -set ignorecase " Do case insensitive matching -set smartcase " Do smart case matching -set incsearch " Incremental search -set autowrite " Automatically save before commands like :next and :make -"set hidden " Hide buffers when they are abandoned -"set mouse=a " Enable mouse usage (all modes) - -" expand tabs -set softtabstop=4 -set shiftwidth=4 -set expandtab - -set showbreak=▒▒ -" show these chars for tabs and trailing spaces -set list listchars=tab:»·,trail:· - -set pastetoggle= -" split right when using :vsp -set splitright - -set scrolloff=3 " keep at least 3 lines above/below -" Press i to enter insert mode, and ii to exit. -imap ii -" Press `` to toggle insert and replace mode (no key on Mac keyboard) -imap `` - -" fold between {{{ }}} -set foldmethod=marker -set foldlevelstart=99 -" space will toggle current fold in normal mode, if not in a fold, normal -" behaviour +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=99 " value for 'foldlevel' when starting to edit a file + +" space will toggle current fold in normal mode nnoremap @=(foldlevel('.')?'za':"\") +" create folds around visual selection vnoremap zf + " save and restore folds autocmd BufWinLeave *.* mkview autocmd BufWinEnter *.* silent loadview -" Jump to the next or previous line that has the same level or a lower -" level of indentation than the current line. -" -" exclusive (bool): true: Motion is exclusive -" false: Motion is inclusive -" fwd (bool): true: Go to next line -" false: Go to previous line -" lowerlevel (bool): true: Go to line with lower indentation level -" false: Go to line with the same indentation level -" skipblanks (bool): true: Skip blank lines -" false: Don't skip blank lines -function! NextIndent(exclusive, fwd, lowerlevel, skipblanks) - let line = line('.') - let column = col('.') - let lastline = line('$') - let indent = indent(line) - let stepvalue = a:fwd ? 1 : -1 - while (line > 0 && line <= lastline) - let line = line + stepvalue - if ( ! a:lowerlevel && indent(line) == indent || - \ a:lowerlevel && indent(line) < indent) - if (! a:skipblanks || strlen(getline(line)) > 0) - if (a:exclusive) - let line = line - stepvalue - endif - exe line - exe "normal " column . "|" - return - endif - endif - endwhile -endfunction +" 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=$HOME/.vim/backupdir + +set undofile " persistent undo history +set undodir=$HOME/.vim/backupdir + +set autowrite " automatically write a file when leaving a modified buffer + +" 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 + +" various {{{1 +set virtualedit=block " let cursor move past last char in mode +set viminfo='100,<50,s10,h,n~/.vim/viminfo " viminfo defaults but save file in .vim + +" 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 + +" Gundo {{{2 +nnoremap :GundoToggle +" fugitive {{{2 +nmap dd :tab split \| Gdiff \| wincmd h + +" 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 +" close vim if only NERDTree is open +autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif + +" synastic {{{2 +let g:syntastic_enable_highlighting = 0 +let g:syntastic_error_symbol='E' +let g:syntastic_style_error_symbol='S' +let g:syntastic_warning_symbol='W' +let g:syntastic_style_warning_symbol='S' +let g:syntastic_always_populate_loc_list=1 +nmap y :SyntasticCheck + +if ! &diff + let g:syntastic_check_on_open=1 +endif + +" tagbar {{{2 +map :TagbarToggle +let g:tagbar_sort = 0 +let g:tagbar_compact = 1 +let g:tagbar_autoshowtag = 1 +let g:tagbar_width = 25 +let g:tagbar_iconchars = ['+', '-'] -" Moving back and forth between lines of same or lower indentation. -nnoremap [l :call NextIndent(0, 0, 0, 1) -nnoremap ]l :call NextIndent(0, 1, 0, 1) -nnoremap [L :call NextIndent(0, 0, 1, 1) -nnoremap ]L :call NextIndent(0, 1, 1, 1) -vnoremap [l :call NextIndent(0, 0, 0, 1)m'gv'' -vnoremap ]l :call NextIndent(0, 1, 0, 1)m'gv'' -vnoremap [L :call NextIndent(0, 0, 1, 1)m'gv'' -vnoremap ]L :call NextIndent(0, 1, 1, 1)m'gv'' -onoremap [l :call NextIndent(0, 0, 0, 1) -onoremap ]l :call NextIndent(0, 1, 0, 1) -onoremap [L :call NextIndent(1, 0, 1, 1) -onoremap ]L :call NextIndent(1, 1, 1, 1) -" end of jump indent +" YouCompleteMe {{{2 +let g:ycm_extra_conf_globlist = ['/mnt/data/src/*'] + +" 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. +if !exists(":DiffOrig") + command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis + \ | wincmd p | diffthis +endif