" My vimrc file.
"
-" Maintainer: Samir Benmendil <ram-z@chakra-project.org>
+" Maintainer: Samir Benmendil <samir.benmendil[at]gmail[dot]com>
"
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
+" pathogen.vim runtime path manipulation
+silent! call pathogen#infect()
+" 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
-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")
+" }}}
+
+" 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
" so that you can undo CTRL-U after inserting a line break.
inoremap <C-U> <C-G>u<C-U>
-"paste toggle
+" 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>
+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
+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
+" }}}
+" 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
- set hlsearch
endif
+" }}}
+" 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.
\ endif
augroup END
-
else
-
set autoindent " always set autoindenting on
+endif " has("autocmd") }}}
-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.
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=<F11>
-" 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 <Esc>
-" Press `` to toggle insert and replace mode (no <Insert> key on Mac keyboard)
-imap `` <Insert>
-
-" fold between {{{ }}}
+" fold {{{
set foldmethod=marker
set foldlevelstart=99
" space will toggle current fold in normal mode, if not in a fold, normal
" 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.
"
" 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('$')
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
+" end of jump indent }}}