" Use tpope's pathogen plugin to manage all other plugins call pathogen#infect() "Use Vim settings, rather then Vi settings (much better!). "This must be first, because it changes other options as a side effect. set nocompatible " Line numbers are good set number " I don't like code folding set nofoldenable "allow backspacing over everything in insert mode set backspace=indent,eol,start "store lots of :cmdline history set history=1000 set showcmd "show incomplete cmds down the bottom set showmode "show current mode down the bottom set incsearch "find the next match as we type the search set hlsearch "hilight searches by default set ignorecase "ignore case when searching set nowrap "dont wrap lines set linebreak "wrap lines at convenient points " swapfiles are lame. we have git set noswapfile set nobackup set nowb " Better omnicomplete options (use Ctrl-P, Ctrl-N or Tab) if v:version >= 700 set omnifunc=syntaxcomplete#Complete " override built-in C omnicomplete with C++ OmniCppComplete plugin let OmniCpp_GlobalScopeSearch = 1 let OmniCpp_DisplayMode = 1 let OmniCpp_ShowScopeInAbbr = 0 "do not show namespace in pop-up let OmniCpp_ShowPrototypeInAbbr = 1 "show prototype in pop-up let OmniCpp_ShowAccess = 1 "show access in pop-up let OmniCpp_SelectFirstItem = 1 "select first item in pop-up set completeopt=menuone,menu,longest endif " persistent undos - undo after you re-open the file " but this gives warnings under command line vim " use only in macvim if has('gui_running') set undodir=~/.vim/backups set undofile endif " indent set ai " autoindent set si " smart indent set smarttab "statusline setup set statusline+=%#warningmsg# set statusline+=%{SyntasticStatuslineFlag()} set statusline+=%* set statusline=%#warningmsg# set statusline+=%f set statusline+=%{fugitive#statusline()} set statusline+=%m "modified flag "display a warning if &paste is set set statusline+=%#error# set statusline+=%{&paste?'[paste]':''} set statusline+=%* set statusline+=%= "left/right separator set statusline+=%{StatuslineCurrentHighlight()}\ \ "current highlight set statusline+=%c: "cursor column set statusline+=%l/%L "cursor line/total lines "set statusline+=\ %P "percent through file set laststatus=2 "return the syntax highlight group under the cursor '' function! StatuslineCurrentHighlight() let name = synIDattr(synID(line('.'),col('.'),1),'name') if name == '' return '' else return '[' . name . ']' endif endfunction "indent settings set shiftwidth=2 set softtabstop=2 set tabstop=2 set expandtab set autoindent "folding settings set foldmethod=indent "fold based on indent set foldnestmax=3 "deepest fold is 3 levels set nofoldenable "dont fold by default "make cmdline tab completion similar to bash set wildmode=list:longest set wildmenu "enable ctrl-n and ctrl-p to scroll thru matches set wildignore=*.o,*.obj,*~ "stuff to ignore when tab completing "display tabs and trailing spaces set list set listchars=tab:\ \ ,extends:>,precedes:< set formatoptions-=o "dont continue comments when pushing o/O "vertical/horizontal scroll off settings set scrolloff=3 set sidescrolloff=7 set sidescroll=1 "load ftplugins and indent files filetype plugin on filetype indent on "turn on syntax highlighting syntax on "some stuff to get the mouse going in term set mouse=a set ttymouse=xterm2 "hide buffers when not displayed set hidden " Make it beautiful - colors and fonts if has("gui_running") "tell the term has 256 colors set t_Co=256 if has("gui_gnome") set term=gnome-256color colorscheme desert else colorscheme railscasts set guitablabel=%M%t set lines=60 set columns=190 endif if has("gui_mac") || has("gui_macvim") set guifont=Monaco:h17 endif if has("gui_win32") || has("gui_win32s") set guifont=Consolas:h12 set enc=utf-8 endif else "dont load csapprox if we no gui support - silences an annoying warning let g:CSApprox_loaded = 1 endif "make Y consistent with C and D nnoremap Y y$ "mark syntax errors with :signs let g:syntastic_enable_signs=1 "automatically jump to the error when saving the file let g:syntastic_auto_jump=1 "show the error list automatically let g:syntastic_auto_loc_list=1 "don't care about warnings let g:syntastic_quiet_warnings=1 "jump to last cursor position when opening a file "dont do it when writing a commit log entry autocmd BufReadPost * call SetCursorPosition() function! SetCursorPosition() if &filetype !~ 'commit\c' if line("'\"") > 0 && line("'\"") <= line("$") exe "normal! g`\"" normal! zz endif end endfunction " Open the project tree and expose current file in the nerdtree with Ctrl-\ " the winfixwidth call ensures that nerdtree will not resize " if we create or remove other windows nnoremap :call FindInNERDTree():set winfixwidth " move up/down quickly by using Ctrl-j, Ctrl-k " which will move us around by functions nnoremap } nnoremap { " Move between split windows by using the four directions H, L, I, M " (note that I use I and M instead of J and K because J already does " line joins and K is mapped to GitGrep the current word nnoremap H h nnoremap L l nnoremap I k nnoremap M j " Create window splits easier. The default " way is Ctrl-w,v and Ctrl-w,s. I remap " this to vv and ss nnoremap vv v nnoremap ss s " Remap Q to close a window nnoremap Q c " Use \Q to kill the buffer entirely nnoremap Q :bw "open the taglist (method browser) using T nnoremap T :TlistToggle " taglist defaults let Tlist_Auto_Highlight_Tag=0 let Tlist_Auto_Open=0 let Tlist_Compact_Format = 1 let Tlist_Exist_OnlyWindow = 1 let Tlist_WinWidth = 40 let Tlist_GainFocus_On_ToggleOpen = 1 let Tlist_Show_Menu = 1 let Tlist_Use_Right_Window = 1 let Tlist_Use_Horiz_Window = 0 let Tlist_Close_On_Select = 1 let Tlist_Show_One_File = 1 let Tlist_Enable_Fold_Column = 0 let Tlist_Display_Prototype = 0 " automaticaly reload files changed outside of vim set autoread " save up to 100 marks and f1 means global marks (capital letters) are enabled set viminfo='100,f1 " hit F to find the definition of the current class " this uses ctags. the standard way to get this is Ctrl-] nnoremap F "open buf explorer with B map B bv let g:bufExplorerShowRelativePath=1 " Show relative paths. let g:bufExplorerDefaultHelp=0 "toggle between last two buffers with Z (normally ctrl-shift-6) nnoremap Z "git grep the current word using K (mnemonic Kurrent) nnoremap K :GitGrep "open up a git grep line, with a quote started for the search "mnemonic: the letter O looks like a magnifying glass or goggles (search) nnoremap O :GitGrep " " create <%= foo %> erb tags using Ctrl-k in edit mode imap <%= %>3hi " create <%= foo %> erb tags using Ctrl-j in edit mode imap <% %>2hi imap _ " hit \t to run current test nmap t :RunRubyFocusedContext " set up automatic ctags let Tlist_Ctags_Cmd='/opt/local/bin/ctags' source ~/.vim/plugin/autotag.vim " Run the current file in a ConqueTerm, great for ruby tests let g:ConqueTerm_InsertOnEnter = 0 let g:ConqueTerm_CWInsert = 1 let g:ConqueTerm_Color = 2 " Open up a variety of commands in the ConqueTerm nmap r :call RunRubyCurrentFileConque() nmap S :call RunRspecCurrentFileConque() nmap R :call RunRakeConque() nmap c :execute 'ConqueTermSplit script/console --irb=pry' nmap i :execute 'ConqueTermSplit pry' nmap b :execute 'ConqueTermSplit /bin/bash --login' function RunRubyCurrentFileConque() execute "ConqueTermSplit ruby" bufname('%') endfunction function RunRspecCurrentFileConque() execute "ConqueTermSplit rspec" bufname('%') " --color --format doc" endfunction function RunRakeConque() execute "ConqueTermSplit rake" endfunction let g:ConqueTerm_SendVisKey = 'e' " prevent auto insert mode, which is helpful when using conque " term for running tests autocmd WinEnter * stopinsert " Disable the scrollbars (NERDTree) set guioptions-=r set guioptions-=L " Disable the macvim toolbar set guioptions-=T " Set up nicer coloring hi LineNr guifg=#505050 guibg=#101010 hi Normal guifg=White guibg=#101010 hi StatusLine guibg=#111111 guifg=#313131 hi Search guibg=#333333 guifg=#E05133 hi StatusLineNC guibg=#111111 guifg=#313131 hi VertSplit guibg=#101010 guifg=#313131 hi treeDir guifg=#5285b4 hi Directory guifg=#5285b4 hi NonText guifg=#101010 "hide the blank line ~ marks hi rubyClass guifg=lightgreen gui=bold " show this many lines around what i'm editing set so=8 " Find references to the currently opened partial (file) " by pressing P in command mode function GitGrepCurrentPartial() " :call GitGrep(substitute(substitute(expand('%<'),'.*\/_','','g'),'.html','','g')) :call GitGrep(substitute(substitute(substitute(expand('%<'),'.*\/','','g'), '$_','','g'),'.html','','g')) endfunction command! GitGrepCurrentPartial call GitGrepCurrentPartial() nnoremap P :GitGrepCurrentPartial " Remember cursor position and etc when you leave windows au BufWinLeave * silent! mkview "make vim save view (state) (folds, cursor, etc) au BufWinEnter * silent! loadview "make vim load view (state) (folds, cursorrsor, etc) " Make nerdtree look nice let NERDTreeMinimalUI = 1 let NERDTreeDirArrows = 1 " Don't have to use Shift to get into command mode, just hit semicolon nnoremap ; : "Clear current search highlight by double tapping // nmap // :nohlsearch " Use EasyMotion by double tapping comma nmap ,, \\w " User LustyJuggler buffer switcher by hitting S " and then using the homerow keys to select the file " double tap the home row key to go to the file or hit " once to just select it in the juggler nmap S \lj let g:LustyJugglerSuppressRubyWarning = 1 let g:LustyJugglerAltTabMode = 1 " Show me all my marks (using showmarks plugin) nnoremap M :PreviewMarks " copy current filename into system clipboard - mnemonic: (c)urrent(f)ilename " this is helpful to paste someone the path you're looking at nnoremap cf :let @* = expand("%:p")