""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " -> General """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Sets how many lines of history VIM has to remember set history=500 " Enable filetype plugins filetype plugin on "filetype indent on " Set to auto read when a file is changed from the outside set autoread au FocusGained,BufEnter * checktime " With a map leader it's possible to do extra key combinations " like w saves the current file "let mapleader = "," " :W sudo saves the file " (useful for handling the permission-denied error) command! W execute 'w !sudo tee % > /dev/null' edit! " Limit what can be done in the VIMRC set secure """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " -> VIM user interface """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Set 7 lines to the cursor - when moving vertically using j/k set so=7 " Avoid garbled characters in Chinese language windows OS let $LANG='en' set langmenu=en source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim " Turn on the Wild menu set wildmenu " Display wildmenu with specific options set wildmode=list:longest,full " Ignore compiled files set wildignore=*.o,*~,*.pyc if has("win16") || has("win32") set wildignore+=.git\*,.hg\*,.svn\* else set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store endif "Always show current position set ruler " Height of the command bar set cmdheight=1 " A buffer becomes hidden when it is abandoned set hid " Configure backspace so it acts as it should act set backspace=eol,start,indent set whichwrap+=<,>,h,l " Ignore case when searching set ignorecase " When searching try to be smart about cases set smartcase " Highlight search results set hlsearch " Makes search act like search in modern browsers set incsearch " Don't redraw while executing macros (good performance config) set lazyredraw " For regular expressions turn magic on set magic " Show matching brackets when text indicator is over them set showmatch " How many tenths of a second to blink when matching brackets set mat=2 " No annoying sound on errors set noerrorbells set novisualbell set t_vb= set tm=500 " time waited for key press(es) to complete. It makes for a faster key response set ttyfast set ttimeout set ttimeoutlen=50 " Properly disable sound on errors on MacVim if has("gui_macvim") autocmd GUIEnter * set vb t_vb= endif " Add a bit extra margin to the left set foldcolumn=1 " new splits will be at the bottom or to the right side of the screen set splitbelow set splitright set showcmd " Show previous commands set showmode " Display NORMAL/INSERT/VISUAL mode below statusline set number " We like line numbers """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " -> Colors and Fonts """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Disable syntax for now syntax off "colorscheme peachpuff set background=dark set t_Co=0 " Set utf8 as standard encoding and en_US as the standard language set encoding=utf8 " Use Unix as the standard file type set ffs=unix,dos,mac set colorcolumn=250 "Disable formatting past 250 chars """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " -> Files, backups and undo """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Turn backup off, since most stuff is in SVN, git etc. anyway... set nobackup set nowb set noswapfile set shortmess+=I """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " -> Text, tab and indent related """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Use spaces instead of tabs set expandtab " Be smart when using tabs ;) set smarttab " 1 tab == 8 spaces set shiftwidth=8 set tabstop=8 " Linebreak on 500 characters set lbr set tw=500 set ai "Auto indent set si "Smart indent set wrap "Wrap lines set shiftround " When shifting lines, round indentation to nearest shiftwidth """""""""""""""""""""""""""""" " -> Status line """""""""""""""""""""""""""""" " Always show the status line set laststatus=2 " Statusline definition set statusline= set statusline+=%7*\[%n] "buffernr set statusline+=%1*\ %<%t\ "File+path set statusline+=%3*\ %y\ "FileType set statusline+=%4*\ %{''.(&fenc!=''?&fenc:&enc).''} "Encoding set statusline+=%5*\ %{(&bomb?\",BOM\":\"\")}\ "Encoding2 set statusline+=%6*\ %{&ff}\ "FileFormat (dos/unix..) set statusline+=%7*\ %=\ row:%l/%L\ (%03p%%)\ "Rownumber/total (%) set statusline+=%9*\ col:%03c\ "Colnr set statusline+=%0*\ %m%r%w\ "Modified? Readonly? Top/bot. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " -> Misc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Remove the Windows ^M - when the encodings gets messed up noremap m mmHmt:%s///ge'tzt'm " Toggle paste mode on and off map pp :setlocal paste! set pastetoggle= " Disable mouse automatic mode set mouse-=a " Enable line numbers toggle noremap n :set invnumber "inoremap n :set invnumber " jump to the last position when reopening a file " if has("autocmd") " au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif " endif """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " -> Helper functions """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Trim whitespace at end of lines nnoremap s :%s/\s\+$//e """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " -> General Code Settings """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Fix weird JSON quotation issue let g:vim_json_syntax_conceal = 0 " Code folding set foldmethod=syntax set foldlevel=1 set foldnestmax=1 " -- Text wrap and expand spaces for yaml, css, js, etc if has("autocmd") " Syntax of these languages is fussy over tabs Vs spaces autocmd FileType make setlocal ts=8 sts=8 sw=8 noexpandtab autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab " Customisations based on house-style (arbitrary) autocmd FileType html setlocal ts=2 sts=2 sw=2 expandtab autocmd FileType css setlocal ts=2 sts=2 sw=2 expandtab autocmd FileType javascript setlocal ts=4 sts=4 sw=4 noexpandtab " Treat .rss files as XML autocmd BufNewFile,BufRead *.rss setfiletype xml endif " Persistent Undo if has('persistent_undo') set undolevels=5000 set undodir=$HOME/.vim_undofiles set undofile endif