From: Samir Benmendil Date: Wed, 16 Oct 2013 15:34:16 +0000 (+0200) Subject: completely rewrite vimrc X-Git-Url: https://git.rmz.io/dotfiles.git/commitdiff_plain/0ab90df02f6d6585faa686fd715a41be044769b1 completely rewrite vimrc based on https://github.com/whiteinge/dotfiles/blob/master/.vimrc --- diff --git a/.gitmodules b/.gitmodules index 447a11a..4d01714 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,12 @@ [submodule "vim/bundle/vim-airline"] path = vim/bundle/vim-airline url = https://github.com/bling/vim-airline +[submodule "vim/bundle/Gundo"] + path = vim/bundle/Gundo + url = https://github.com/vim-scripts/Gundo.git +[submodule "vim/bundle/tagbar"] + path = vim/bundle/tagbar + url = https://github.com/majutsushi/tagbar.git +[submodule "vim/bundle/tcomment_vim"] + path = vim/bundle/tcomment_vim + url = https://github.com/tomtom/tcomment_vim.git diff --git a/vim/bundle/Gundo b/vim/bundle/Gundo new file mode 160000 index 0000000..f443470 --- /dev/null +++ b/vim/bundle/Gundo @@ -0,0 +1 @@ +Subproject commit f443470b96364c24a775629418a6b2562ec9173e diff --git a/vim/bundle/tagbar b/vim/bundle/tagbar new file mode 160000 index 0000000..fd79a17 --- /dev/null +++ b/vim/bundle/tagbar @@ -0,0 +1 @@ +Subproject commit fd79a1718902f3eee78a40547d9a792b0e54927f diff --git a/vim/bundle/tcomment_vim b/vim/bundle/tcomment_vim new file mode 160000 index 0000000..3d0a997 --- /dev/null +++ b/vim/bundle/tcomment_vim @@ -0,0 +1 @@ +Subproject commit 3d0a997594966a17df7abb2a2593a1cb72b364b6 diff --git a/vim/spell/de.utf-8.spl b/vim/spell/de.utf-8.spl new file mode 100644 index 0000000..ce93d33 Binary files /dev/null and b/vim/spell/de.utf-8.spl differ diff --git a/vim/spell/de.utf-8.sug b/vim/spell/de.utf-8.sug new file mode 100644 index 0000000..f48c3dc Binary files /dev/null and b/vim/spell/de.utf-8.sug differ diff --git a/vim/spell/fr.utf-8.spl b/vim/spell/fr.utf-8.spl new file mode 100644 index 0000000..ff27132 Binary files /dev/null and b/vim/spell/fr.utf-8.spl differ diff --git a/vim/spell/fr.utf-8.sug b/vim/spell/fr.utf-8.sug new file mode 100644 index 0000000..df555d2 Binary files /dev/null and b/vim/spell/fr.utf-8.sug differ diff --git a/vimrc b/vimrc index 7269ee3..77ebad0 100644 --- a/vimrc +++ b/vimrc @@ -3,149 +3,223 @@ " Author: Samir Benmendil " +filetype plugin indent on + " pathogen.vim runtime path manipulation silent! call pathogen#infect() -" search {{{1 -set incsearch -set ignorecase -set smartcase -set hlsearch +" 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 -" line wrap {{{1 -set backspace=indent,eol,start " allow backspacing over everything in insert mode -set wrap " wrap lines -set linebreak " do not wrap in the middle of a word -set showbreak=▒▒ " show these chars for wrapped lines +set nostartofline " don't move the cursor to the first non-blank char of a line +set path=.,** " current + subdirectory search for :find, :grep:, ... -" indent {{{1 -set expandtab " expand to spaces in Insert mode -set smarttab " a in an indent inserts 'shiftwidth' spaces -set softtabstop=4 " if non-zero, number of spaces to insert for a -set shiftwidth=4 " number of spaces used for each step of (auto)indent -set shiftround " round to 'shiftwidth' for "<<" and ">>" +" 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 cindent " use smart C indenting (see :h C-indenting) -set cinoptions=l1,c4,(0,U1,w1,m1,j1,J1 +set lazyredraw " don't redraw while executing macros -: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 +set list " show chars defined in 'listchars' +set listchars=tab:»·,trail:· " list of strings used for list mode -" backup/undo {{{1 -set backup " keep a backup file -set backupdir=$HOME/.vim/backupdir +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!" -set undofile " persistent undo history -set undodir=$HOME/.vim/backupdir +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 -" NERDTree {{{1 -" open/close NERDTree with \e -nmap e :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 -" airline {{{1 -let g:airline#extensions#tabline#enabled = 1 +" syntax, highlighting and spelling {{{1 +set background=dark " Dark background, d'uh! +syntax on -" appearance {{{1 -set background=dark " Dark background, d'uh! -set number " show some linenumbers -set showmatch " Show matching brackets. -set list listchars=tab:»·,trail:· " show these chars for tabs and trailing spaces - -" misc options {{{1 -set history=500 " keep 500 lines of command line history -set ruler " show the cursor position all the time -set confirm " Ask what to do when closing unsaved documents -set showcmd " Show (partial) command in status line. -set autowrite " Automatically save before commands like :next and :make -"set hidden " Hide buffers when they are abandoned -set splitright " split right when using :vsp -set scrolloff=5 " keep at least n lines above/below +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? -set viminfo='100,<50,s10,h,n~/.vim/viminfo " viminfo defaults but save file in .vim +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 + +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 + +" 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 -" misc bindings {{{1 " 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. +" allow undoing in insert-mode inoremap u +inoremap u -" Press `` to toggle insert and replace mode (no key on Mac keyboard) -imap `` - -" paste toggle {{{1 -nmap :set paste! paste? -imap :set paste! -vmap :set paste!gv -set pastetoggle= - -" mouse {{{1 -" 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 +" 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 -" syntax {{{1 -" 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 -endif +set cindent " use smart C indenting (see :h C-indenting) +set cinoptions=l1,c4,(0,U1,w1,m1,j1,J1 -" autocmd {{{1 -" 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 +set pastetoggle= " key sequence to toggle paste mode - " Put these in an autocmd group, so that we can delete them easily. - augroup vimrcEx - au! +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 - " For all text files set 'textwidth' to 78 characters. - autocmd FileType text setlocal textwidth=78 +" folding {{{1 +set foldmethod=marker " folding type +set foldlevelstart=99 " value for 'foldlevel' when starting to edit a file - " 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 +" 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 - augroup END -else - set autoindent " always set autoindenting on -endif " has("autocmd") +" 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 -" DiffOrig {{{1 +" 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 = ['+', '-'] + +" 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. @@ -154,61 +228,3 @@ if !exists(":DiffOrig") \ | wincmd p | diffthis endif -" fold {{{1 -set foldmethod=marker -set foldlevelstart=99 -" space will toggle current fold in normal mode, if not in a fold, normal -" behaviour -nnoremap @=(foldlevel('.')?'za':"\") -vnoremap zf -" save and restore folds -autocmd BufWinLeave *.* mkview -autocmd BufWinEnter *.* silent loadview - -function! NextIndent(exclusive, fwd, lowerlevel, skipblanks) " {{{1 -" 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 - 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