" My vimrc file. " " Maintainer: Samir Benmendil " if v:progname =~? "evim" finish endif " TODO " organize this file, never thought it'll get this big " TODO " 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 " 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). " 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") " 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 " 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 nnoremap @=(foldlevel('.')?'za':"\") 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 " 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