X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/f1f0fea75fdab72ad740098e6a6167ce37d8626d..4322868924b51e28d1e5d0cd48043a09bee6b60e:/vimrc diff --git a/vimrc b/vimrc index 9a611f1..a9040f1 100644 --- a/vimrc +++ b/vimrc @@ -1,95 +1,55 @@ -" An example for a vimrc file. +" My vimrc file. " -" Maintainer: Bram Moolenaar -" Last change: 2008 Dec 17 +" Author: Samir Benmendil " -" To use it, copy it to -" for Unix and OS/2: ~/.vimrc -" for Amiga: s:.vimrc -" for MS-DOS and Win32: $VIM\_vimrc -" for OpenVMS: sys$login:.vimrc - -" When started as "evim", evim.vim will already have done these settings. -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 +" 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!" -" 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 - -" 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). @@ -101,102 +61,195 @@ if has("autocmd") \ if index(blacklist, &ft) < 0 && line("'\"") > 1 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif +endif + + +" syntax, highlighting and spelling {{{1 +set background=dark " Dark background, d'uh! +syntax 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? + +if has("autocmd") + au Filetype * + \ if &omnifunc == "" | setl omnifunc=syntaxcomplete#Complete | endif +endif + +" 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 - augroup END +set splitright " a new window is put right of the current one -else +nmap j +nmap k +nmap h +nmap l - set autoindent " always set autoindenting on +map :ls:b -endif " has("autocmd") +" 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 + +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 + +" 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 = ['+', '-'] + +" 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 + \ | wincmd p | diffthis endif - -" 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=▒▒ - -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 `` - -" 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 - -" 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