" " Vim configuration file " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Useful functions " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! CleanClose() let todelbufNr = bufnr("%") let newbufNr = bufnr("#") if ((newbufNr != -1) && (newbufNr != todelbufNr) && buflisted(newbufNr)) exe "b".newbufNr else bnext endif if (bufnr("%") == todelbufNr) new endif exe "bd".todelbufNr endfunction function! GetFileSize() let size = '' let bytes = getfsize(expand('%:p')) if bytes <= 1024 let size = bytes . 'B' elseif bytes <= 1048576 let size = (bytes / 1024) . 'KB' elseif bytes <= (1073741824) let size = (bytes / 1048576) . 'MB' elseif bytes <= 1099511627776 let size = (bytes / 1073741824) . 'GB' elseif bytes <= 1125899906842624 let size = (bytes / 1099511627776) . 'TB' endif return size endfunction function! GetMode() let curmode = mode() let mode = curmode if curmode == 'n' let mode = 'NORMAL' elseif curmode == 'i' let mode = 'INSERT' elseif curmode == 'R' let mode = 'REPLACE' elseif curmode == 'v' let mode = 'VISUAL' elseif curmode == 'V' if has("multi_byte") let mode = 'V⋅LINE' else let mode = 'VLINE' endif elseif curmode == 'V' if has("multi_byte") let mode = 'V⋅BLOC' else let mode = 'VBLOC' endif endif return mode endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " General Settings " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Term settings (under tmux) if &term =~ '^screen' "tmux will send xterm-style keys when its xterm-keys option is on execute "set <xUp>=\e[1;*A" execute "set <xDown>=\e[1;*B" execute "set <xRight>=\e[1;*C" execute "set <xLeft>=\e[1;*D" endif set nocompatible "no vi compatibility set history=200 "command history size set undolevels=120 "undo levels count set autoread "notify file changes set autochdir "switch to the current file directory set clipboard+=unnamed "share system clipboard set backup "enable backups set backupdir=$HOME/tmp "backup directory set directory=$HOME/tmp "directory to place swap files in set viminfo+=n$HOME/tmp/.viminfo "viminfo path "Encoding settings if has("multi_byte") if &termencoding == "" let &termencoding = &encoding endif set encoding=utf-8 setglobal fileencoding=utf-8 set fileencodings=utf-8,default,latin1,ucs-bom endif "Syntax highlight syntax on set t_Co=256 set bg=dark """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Interface Settings " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" set title "show title set number "show line numbers set ruler "statusline for each window set visualbell t_vb= "visual beep set showcmd "show incomplete commands set confirm "raise a dialog asking what to do instead of failing "set mouse=a "enable mouse support set lazyredraw "do not redraw when running macros set ttyfast "fast terminal connection support set shortmess=a "abbreviations on status line set laststatus=2 "always statusline set statusline= set statusline+=\ %<%F\ %h%m%r%y%w if version >= 730 set statusline+=%q endif set statusline+=\ [%{GetMode()}(%n,%{mode()})] "set statusline+=\ %{fugitive#statusline()} set statusline+=%= set statusline+=[ set statusline+=%{&fileformat} set statusline+=,%{&fenc==\"\"?&enc:&fenc} set statusline+=%{(exists(\"+bomb\")\ &&\ &bomb)?\",bom\":\"\"} set statusline+=%{(exists(\"+binary\")\ &&\ &binary)?\",bin\":\"\"} set statusline+=%{&endofline==1?\",eol\":\",noeol\"} set statusline+=] set statusline+=\ %{GetFileSize()} set statusline+=\ %k\ %-14.(%l/%L,%c%V%)\ %P\ %3p%% set wildmenu "display completion menu set wildmode=list:longest,list:full "content of completion menu "ignore some extensions while completing filename "set wildignore=*.o,*.so,,*.gz,*.bz2,*.tar,*.tgz,*.tbz2,*.png,*.jpg,*.jpeg,*.gif set wildchar=<TAB> "wildcar expansion character set modeline "allow last lines of documents set vim mode set modelines=3 "number of lines to check for modelines """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Keyboard Settings " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " keep ctrl-a/ctrl-e for begining/end of line nmap <c-a> <c-o>I imap <c-a> <c-o>I vmap <c-a> <c-o>I nmap <c-e> <c-o>A imap <c-e> <c-o>A vmap <c-e> <c-o>A "reopen current file map <F5> :e!<cr> "using redraw to disable highlighted search patterns nnoremap <c-L> :nohl<cr><c-L> "map F1 to open previous buffer nmap <F1> :bp<cr> imap <F1> <ESC>:bp<cr>a "map F2 to open next buffer nmap <F2> :bn<cr> imap <F2> <ESC>:bn<cr>a imap <c-@> <c-x><c-o> nmap <c-s-left> :tabprevious<cr> nmap <c-s-right> :tabnext<cr> nmap <c-s-up> :tabnew<cr> nmap <c-s-down> :tabclose<cr> nmap <c-x> :bw<cr> nmap <c-end> :call CleanClose()<CR> nmap <F6> :vsplit<cr> nmap <F7> :split<cr> "ctrl-$arrow to cycle around splitted windows map <c-left> <c-w>h map <c-right> <c-w>l map <c-Up> <c-w>k map <c-Down> <c-w>j "ident in visual mode keep selection vmap > >gv vmap < <gv """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Editor Settings " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" set fileformats=unix,dos,mac "support all three, in this order set hidden "make possible to change buffer without saving set backspace=indent,eol,start "enhance backspacing set report=0 "agressive reporting set pastetoggle=<F11> "use <F11> to toggle between 'paste' and 'nopaste' set nostartofline "leave the cursor where it is "indent settings set autoindent set smartindent set cindent "tabs and spaces settings set expandtab "tab are spaces set tabstop=4 set shiftwidth=4 set shiftround "round indent to shiftwidth set softtabstop=4 set showmatch "brace/parenthese/bracket matching set nowrap "wrap long lines if has("multi_byte") set showbreak="…" else set showbreak="+++" endif "show some not printable chars set list if has("multi_byte") set listchars=trail:·,extends:>,precedes:<,nbsp:•,tab:▷\⋅ else set listchars=tab:>.,trail:·,extends:>,precedes:<,nbsp:% endif "search settings set hlsearch "highlight searches set incsearch "incremental searches set ignorecase "ignore case in search patterns set infercase "smart case support """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Code folding " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" set foldmethod=indent "fold based on indent set foldnestmax=10 "deepest fold is 10 levels set nofoldenable "dont fold by default set foldlevel=1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Filetypes Settings " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" filetype plugin indent on