From: Samir Benmendil Date: Wed, 24 Sep 2014 14:26:59 +0000 (+0100) Subject: vim: import settings from Steve Losh X-Git-Url: https://git.rmz.io/dotfiles.git/commitdiff_plain/de003707d7761273b2a1f7a1e6257745f1b9ea85?ds=inline vim: import settings from Steve Losh source: http://bitbucket.org/sjl/dotfiles/src/tip/vim/ --- diff --git a/vim/ftplugin/help.vim b/vim/ftplugin/help.vim new file mode 100644 index 0000000..1432ebb --- /dev/null +++ b/vim/ftplugin/help.vim @@ -0,0 +1,6 @@ +setlocal textwidth=78 +setlocal listchars-=extends:❯,precedes:❮ +setlocal sidescroll=0 +setlocal sidescrolloff=0 +wincmd L +vertical resize 78 diff --git a/vim/ftplugin/mail.vim b/vim/ftplugin/mail.vim index 82b054c..1d4dbba 100644 --- a/vim/ftplugin/mail.vim +++ b/vim/ftplugin/mail.vim @@ -1 +1 @@ -setlocal formatoptions+=aw " auto-format +setlocal formatoptions+=awt " auto-format diff --git a/vim/ftplugin/tex.vim b/vim/ftplugin/tex.vim index 62197df..56ede0e 100644 --- a/vim/ftplugin/tex.vim +++ b/vim/ftplugin/tex.vim @@ -4,4 +4,4 @@ setlocal shiftwidth=1 setlocal softtabstop=1 setlocal textwidth=80 setlocal iskeyword+=: " autocomplet fig: labels -setlocal formatoptions+=aw " auto-format +setlocal formatoptions+=taw " auto-format diff --git a/vim/vimrc b/vim/vimrc index ab60260..e35d604 100644 --- a/vim/vimrc +++ b/vim/vimrc @@ -1,11 +1,12 @@ -" My vimrc file. +" My vimrc. " " Author: Samir Benmendil " -" bundles {{{1 +" plugins {{{1 filetype off set runtimepath& " reset rtp +" remove all autocommands autocmd! set runtimepath+=$XDG_DATA_HOME/vim/vundle @@ -56,129 +57,9 @@ set runtimepath +=$XDG_CONFIG_HOME/vim/after filetype plugin indent on -" bindings {{{1 -" allow both and / to be -map -nnoremap :make - -" 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 -noremap -noremap -noremap -noremap -inoremap -inoremap -inoremap -inoremap -cnoremap -cnoremap -cnoremap -cnoremap -cnoremap -cnoremap -cnoremap -cnoremap - -" 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 - -colorscheme badwolf +" colorscheme {{{1 syntax on - -" Spell Check http://tex.stackexchange.com/a/52932 -let b:myLang=0 -let g:myLangList=["en_gb","en_us","de","fr"] - -function! ToggleSpell() - execute "setlocal spell!" - if (&spell) - echo "setlocal spelllang=" g:myLangList[b:myLang] - endif -endfunction -nnoremap s :call ToggleSpell() - -function! SwitchSpell() - 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 SwitchSpell() - -" fix spelling with first choice -nnoremap f 1z= - -if has("autocmd") - au Filetype * - \ if &omnifunc == "" | setl omnifunc=syntaxcomplete#Complete | endif -endif - -map :ls:b - -nmap w -nmap W - - -"xterm mouse with middleclick paste -nnoremap i -vnoremap s - -" fix legacy vi inconsistency -map Y y$ - -" allow repeat operator on visual -vnoremap . :normal . - -" add line without changing position or leaving mode -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 - -" allow undoing in insert-mode -inoremap u -inoremap u - -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 - -" space will toggle current fold in normal mode -nnoremap za -" create folds around visual selection -vnoremap zf - -autocmd BufWinLeave *.* mkview -autocmd BufWinEnter *.* silent loadview - -" save with sudo -cmap w!! w !sudo tee % > /dev/null - +colorscheme badwolf " options {{{1 " moving around, searching and patterns {{{2 @@ -194,28 +75,48 @@ set path=.,include/,../include/,/usr/include/c++/*,/opt/ros/hydro/include set scrolloff=5 " number of screen lines to show around the cursor 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 listchars+=extends:⋯,precedes:⋯ +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 -set number " show the line number for each line -set relativenumber " show the relative line number for each line +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 dictionary=spell " list of dictionary files for keyword completion +set colorcolumn=+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 hidden + +" set splitbelow " a new window is put below of the current one set splitright " a new window is put right of the current one +" terminal {{{2 +set ttyfast + " using the mouse {{{2 set mouse=rnv " list of flags for using the mouse set ttymouse=xterm " type of mouse @@ -232,10 +133,11 @@ set backspace=indent,eol,start " allow backspacing over everything in insert mo 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 @@ -245,9 +147,7 @@ set smarttab " a in an indent inserts 'shiftwidth' spac 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 autoindent set pastetoggle= " key sequence to toggle paste mode @@ -259,22 +159,35 @@ set foldlevelstart=0 " value for 'foldlevel' when starting to edit a set viewoptions=folds,cursor " don't save local options " reading and writing files {{{2 +set nomodeline " don't read modelines 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 backupdir=$XDG_CACHE_HOME/vim// set undofile " persistent undo history -set undodir=$XDG_CACHE_HOME/vim +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 directory=$XDG_CACHE_HOME/vim,.,/var/tmp +set noswapfile +set directory=$XDG_CACHE_HOME/vim// " command line editing {{{2 -set history=500 " how many command lines are remembered -set wildmode=longest:full,full " specifies how command line completion works +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 @@ -282,6 +195,184 @@ set viminfo='100,<50,s10,h,n$XDG_CACHE_HOME/vim/viminfo " viminfo defaults but s 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 + +" auto source vimrc when saved {{{2 +augroup source_vimrc + au! + autocmd bufwritepost vimrc source $MYVIMRC +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 + +" 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 zMzxzz15 + +" edit vimrc in new tab +nmap ev :tabedit $MYVIMRC + +map :ls:b + +nnoremap w +nnoremap W + +"xterm mouse with middleclick paste +nnoremap i +vnoremap s + +" fix legacy vi inconsistency +map Y y$ + +" allow repeat operator on visual +vnoremap . :normal . + +" add line without changing position or leaving mode +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 + +" allow undoing in insert-mode +inoremap u +inoremap u + +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 + +" space will toggle current fold in normal mode +nnoremap za +" create folds around visual selection +vnoremap zf + +autocmd BufWinLeave *.* mkview +autocmd BufWinEnter *.* silent loadview + +" save with sudo +cnoremap w!! w !sudo tee % > /dev/null + " plugins {{{1 " ag {{{2 let g:AgSmartCase = 1 @@ -293,16 +384,9 @@ let g:airline_detect_whitespace=2 let g:airline#extensions#tabline#enabled = 1 let g:airline_powerline_fonts = 1 -" GoldenView {{{2 -"let g:goldenview__enable_default_mapping = 0 -"nmap GoldenViewSplit -"nmap GoldenViewNext -"nmap GoldenViewPrevious -"nmap GoldenViewSwitchMain -"nmap GoldenViewPrevious - " Gundo {{{2 nnoremap :GundoToggle + " fugitive {{{2 nmap dd :tab split \| Gdiff \| wincmd h " delete fugitive buffers when closed @@ -318,7 +402,7 @@ nnoremap gw :Gwrite nmap e :NERDTreeToggle nmap :NERDTreeToggle " to open files/dirs -let NERDTreeMapActivateNode='' +let NERDTreeMapActivateNode='l' " close vim if only NERDTree is open autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif @@ -362,14 +446,8 @@ let g:tex_flavor='latex' let g:Tex_DefaultTargetFormat='pdf' let g:Tex_MultipleCompileFormats='pdf' -" " vim-viewdoc {{{2 -" let g:no_viewdoc_maps = 1 -" nnoremap K :call ViewDoc('doc', '') " functions {{{1 -" auto source vimrc when saved -autocmd bufwritepost vimrc source $MYVIMRC -nmap v :tabedit $MYVIMRC " Convenient command to see the difference between the current buffer and the " file it was loaded from, thus the changes you made. @@ -378,3 +456,51 @@ 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= + +" Toggle line numbers {{{2 +function! g:ToggleNumber() + if !exists("b:relanum") + let b:relanum=1 + endif + if &l:number + let b:relanum = &relativenumber + setlocal nonumber norelativenumber + else + let &l:relativenumber = b:relanum + setlocal number + endif +endfunction +nnoremap n :call g:ToggleNumber() +nnoremap N :setlocal relativenumber! +