This is an old revision of the document!


.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

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 @/=''<CR>
map g? :s/^\([ \t]*\)\/\/ \{0,1}\([ \t]*\)/\1\2/g<CR>:let @/=''<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
if exists('+autochdir')
  set autochdir
else
  autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ /
endif

" 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()
  • docs/vim/vimrc.1288901222.txt.gz
  • Last modified: 2010/11/04 14:07
  • by billh