X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/58777dce33c8872a464c857e1afba7a417c08b61..7df7fe859d85196c5931f5d809edcb2bc4435033:/vimrc diff --git a/vimrc b/vimrc index b5a89c9..5ed5e5b 100644 --- a/vimrc +++ b/vimrc @@ -1,63 +1,225 @@ -" All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just -" /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime -" you can find below. If you wish to change any of those settings, you should -" do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten -" everytime an upgrade of the vim packages is performed. It is recommended to -" make changes after sourcing debian.vim since it alters the value of the -" 'compatible' option. - -" This line should not be removed as it ensures that various options are -" properly set to work with the Vim-related packages available in Debian. -runtime! debian.vim - -" Uncomment the next line to make Vim more Vi-compatible -" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous -" options, so any other options should be set AFTER setting 'compatible'. -"set compatible - -" Vim5 and later versions support syntax highlighting. Uncommenting the -" following enables syntax highlighting by default. -if has("syntax") - syntax on +" My vimrc file. +" +" Maintainer: Samir Benmendil +" + +if v:progname =~? "evim" + finish endif -" Ask what to do when closing unsaved documents -set confirm +" Use Vim settings, rather than Vi settings (much better!). +" This must be first, because it changes other options as a side effect. +set nocompatible -" If using a dark background within the editing area and syntax highlighting -" turn on this option as well -set background=dark +" pathogen.vim runtime path manipulation +silent! call pathogen#infect() -" Uncomment the following to have Vim jump to the last position when -" reopening a file -if has("autocmd") - au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif +" search {{{ +set incsearch +set ignorecase +set smartcase +set hlsearch +nmap q :nohl +" }}} + +" NERDTree {{{ +" 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 {{{ +let g:airline#extensions#tabline#enabled = 1 +" }}} + +" tabbing {{{ +: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 +" }}} + +" backup {{{ +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 +" }}} -" Uncomment the following to have Vim load indentation rules and plugins -" according to the detected filetype. -if has("autocmd") - filetype plugin indent on +" appearance {{{ +set background=dark " Dark background, d'uh! +set number " show some linenumbers +set showmatch " Show matching brackets. +set showbreak=▒▒ " show these chars for wrapped lines +set list listchars=tab:»·,trail:· " show these chars for tabs and trailing spaces +" }}} + +" misc options {{{ +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 backspace=indent,eol,start " allow backspacing over everything in insert mode + +set viminfo='100,<50,s10,h,n~/.vim/viminfo " viminfo defaults but save file in .vim +" }}} + +" tabs {{{ +set softtabstop=4 +set shiftwidth=4 +set expandtab +" }}} + +" misc bindings {{{ +" 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 + +" Press `` to toggle insert and replace mode (no key on Mac keyboard) +imap `` +" }}} + +" paste toggle {{{ +nmap :set paste! paste? +imap :set paste! +vmap :set paste!gv +set pastetoggle= +" }}} + +" mouse {{{ +" 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 +" }}} -" 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) - -" Source a global configuration file if available -if filereadable("/etc/vim/vimrc.local") - source /etc/vim/vimrc.local +" syntax {{{ +" 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 +" }}} -" expand tab -set softtabstop=4 -set shiftwidth=4 -set expandtab -set nowrap +" autocmd {{{ +" 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). + " 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 + + augroup END +else + set autoindent " always set autoindenting on +endif " has("autocmd") }}} + +" DiffOrig {{{ +" 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 +" }}} + +" fold {{{ +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) " {{{ +" 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 }}}