]> git.rmz.io Git - dotfiles.git/blobdiff - vimrc
add c-p.org/bugs
[dotfiles.git] / vimrc
diff --git a/vimrc b/vimrc
index b5a89c902c2423db6c75803eba0c3fbc3ff944f9..5ed5e5bc48f306e0048ba6a5e50ca5957f6876c1 100644 (file)
--- a/vimrc
+++ b/vimrc
-" 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 <samir.benmendil[at]gmail[dot]com>
+"
+
+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 <Leader>q :nohl<CR>
+" }}}
+
+" NERDTree {{{
+" open/close NERDTree with \e
+nmap <Leader>e :NERDTreeToggle<CR>
+" <space> to open files/dirs
+let NERDTreeMapActivateNode='<space>'
+" 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 <Leader>b :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
+:nmap <Leader>B :set expandtab tabstop=8 shiftwidth=8 softtabstop=4<CR>
+:nmap <Leader>M :set noexpandtab tabstop=8 softtabstop=4 shiftwidth=4<CR>
+:nmap <Leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>
+" }}}
+
+" 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 <C-U> <C-G>u<C-U>
+
+" Press `` to toggle insert and replace mode (no <Insert> key on Mac keyboard)
+imap `` <Insert>
+" }}}
+
+" paste toggle {{{
+nmap <F11> :set paste! paste?<CR>
+imap <F11> <C-o>:set paste!<CR>
+vmap <F11> <Esc>:set paste!<CR>gv
+set pastetoggle=<F11>
+" }}}
+
+" mouse {{{
+" In many terminal emulators the mouse works just fine, thus enable it.
+if has('mouse')
+  "xterm mouse with middleclick paste
+  nnoremap <MiddleMouse> i<MiddleMouse>
+  vnoremap <MiddleMouse> s<MiddleMouse>
+  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 <silent> <Space> @=(foldlevel('.')?'za':"\<Space>")<CR>
+vnoremap <Space> 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 <silent> [l :call NextIndent(0, 0, 0, 1)<CR>
+nnoremap <silent> ]l :call NextIndent(0, 1, 0, 1)<CR>
+nnoremap <silent> [L :call NextIndent(0, 0, 1, 1)<CR>
+nnoremap <silent> ]L :call NextIndent(0, 1, 1, 1)<CR>
+vnoremap <silent> [l <Esc>:call NextIndent(0, 0, 0, 1)<CR>m'gv''
+vnoremap <silent> ]l <Esc>:call NextIndent(0, 1, 0, 1)<CR>m'gv''
+vnoremap <silent> [L <Esc>:call NextIndent(0, 0, 1, 1)<CR>m'gv''
+vnoremap <silent> ]L <Esc>:call NextIndent(0, 1, 1, 1)<CR>m'gv''
+onoremap <silent> [l :call NextIndent(0, 0, 0, 1)<CR>
+onoremap <silent> ]l :call NextIndent(0, 1, 0, 1)<CR>
+onoremap <silent> [L :call NextIndent(1, 0, 1, 1)<CR>
+onoremap <silent> ]L :call NextIndent(1, 1, 1, 1)<CR>
+" end of jump indent }}}