" vim settings filetype off set rtp+=~/.vim/bundle/vundle/ call vundle#rc() " let vundle manage vundle Bundle 'gmarik/vundle' " my vim plugins Bundle 'kien/ctrlp.vim' Bundle 'scrooloose/nerdtree' Bundle 'mileszs/ack.vim' Bundle 'scrooloose/syntastic' Bundle 'Raimondi/delimitMate' Bundle 'tpope/vim-commentary' Bundle 'tpope/vim-endwise' Bundle 'tpope/vim-fugitive' Bundle 'othree/html5.vim' Bundle 'pangloss/vim-javascript' Bundle 'itspriddle/vim-jquery' Bundle 'tpope/vim-markdown' Bundle 'mmalecki/vim-node.js' Bundle 'Lokaltog/vim-powerline' Bundle 'tpope/vim-ragtag' Bundle 'tpope/vim-surround' Bundle 'sjl/vitality.vim' Bundle 'duff/vim-scratch' Bundle 'cakebaker/scss-syntax.vim' Bundle 'kchmck/vim-coffee-script' Bundle 'groenewege/vim-less' Bundle 'nono/vim-handlebars' Bundle 'tsaleh/vim-matchit' Bundle 'benmills/vimux' Bundle 'mattn/zencoding-vim' filetype plugin indent on """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => General """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" """" Abbreviations abbr funciton function abbr teh the "set winwidth=120 set nocompatible " not compatible with vi set autoread " detect when a file is changed " make backspace behave in a sane manner set backspace=indent,eol,start " set a map leader for more key combos let mapleader = "," let g:mapleader = "," " change history to 1000 set history=10000 " Tab control set smarttab set expandtab set shiftwidth=4 set tabstop=4 set softtabstop=4 " faster redrawing set ttyfast " allow matching of if/end, etc. with % " runtime macros/matchit.vim " highlight conflicts match ErrorMsg '^\(<\|=\|>\)\{7\}\([^=].\+\)\?$' " Enable file type detection and do language dependent indenting filetype plugin indent on " file type specific settings if has("autocmd") autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab autocmd FileType make setlocal ts=8 sts=8 sw=8 noexpandtab autocmd FileType ruby setlocal ts=2 sts=2 sw=2 expandtab autocmd FileType html setlocal ts=4 sts=4 sw=4 expandtab autocmd FileType jade setlocal ts=2 sts=2 sw=2 noexpandtab "autocmd WinEnter * setlocal cursorline "autocmd WinLeave * setlocal nocursorline " automatically resize panes on resize autocmd VimResized * exe "normal! \=" autocmd BufWritePost .vimrc source $MYVIMRC " save all files on focus lost, ignoring warnings about untitled buffers autocmd FocusLost * silent! wa autocmd BufNewFile,BufRead *.json set filetype=javascript autocmd BufNewFile,BufRead *.ejs set filetype=html endif " code folding settings set foldmethod=syntax " fold based on indent set foldnestmax=10 " deepest fold is 10 levels set nofoldenable " don't fold by default set foldlevel=1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => User Interface """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" set so=7 " set 7 lines to the cursors - when moving vertical set wildmenu " enhanced command line completion set hidden " current buffer can be put into background set showcmd " show incomplete commands set noshowmode " don't show which mode disabled for PowerLine set wildmode=list:longest " complete files like a shell set scrolloff=3 " lines of text around cursor set shell=/bin/zsh set ruler " show postiion in file set cmdheight=1 " command bar height set title " set terminal title " Searching set ignorecase " case insensitive searching set smartcase " case-sensitive if expresson contains a capital letter set hlsearch set incsearch " set incremental search, like modern browsers set nolazyredraw " don't redraw while executing macros set magic " Set magic on, for regex set showmatch " show matching braces set mat=2 " how many tenths of a second to blink " switch to line when editing and block when not " let cursor_to_bar = "\]50;CursorShape=1\x7" " let cursor_to_block = "\]50;CursorShape=0\x7" " let &t_SI = cursor_to_bar " let &t_EI = cursor_to_block " error bells set noerrorbells set visualbell set t_vb= set tm=500 " switch syntax highlighting on syntax on set background=dark colorscheme Tomorrow-Night-Bright " set number " show line numbers set relativenumber " show relative line numbers set wrap " turn on line wrapping "set nowrap "turn off line wrapping set wrapmargin=8 " wrap lines when coming within n characters from side set linebreak " set soft wrapping set showbreak=… " show ellipsis at breaking set autoindent " automatically set indent of new line set encoding=utf8 set t_Co=256 " Explicitly tell vim that the terminal supports 256 colors" try lang en_US catch endtry """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Files, backups, and undo """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" "set nobackup "set nowritebackup "set noswapfile set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => StatusLine """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" set laststatus=2 " show the satus line all the time " the status line is set by the powerline plugin """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Mappings """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " General mappings/shortcuts for functionality " Additional, plugin-specific mappings are located under " the plugins section " " nnoremap K :q " remap esc and disable to force learning inoremap jk " inoremap " remove extra whitespace nmap :%s/\s\+$ nmap , :w " set paste toggle set pastetoggle= " toggle paste map v :set paste! " edit ~/.vimrc map e :e! ~/.vimrc " clear highlighted search noremap :set hlsearch! hlsearch? " toggle invisible characters set invlist set listchars=tab:▸\ ,eol:¬,trail:⋅,extends:❯,precedes:❮ set showbreak=↪ nmap l :set list! " Textmate style indentation vmap [ ] >gv nmap [ << nmap ] >> " buffer shortcuts nmap n :bn " go to next buffer nmap p :bp " go to prev buffer nmap q :bd " close the current buffer " switch between current and last buffer nmap . " enable . command in visual mode vnoremap . :normal . " Window movement shortcuts " move to the window in the direction shown, or create a new window function! WinMove(key) let t:curwin = winnr() exec "wincmd ".a:key if (t:curwin == winnr()) if (match(a:key,'[jk]')) wincmd v else wincmd s endif exec "wincmd ".a:key endif endfunction map :call WinMove('h') map :call WinMove('j') map :call WinMove('k') map :call WinMove('l') " nnoremap :vertical resize -5 " nnoremap :resize +5 " nnoremap :resize -5 " nnoremap :vertical resize +5 map wc :wincmd q " equalize windows map = = " Edit Shortcuts " these automatically populate the current filepath cnoremap %% =expand('%:h').'/' map ew :e %% map es :sp %% map ev :vsp %% map et :tabe %% " toggle cursor line nnoremap i :set cursorline! " scroll the viewport faster nnoremap 3 nnoremap 3 " moving up and down work as you would expect nnoremap j gj nnoremap k gk function! ToggleNuMode() if (&rnu == 1) setlocal nu else setlocal rnu endif endfunction nnoremap / :call ToggleNuMode() " find out what syntax stack a statement belongs to nmap s :call SynStack() function SynStack() if !exists("*synstack") return endif echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') endfunction function! ApplyLocalSettings(dirname) " convert windows paths to unix style let l:curDir = substitute(a:dirname, "\\", "/", "g") " walk to the top of the dir tree let l:parentDir = strpart(l:curDir, 0, strridx(l:curDir, "/")) if isdirectory(l:parentDir) call ApplyLocalSettings(l:parentDir) endif " now walk back down the path and source .vimsettings as you find them. " child directories can inherit from their parents let l:settingsFile = a:dirname . "/.vimrc.local" if filereadable(l:settingsFile) exec ":source" . l:settingsFile endif endfunction autocmd! BufEnter * call ApplyLocalSettings(expand(":p:h")) " smart tab completion function! Smart_TabComplete() let line = getline('.') " current line let substr = strpart(line, -1, col('.')+1) " from the start of the current " line to one character right " of the cursor let substr = matchstr(substr, "[^ \t]*$") " word till cursor if (strlen(substr)==0) " nothing to match on empty string return "\" endif let has_period = match(substr, '\.') != -1 " position of period, if any let has_slash = match(substr, '\/') != -1 " position of slash, if any if (!has_period && !has_slash) return "\\" " existing text matching elseif ( has_slash ) return "\\" " file matching else return "\\" " plugin matching endif endfunction inoremap =Smart_TabComplete() """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Plugins """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Powerline settings " must have modified font installed to enable fancy " let g:Powerline_symbols = 'fancy' " let g:Powerline_stl_path_style = 'filename' " close NERDTree after a file is opened let g:NERDTreeQuitOnOpen=1 " Toggle NERDTree nmap k :NERDTreeToggle " expand to the path of the file in the current buffer nmap y :NERDTreeFind " map fuzzyfinder (CtrlP) plugin nmap t :CtrlP nmap r :CtrlPBuffer " Fugitive Shortcuts nmap gs :Gstatus " CtrlP ignore patterns let g:ctrlp_custom_ignore = { \ 'dir': '\.git$\|node_modules$\|\.hg$\|\.svn$', \ 'file': '\.exe$\|\.so$' \ } " search the nearest ancestor that contains .git, .hg, .svn let g:ctrlp_working_path_mode = 2