" Modeline and Notes { " vim: set foldmarker={,} foldlevel=0 foldmethod=marker spell: " " This is the personal .vimrc file of Steve Francia. " While much of it is beneficial for general use, I would " recommend picking out the parts you want and understand. " " You can find me at http://spf13.com " } " Windows Compatible { " On Windows, also use '.vim' instead of 'vimfiles'; this makes synchronization " across (heterogeneous) systems easier. if has('win32') || has('win64') set runtimepath=$HOME/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$HOME/.vim/after endif " } " Setup Bundle Support { " The next two lines ensure that the ~/.vim/bundle/ system works runtime! autoload/pathogen.vim silent! call pathogen#runtime_append_all_bundles() " } " Basics { set nocompatible " must be first line set background=dark " Assume a dark background " } " General { filetype plugin indent on " Automatically detect file types. syntax on " syntax highlighting set hidden " allow leaving a buffer when it is unsaved set mouse=a " automatically enable mouse usage "set autochdir " always switch to the current file directory.. " not every vim is compiled with this, use the following line instead "autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | lcd %:p:h | endif scriptencoding utf-8 " set autowrite set shortmess+=filmnrxoOtT " abbrev. of messages (avoids 'hit enter') set viewoptions=folds,options,cursor,unix,slash " better unix / windows compatibility set virtualedit=onemore " allow for cursor beyond last character set history=1000 " Store a ton of history (default is 20) " set spell " spell checking on " Use TABS instead of SPACES for PHP (read: OpenSky... why oh why use tabs?) autocmd FileType php set noexpandtab " Setting up the directories { set backup " backups are nice ... au BufWinLeave * silent! mkview "make vim save view (state) (folds, cursor, etc) au BufWinEnter * silent! loadview "make vim load view (state) (folds, cursor, etc) " } " } " Vim UI { color blackboard " load a colorscheme set tabpagemax=15 " only show 15 tabs set showmode " display the current mode set cursorline " highlight current line hi cursorline guibg=#333333 " highlight bg color of current line hi CursorColumn guibg=#333333 " highlight cursor if has('cmdline_info') set ruler " show the ruler set rulerformat=%30(%=\:b%n%y%m%r%w\ %l,%c%V\ %P%) " a ruler on steroids set showcmd " show partial commands in status line and " selected characters/lines in visual mode endif set laststatus=2 set statusline=%f%m%r%h%w\ [%{&ff}/%Y]\ [%{getcwd()}]\ [A=\%03.3b/H=\%02.2B]\ [%04l,%04v]\ [%p%%]\ [LEN=%L] set backspace=indent,eol,start " backspace for dummys set linespace=0 " No extra spaces between rows set nu " Line numbers on set showmatch " show matching brackets/parenthesis set incsearch " find as you type search set hlsearch " highlight search terms set winminheight=0 " windows can be 0 line high set ignorecase " case insensitive search set smartcase " case sensitive when uc present set wildmenu " show list instead of just completing set wildmode=list:longest,full " comand completion, list matches, then longest common part, then all. set whichwrap=b,s,h,l,<,>,[,] " backspace and cursor keys wrap to set scrolljump=5 " lines to scroll when cursor leaves screen set scrolloff=3 " minimum lines to keep above and below cursor set nofoldenable " disable auto fold code set gdefault " the /g flag on :s substitutions by default " } " Formatting { " set nowrap " wrap long lines set autoindent " indent at the same level of the previous line set shiftwidth=4 " use indents of 4 spaces set expandtab " tabs are spaces set tabstop=4 " an indentation every four columns "set matchpairs+=<:> " match, to be used with % "set pastetoggle= " pastetoggle (sane indentation on pastes) "set comments=sl:/*,mb:*,elx:*/ " auto format comment blocks " } " Python helpers { highlight BadWhitespace ctermbg=red guibg=red " Display tabs at the beginning of a line in Python mode as bad. au BufRead,BufNewFile *.py,*.pyw match BadWhitespace /^\t\+/ au BufNewFile *.py,*.pyw,*.c,*.h set fileformat=unix let python_highlight_all=1 " } " Key Mappings { " Easier moving in tabs and windows map :2 tabn map :2 tabp map :tabn map :tabp map j_ map k_ map l_ map h_ map gT map gt " Yank from the cursor to the end of the line, to be consistent with C and D. nnoremap Y y$ """ Code folding options nmap f0 :set foldlevel=0 nmap f1 :set foldlevel=1 nmap f2 :set foldlevel=2 nmap f3 :set foldlevel=3 nmap f4 :set foldlevel=4 nmap f5 :set foldlevel=5 nmap f6 :set foldlevel=6 nmap f7 :set foldlevel=7 nmap f8 :set foldlevel=8 nmap f9 :set foldlevel=9 " Shortcuts " Change Working Directory to that of the current file nmap cd. :lcd %:p:h:pwd " Fix home and end keybindings for screen, particularly on mac " - for some reason this fixes the arrow keys too. huh. map  $ imap  $ map  g0 imap  g0 " } " Plugins { " VCSCommand { let b:VCSCommandMapPrefix=',v' let b:VCSCommandVCSType='git' ""let mapleader = "-" " } " PIV { let g:DisableAutoPHPFolding = 1 " } " Supertab { "let g:SuperTabDefaultCompletionType = "context" let g:SuperTabContextDefaultCompletionType = "" " } " Misc { :map :vsp:VTree " map Control + F10 to Vtree noremap :CheckSyntax let g:checksyntax_auto = 1 "comment out line(s) in visual mode -RB: If you do this, you can't "switch sides of the comment block in visual mode. "vmap o :call NERDComment(1, 'toggle') let g:NERDShutUp=1 let b:match_ignorecase = 1 " } " ShowMarks { let showmarks_include = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" " Don't leave on by default, use :ShowMarksOn to enable let g:showmarks_enable = 1 " For marks a-z highlight ShowMarksHLl gui=bold guibg=LightBlue guifg=Blue " For marks A-Z highlight ShowMarksHLu gui=bold guibg=LightRed guifg=DarkRed " For all other marks highlight ShowMarksHLo gui=bold guibg=LightYellow guifg=DarkYellow " For multiple marks on the same line. highlight ShowMarksHLm gui=bold guibg=LightGreen guifg=DarkGreen " } " OmniComplete { "if has("autocmd") && exists("+omnifunc") "autocmd Filetype * "\if &omnifunc == "" | "\setlocal omnifunc=syntaxcomplete#Complete | "\endif "endif " Popup menu hightLight Group "highlight Pmenu ctermbg=13 guibg=DarkBlue "highlight PmenuSel ctermbg=7 guibg=DarkBlue guifg=LightBlue "highlight PmenuSbar ctermbg=7 guibg=DarkGray "highlight PmenuThumb guibg=Black hi Pmenu guifg=#000000 guibg=#F8F8F8 ctermfg=black ctermbg=Lightgray hi PmenuSbar guifg=#8A95A7 guibg=#F8F8F8 gui=NONE ctermfg=darkcyan ctermbg=lightgray cterm=NONE hi PmenuThumb guifg=#F8F8F8 guibg=#8A95A7 gui=NONE ctermfg=lightgray ctermbg=darkcyan cterm=NONE " some convenient mappings inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\\\" : "\" inoremap pumvisible() ? "\\\" : "\" " automatically open and close the popup menu / preview window au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif set completeopt=menu,longest,preview " } " Ctags { set tags=./tags;/,~/.vimtags " } " EasyTags { let g:easytags_cmd = 'ctags' " } " AutoCloseTag { " Make it so AutoCloseTag works for xml and xhtml files as well au FileType xhtml,xml ru ftplugin/html/autoclosetag.vim " } " SnipMate { " Setting the author var let g:snips_author = 'Richard Bateman ' " Shortcut for reloading snippets, useful when developing nnoremap ,smr :exec ReloadAllSnippets() " } " Richard's plugins { " Fuzzy Finder { """ Fuzzy Find file, tree, buffer, line nmap ff :FufFile **/ nmap ft :FufFile nmap fb :FufBuffer nmap fl :FufLine nmap fr :FufRenewCache " } " Session List { set sessionoptions=blank,buffers,curdir,folds,tabpages,winsize nmap sl :SessionList nmap ss :SessionSave " } " Buffer explorer { nmap b :BufExplorer " } " Project related { map ToggleProject map :NERDTreeToggle:NERDTreeMirror nmap nt :NERDTreeFind let NERDTreeShowBookmarks=1 let NERDTreeIgnore=['\.pyc', '\~$', '\.swo$', '\.swp$', '\.git', '\.hg', '\.svn', '\.bzr'] let NERDTreeChDirMode=2 let NERDTreeQuitOnOpen=0 let NERDTreeShowHidden=1 let NERDTreeKeepTreeInNewTab=1 "au BufEnter * call NERDTreeInitAsNeeded() " } " VCS commands { nmap vs :VCSStatus nmap vc :VCSCommit nmap vb :VCSBlame nmap va :VCSAdd nmap vd :VCSVimDiff nmap vl :VCSLog nmap vu :VCSUpdate " } " php-doc commands { nmap pd :call PhpDocSingle() vmap pd :call PhpDocRange() " } " Debugging with VimDebugger { map :DbgStepInto map :DbgStepOver map :DbgStepOut map :DbgRun map :DbgDetach map :DbgToggleBreakpoint map :DbgFlushBreakpoints map :DbgRefreshWatch map :DbgAddWatch " } " Taglist Variables { let Tlist_Auto_Highlight_Tag = 1 let Tlist_Auto_Update = 1 let Tlist_Exit_OnlyWindow = 1 let Tlist_File_Fold_Auto_Close = 1 let Tlist_Highlight_Tag_On_BufEnter = 1 let Tlist_Use_Right_Window = 1 let Tlist_Use_SingleClick = 1 let g:ctags_statusline=1 " Override how taglist does javascript let g:tlist_javascript_settings = 'javascript;f:function;c:class;m:method;p:property;v:global' " } " } " } " GUI Settings { " GVIM- (here instead of .gvimrc) if has('gui_running') set guioptions-=T " remove the toolbar set lines=40 " 40 lines of text instead of 24, endif " } " function! InitializeDirectories() let separator = "." let parent = $HOME let prefix = '.vim' let dir_list = { \ 'backup': 'backupdir', \ 'views': 'viewdir', \ 'swap': 'directory' } for [dirname, settingname] in items(dir_list) let directory = parent . '/' . prefix . dirname . "/" if exists("*mkdir") if !isdirectory(directory) call mkdir(directory) endif endif if !isdirectory(directory) echo "Warning: Unable to create backup directory: " . directory echo "Try: mkdir -p " . directory else " Adding an extra trailing slash so it stores the path and not just the " filename so there aren't collisions for backups " Windows Vista / 7 has UAC issues, so setting $temp as fallback exec "set " . settingname . "=" . directory endif endfor endfunction call InitializeDirectories() function! NERDTreeInitAsNeeded() redir => bufoutput buffers! redir END let idx = stridx(bufoutput, "NERD_tree") if idx > -1 NERDTreeMirror NERDTreeFind wincmd l endif endfunction