.vimrc
starting a new vimrc
You can download many vimrc files from the internet. If you want to start one with the current settings in your vim program, run this command:
:mkvimrc ~/.vimrc
my .vimrc
This is my current .vimrc configuration file (for the Mac, GUI Vim or MacVim). Note that I allowed vim to set me up with a default vimrc on windows (see starting a new vimrc above), so some of the common windows key mappings are in place. These lines would be before the following.
if has("gui_running") " size the initial window :set columns=120 :set lines=50 " highlight the entire line the cursor is on ":set cul :map <F9> :set cul!<CR> "autocmd ColorScheme * hi CursorLine guibg=#E9EFF8 else " allow ctrl-z to suspend during terminal usage since it may be mapped to " undo in windows :unmap <C-z> endif " make unix (NL) the default file format :set ff=unix " always show the status line :set laststatus=2 " syntax highlighting in color :syntax enable " show line numbers and set number column width :set number if v:version >= 700 :set nuw=5 endif " don't soft wrap text :set nowrap " incremental search :set incsearch " highlight all matches for last used search pattern :set hls " automatic indenting :set ai " smart indenting :set si " don't restrict your backspace key :set backspace=start,indent,eol " only backup when trying to write, and don't keep backups " after vim closes :set nobackup :set writebackup " preserve file system modes on unix and in cygwin :set backupcopy=yes " enable folding for php classes and functions :let php_folding=1 :filetype plugin on :filetype indent on ":set omnifunc " ! only in Vim >= 7 ! " when a bracket is inserted, briefly jump to the " matching one :set showmatch matchtime=3 " color theme if has("gui_running") "colo delek "colo mustang "colo two2tango colo darkZ "colo biogoo set gfn=Courier_New:h12:cANSI " gui font (Mac) if has("mac") set gfn=Monaco:h13 elseif has("win32") "set gfn=Courier_New:h12:cANSI set gfn=Courier_New:h11:cANSI elseif has("unix") set gfn=Courier\ New\ 12 endif else "colo evening "colo morning "colo zellner colo delek endif " gui font (Mac) if has("mac") set gfn=Monaco:h13 endif " open files clicked or selected in Explore view in a new tab :let netrw_browse_split=3 " keep from polluting your folders with .swp (swap) files during editing if has("unix") set dir=~/tmp elseif has("win32") set dir=c:\\temp endif " code folding for javascript function! JavaScriptFold() setl foldmethod=syntax setl foldnestmax=1 syn region jsBlock start=/{/ skip=/\s*\/\/.*\|{.*}/ end=/}/ contains=ALL fold keepend extend transparent syn clear javaScriptComment syn region javaScriptComment start=+/\*+ end=+\*/+ contains=@Spell,javaScriptCommentTodo,jsBlock function! FoldText() return substitute(foldtext(), '{.*', '{...}', '') endfunction setl foldtext=FoldText() endfunction au FileType javascript call JavaScriptFold() au FileType javascript setl fen " make .js.php files be recognized as javascript au BufReadPost *.js.php setl filetype=javascript " make changelog.txt files have a set textwidth au BufReadPost changelog.txt setl textwidth=80 " don't use changelog filetype au FileType changelog setl filetype=text " delete a buffer :map <F4> :bd<CR> " toggle spelling :map <F7> :set spell!<CR> " use F5 to refresh :map <F5> :e!<CR> " toggle line wrapping :map <F3> :set wrap!<CR> " toggle invisibles :map <F6> :set list!<CR> " configure non-text preferences :set lcs=trail:_,eol:$,tab:>- " make tab stop (tab width in spaces) smaller :set ts=4 " make shift width (spaces for indenting << >>) smaller :set sw=4 :au GUIEnter * hi clear SpecialKey :au GUIEnter * hi link SpecialKey StatusLineNC " // commenting/uncommenting on visual block selections map g/ :s/^\([ \t]*\)/\1\/\/ /g<CR>:let @/=histget("search", -2)<CR> map g? :s/^\([ \t]*\)\/\/ \{0,1}\([ \t]*\)/\1\2/g<CR>:let @/=histget("search", -3)<CR> " use , and . to shift indent and keep selection vmap . >gv vmap , <gv " make unix the default file format for new files, and " first attempt at reading existing files :set ffs=unix,dos " make sure we can select the character under the " cursor when in visual mode :set selection=inclusive " show the ruler by default set ruler " set the hide pattern for browsing (use 'a' to toggle) let g:netrw_list_hide= '^\.[^.]\|\.bak$' " clear previous search highlighting :map <F8> :let @/=''<CR> " make vertical the default diff split (filler was already there) set diffopt=filler,vertical " html commenting (single lines only right now) map gh :s/\(.*\)/<!--\1-->/<CR>:let @/=''<CR> map gH :s/<!--\(.*\)-->/\1/<CR>:let @/=''<CR> " fold all lines not matching search pattern ( press \z ) map <silent><leader>z :setl foldexpr=getline(v:lnum)!~@/ foldlevel=0 foldcolumn=1 foldmethod=expr foldtext=v:folddashes<CR><CR> " javascript fold using search pattern technique (press zfj ) map zfj :/^\s*function.*{\s*$\\|^.*prototype.*=.*function.*$/<CR>:setl foldexpr=getline(v:lnum)!~@/ foldmethod=expr foldlevel=0 foldcolumn=1 foldtext=v:folddashes<CR><CR> " space toggles the fold state under the cursor. nnoremap <silent><space> :exe 'silent! normal! za'.(foldlevel('.')?'':'l')<cr> " disable cmd opt mappings for MacVim (interferes with winmerge mappings) let macvim_skip_cmd_opt_movement = 1 " use diff navigation like winmerge, using alt with up, down, left, right nnoremap <M-Down> ]c nnoremap <M-Up> [c function! CopyToLeft() if !&diff return endif let currwin = winnr() if( currwin == 1 ) :diffget else :diffput endif endfunction function! CopyToRight() if !&diff return endif let currwin = winnr() if( currwin == 1 ) :diffput else :diffget endif endfunction nnoremap <M-Right> :call CopyToRight()<CR> nnoremap <M-Left> :call CopyToLeft()<CR> " turn off anti-aliasing text set noanti " don't wrap around when searching set nowrapscan " fast window resizing map <C-kMinus> <C-W>- map <C-kPlus> <C-W>+ map <S-kMinus> <C-W>< map <S-kPlus> <C-W>> " use F12 to highlight and run the entire contents of the current file in the " next window (nice for testing syntax commands) map <F12> ggVGy:@"<CR> hi SpellBad ctermfg=white au FileType cpp setl foldmethod=syntax au FileType cpp setl foldnestmax=1 if has("gui_running") amenu WMH.resync :syn sync fromstart<CR> amenu WMH.nosyntax :syn clear<CR> amenu WMH.find\ non-ascii\ characters gg/[^\o40-\o172]<CR> amenu WMH.find\ non-ascii\ characters\ (ex\ tab\ nl\ cr) gg/[^\o40-\o172\o11\o12\o15]<CR> amenu WMH.highlight\ rows :autocmd ColorScheme * hi CursorLine guibg=#E9EFF8<CR> :set cul<CR> amenu WMH.nohighlight\ rows :set nocul<CR> amenu WMH.remove\ closed\ folds :call RemoveFolds()<CR> amenu WMH.-Sep- : amenu WMH.Filetype.reload\ as\ unix\ file :set ffs=unix<CR>:e ++ff=unix<CR> amenu WMH.Filetype.reload\ as\ dos\ file :set ffs=dos<CR>:e ++ff=dos<CR> amenu WMH.Filetype.reload\ as\ mac\ file :set ffs=mac<CR>:e ++ff=mac<CR> amenu WMH.Filetype.remove\ carriage\ returns :%s/\r//g<CR> amenu WMH.Filetype.utf-8\ encoding :set encoding=utf-8<CR>:e!<CR> amenu WMH.Filetype.latin1\ encoding :set encoding=latin1<CR>:e!<CR> amenu WMH.Bookmarks.projects :Explore C:\htdocs\projects\<CR> amenu WMH.Doctypes.HTML\ 4\.01\ Strict i<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"<CR> "http://www.w3.org/TR/html4/strict.dtd"><CR><ESC> amenu WMH.Doctypes.HTML\ 4\.01\ Transitional i<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<CR> "http://www.w3.org/TR/html4/loose.dtd"><CR><ESC> amenu WMH.Doctypes.HTML\ 4\.01\ Frameset i<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"<CR> "http://www.w3.org/TR/html4/frameset.dtd"><CR><ESC> amenu WMH.Doctypes.XHTML\ 1\.0\ Strict i<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"<CR> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><CR><ESC> amenu WMH.Doctypes.XHTML\ 1\.0\ Transitional i<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"<CR> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><CR><ESC> amenu WMH.Doctypes.XHTML\ 1\.0\ Frameset i<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"<CR> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"><CR><ESC> amenu WMH.PHP.xdebug_start_trace Oxdebug_start_trace(getcwd() . "/trace");<ESC> amenu WMH.PHP.xdebug_start_trace_append Oxdebug_start_trace(getcwd() . "/trace", XDEBUG_TRACE_APPEND);<ESC> amenu WMH.SQL.format_numbers_for_where gg:%s/^/,/g<CR>gg0xVGJgwgg:noh<CR> amenu WMH.SQL.format_strings_for_where gg:%s/^\(.*\)/,'\1'/g<CR>gg0xVGJgwgg:noh<CR> amenu WMH.-Sep- : amenu WMH.837\ syntax :set filetype=837<CR>gg amenu WMH.show\ 837\ syntax\ file :split ~/vimfiles/syntax/837.vim<CR> amenu WMH.Progress\ syntax :set filetype=progress<CR>gg amenu WMH.Progress\ quick\ folding gg/\c^[\s]*procedure\\|^[\s]*for each\\|^[\s]*load file\\|^[\s]*if<CR>\z endif " sort directory browsing by showing directories first, but don't use the " default of sorting specific file types before others let g:netrw_sort_sequence = '[\/]$' " case-insensitive sorting in netrw let g:netrw_sort_options="i" " always change current (local) directory to directory of current buffer " http://vim.wikia.com/wiki/Change_to_the_directory_of_the_current_file autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ / " make diff colors more like winmerge autocmd ColorScheme * hi DiffAdd gui=NONE guibg=gold guifg=black autocmd ColorScheme * hi DiffChange gui=NONE guibg=lightyellow guifg=black autocmd ColorScheme * hi DiffDelete gui=NONE guibg=gray guifg=black autocmd ColorScheme * hi DiffText gui=NONE guibg=gold guifg=black autocmd ColorScheme * set fillchars=vert:\|,fold:-,diff:\ " make sure we are using unicode encoding set encoding=utf-8 " keep a few lines of padding when scrolling set scrolloff=3 " allow preview window to show even when there is only one match set completeopt=menuone,preview " set a maximum popup window height for completion results so it isn't allowed " to take up the whole screen set pumheight=8 " allow control space to act as omni-completion trigger, like IntelliSense inoremap <C-space> <C-x><C-o> if has("win32") " open an explorer window at the current directory map <silent> <leader>E :silent !"explorer.exe ."<CR> " http://vim.wikia.com/wiki/Call_TortoiseSVN_commands_from_within_Vim " http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-automation.html " Save current buffer and diff the file using Tortoise SVN map <silent> <Leader>td :w<CR>:silent !"C:/Progra~1/TortoiseSVN/bin/TortoiseProc.exe /command:diff /path:"%" /notempfile /closeonend"<CR> " Save the current buffer and execute the Tortoise SVN interface's log map <silent> <Leader>tl :w<CR>:silent !"C:/Progra~1/TortoiseSVN/bin/TortoiseProc.exe /command:log /path:"%" /notempfile /closeonend"<CR> " show the Tortoise SVN check for modifications screen for the current directory map <silent> <Leader>ts :silent !"C:/Progra~1/TortoiseSVN/bin/TortoiseProc.exe /command:repostatus /path:. /closeonend"<CR> " show the Tortoise SVN commit screen for the current directory map <silent> <Leader>tc :silent !"C:/Progra~1/TortoiseSVN/bin/TortoiseProc.exe /command:commit /path:. /closeonend"<CR> endif " don't allow NERDTree to take over our :E (explore) functionality let NERDTreeHijackNetrw = 0 " don't allow large php files to stop vim from folding, etc... " see http://www.mail-archive.com/pld-cvs-commit@lists.pld-linux.org/msg143762.html let php_large_file = 0 let g:statusline_mode = 0 function! ToggleStatusLine() " a more informative status line " http://www.linux.com/archive/feature/120126 let g:statusline_mode += 1 if( g:statusline_mode == 0 ) " default status line :set statusline= elseif( g:statusline_mode == 1 ) " file name, mod flags, and lots of file/cursor info :set statusline=%t%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L] elseif( g:statusline_mode == 2 ) " full path to filename :set statusline=%F%m%r%h%w elseif( g:statusline_mode == 3 && exists("*GitBranch") ) " relative path to filename with git info :set statusline=%f%m%r%h%w\ [GITBRANCH=%{GitBranch()}] else " restore default (wrap around) :set statusline= let g:statusline_mode = 0 endif endfunction nnoremap <F10> :call ToggleStatusLine()<CR> :call ToggleStatusLine() " use ctrl-v to paste clipboard in insert mode if has("win32") inoremap <C-v> <C-r>* endif " use ctrl-f2 to toggle toolbar/menubar " http://www.linux.com/archive/feature/120126 map <silent> <C-F2> :if &guioptions =~# 'T' <Bar> set guioptions-=T <Bar> set guioptions-=m <bar> else <Bar> set guioptions+=T <Bar> set guioptions+=m <Bar> endif<CR> " git-vim settings let g:git_bin = 'c:\cygwin\bin\git' " VCSCommand settings let VCSCommandGitExec = 'c:\cygwin\bin\git' "let VCSCommandSVNExec = 'C:\Program Files\svn-win32-1.6.6\bin\svn.exe' let VCSCommandSVNExec = 'c:\cygwin\bin\svn' function! RemoveFolds() folddoc :d endfunction " we need to override the default php indenting for heredoc to always put the " first line at the far left margin function! MyGetPhpIndent() if v:lnum > 1 && getline(v:lnum - 1) =~ '\s*<<<\s*' return 0 else return GetPhpIndent() endif endfunction autocmd BufReadPost *.php setlocal indentexpr=MyGetPhpIndent()