" Use pathogen to manage our runtime files autocmd! call pathogen#infect('bundles/{}') filetype plugin indent on syntax on " Basic vim setup set tabstop=4 set shiftwidth=4 set expandtab set smarttab set autoindent set smartindent set backspace=indent,eol,start set nowrap set wrapscan set incsearch " incremental search (search as you type) set number " line numbering set ruler " setup and show ruler set textwidth=78 set colorcolumn=80 set formatoptions=qrn1 set cursorline " highlight cursorline set showmode " show mode in status bar set showcmd set showmatch set cmdheight=2 set ignorecase smartcase set showtabline=2 set numberwidth=5 set winwidth=79 set switchbuf=useopen " Show . char for trailing whitespace " set list " set listchars=trail:. " set color scheme set t_Co=256 "colorscheme wombat256mod set background=dark let g:solarized_termcolors=256 colorscheme solarized " set yanks to go to the clipboard if $TMUX == '' set clipboard+=unnamed endif " remap the leader to something more friendly let mapleader = "," " time to wait after ESC or leader immediate mode command set timeout timeoutlen=1000 ttimeoutlen=150 " reload and edit vimrc nnoremap <leader>sv :source $MYVIMRC<CR> nnoremap <leader>ev :vsplit $MYVIMRC<CR> " edit bundle config nnoremap <leader>eb :vsplit $HOME/.vim/update_bundles<CR> " save buffer as root nnoremap <leader>sr :w !sudo tee % > /dev/null<CR> " setup easy current buffer path expansion -- stolen from practical vim cnoremap <expr> %% getcmdtype() == ':' ? expand('%:h') . '/' : '%%' " enable syntax autocompletion set omnifunc=syntaxcomplete#Complete set completeopt=menu,preview """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " CUSTOM AUTOCMDS """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" augroup vimrcEx " Clear all autocmds in the group autocmd! autocmd FileType text setlocal textwidth=78 " Jump to last cursor position unless it's invalid or in an event handler autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal g`\"" | \ endif " make twig files use jinja syntax rules autocmd BufRead,BufNewFile *.twig set filetype=htmljinja " for autoindent with two spaces, always expand tabs autocmd FileType ruby,haml,sh,zsh,bash,eruby,yaml,html,nasm,javascript,sass,cucumber set ai sw=2 sts=2 et autocmd FileType python set sw=4 sts=4 et autocmd Filetype make setlocal noexpandtab autocmd BufRead,BufNewFile *.sass set filetype=sass autocmd BufRead,BufNewFile *.s set filetype=nasm autocmd BufRead,BufNewFile *.asm set filetype=nasm autocmd BufRead *.mkd set ai formatoptions=tcroqn2 comments=n:> autocmd BufRead *.markdown set ai formatoptions=tcroqn2 comments=n:> " Leave the return key alone when in command line windows, since it's used " to run commands there. autocmd! CmdwinEnter * :unmap <CR> autocmd! CmdwinLeave * :call MapCR() " for PHP autocmd FileType php set omnifunc=phpcomplete#CompletePHP let php_sql_query=1 let php_htmlInStrings=1 " for Ruby autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete autocmd FileType ruby,eruby let g:rubycomplete_buffer_loading = 1 autocmd FileType ruby,eruby let g:rubycomplete_rails = 1 autocmd FileType ruby,eruby let g:rubycomplete_classes_in_global = 1 " format and indent xml using xmllint autocmd FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null augroup END """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " MULTIPURPOSE TAB KEY " Indent if we're at the beginning of a line. Else, do completion. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! InsertTabWrapper() let col = col('.') - 1 if !col || getline('.')[col - 1] !~ '\k' return "\<tab>" else return "\<c-p>" endif endfunction inoremap <tab> <c-r>=InsertTabWrapper()<CR> inoremap <s-tab> <c-n> """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " RENAME CURRENT FILE """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! RenameFile() let old_name = expand('%') let new_name = input('New file name: ', expand('%'), 'file') if new_name != '' && new_name != old_name exec ':saveas ' . new_name exec ':silent !rm ' . old_name redraw! endif endfunction map <leader>n :call RenameFile()<CR> " Insert/delete line numbers nnoremap <leader>ln :% s/^/\=line('.'). '. ' /<CR> nnoremap <leader>dln :% s/^[0-9]*. //<CR> " Line numbering toggle map <leader>gn :set invnu<CR> " Nerd tree setup nmap <silent> <c-n> :NERDTreeToggle<CR> " Set up nice buffer switching set hidden " maybe I want to switch buffers without saving nnoremap <leader><leader> <c-^> " Setup wildmenu set wildchar=<Tab> wildmenu wildmode=full set wildcharm=<C-Z> set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*cache* " Use ctrl-motion to switch between windows nnoremap <silent> <C-h> <C-w>h nnoremap <silent> <C-j> <C-w>j nnoremap <silent> <C-k> <C-w>k nnoremap <silent> <C-l> <C-w>l " Open up a new vertically split window nnoremap <silent> <leader>nv :botright vnew<CR> " CTags setup nnoremap <silent> <F8> :TlistToggle<CR> set tags=tags;$HOME " this will look in the current directory for 'tags', and work up until $HOME let Tlist_php_settings = 'php;c:class;f:function;d:constant' let Tlist_File_Fold_Auto_Close = 1 let Tlist_WinWidth = 40 let Tlist_Close_on_Select = 1 let Tlist_Exit_OnlyWindow = 1 " setup python path if executable('/usr/local/bin/python3') let g:python3_host_prog='/usr/local/bin/python3' endif " setup ruby path if executable('/usr/local/opt/ruby/bin/ruby') let g:ruby_host_prog='/usr/local/opt/ruby/bin/ruby' endif " Use fuzzyfinder if executable('/usr/local/bin/fzf') set rtp+=/usr/local/opt/fzf endif " Air Powerline setup set laststatus=2 let g:airline_powerline_fonts = 1 let g:airline_theme = 'solarized' let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#tabline#fnamemod = ':t' " gui options :set guioptions-=m "remove menu bar :set guioptions-=T "remove toolbar :set guioptions-=r "remove right-hand scroll bar :set guifont=MesloLGS\ Nerd\ Font\ Mono:h16 " sql pretty vnoremap <Leader>rp :s/\<update\>\\|\<select\>\\|\<from\>\\|\<where>\\|\<left join\>\\|\<inner join\>\\|\<group by\>\\|\<order by\>/\r\U&/ge<cr><esc> silent! py3 pass