当前位置:能下吧-电子书籍下载文章中心Linux/UnixLinux开发 → 史上最强的vim配置文件

史上最强的vim配置文件

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2008-1-25 13:48:51
史上最强的vimrc文件,据说有800行,还是作者精简后的结果. 我在尽可能保留原作者的创意的前提下做了些小的修正,主要的修改如下: * 增加了对win32系统的兼容,原来的vimrc文件只兼容linux和mac * 修正了一些快捷键,例如ctr-q被原作者用来搜索buffer,用过win32版本vim的都知道ctrl-q被用来作为块编辑的快捷键,所以ctrl-q是万万不能被移做他用的. * 去掉了colorscheme,原作者的colorscheme对我来说实在是太geeky,我想软件默认的colorscheme就该是最适合大多数人的. * 启用了swap文件,因为我的机器配置太低,而且我经常要编辑大文件 * 取消了所有和python有关的plugin,因为一些路径问题,也因为我觉得vim对python的支持够强大了(事实是,我缺乏用python写大项目的经验). * 增加了对中文编码的支持,参考了吴咏炜的一篇文章 * 兼容低版本vi,目前我在vim6.1上测试过。 * 其他一些通用性,兼容性的修正 我强烈建议你通读这个vimrc文件,一定会很有收获的,至少我是如此. 以下就是vimrc文件的内容,使用该文件前,根据vim所在的操作系统,修改MySys函数的返回值,可选值为"win32","linux","mac". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " _ " __ | " / | / " __ | " by Amix - http://amix.dk/ " " Maintainer: Amir Salihefendic " Version: 2.0 " Last Change: 12/08/06 13:39:28 " Fixed (win32 compatible) by: redguardtoo " " Sections: " ---------------------- " *> General " *> Colors and Font " *> Fileformat " *> VIM userinterface " ------ *> Statusline " *> Visual " *> Moving around and tab " *> General Autocommand " *> Parenthesis/bracket expanding " *> General Abbrev " *> Editing mappings etc. " *> Command-line config " *> Buffer realted " *> Files and backup " *> Folding " *> Text option " ------ *> Indent " *> Spell checking " *> Plugin configuration " ------ *> Yank ring " ------ *> File explorer " ------ *> Minibuffer " ------ *> Tag list (ctags) - not used " ------ *> LaTeX Suite thing " *> Filetype generic " ------ *> Todo " ------ *> VIM " ------ *> HTML related " ------ *> Ruby & PHP section " ------ *> Python section " ------ *> Cheetah section " ------ *> Java section " ------ *> JavaScript section " ------ *> C mapping " ------ *> SML " ------ *> Scheme binding " *> Snippet " ------ *> Python " ------ *> javaScript " *> Cope " *> MISC " " Tip: " If you find anything that you can't understand than do this: " help keyword OR helpgrep keyword " Example: " Go into command-line mode and type helpgrep nocompatible, ie. " :helpgrep nocompatible " then press c to see the results, or :botright cw """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => General """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Get out of VI's compatible mode.. set nocompatible function! MySys() return "win32" endfunction "Set shell to be bash if MySys() == "linux" || MySys() == "mac" set shell=bash else "I have to run win32 python without cygwin "set shell=E:\cygwin\bin\sh endif "Sets how many lines of history VIM har to remember set history=400 "Enable filetype plugin if has("eval") filetype plugin on filetype indent on endif "Set to auto read when a file is changed from the outside set autoread "Have the mouse enabled all the time: set mouse=a "Set mapleader let mapleader = "," let g:mapleader = "," "Fast saving nmap w :w! """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Colors and Font """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Enable syntax hl syntax on "Set font to Monaco 10pt "if MySys() == "mac" " set gfn=Bitstream Vera Sans Mono:h14 " set nomacatsui " set termencoding=macroman "elseif MySys() == "linux" " set gfn=Monospace 11 " "set encoding=utf-8 "endif "internationalization "I only work in Win2k Chinese version if has("multi_byte") set termencoding=chinese set encoding=utf-8 set fileencodings=ucs-bom,utf-8,chinese endif "if you use vim in tty, "'uxterm -cjk' or putty with option 'Treat CJK ambiguous characters as wide' on if has("ambiwidth") set ambiwidth=double endif if has("gui_running") set guioptions-=m set guioptions-=T set guioptions-=l set guioptions-=L set guioptions-=r set guioptions-=R if MySys()=="win32" "start gvim maximized if has("autocmd") au GUIEnter * simalt ~x endif endif "let psc_style='cool' "colorscheme ps_color "colorscheme default else "set background=dark "colorscheme default endif "Some nice mapping to switch syntax (useful if one mixes different languages in one file) map 1 :set syntax=cheetah map 2 :set syntax=xhtml map 3 :set syntax=python map 4 :set ft=javascript map $ :syntax sync fromstart "Highlight current if has("gui_running") if has("cursorline") set cursorline "hi cursorline guibg=#333333 "hi CursorColumn guibg=#333333 endif endif """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Fileformat """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Favorite filetype set ffs=unix,dos,mac nmap fd :se ff=dos nmap fu :se ff=unix """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => VIM userinterface """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Set 7 lines to the curors - when moving vertical.. set so=7 "Turn on WiLd menu set wildmenu "Always show current position set ruler "The commandbar is 2 high set cmdheight=2 "Show line number set nu "Do not redraw, when running macros.. lazyredraw set lz "Change buffer - without saving set hid "Set backspace set backspace=eol,start,indent "Bbackspace and cursor keys wrap to set whichwrap+=<,>,h,l "Ignore case when searching "set ignorecase set incsearch "Set magic on set magic "No sound on errors. set noerrorbells set novisualbell set t_vb= "show matching bracet set showmatch "How many tenths of a second to blink set mat=4 "Highlight search thing set hlsearch """""""""""""""""""""""""""""" " => Statusline """""""""""""""""""""""""""""" "Always hide the statusline set laststatus=2 function! CurDir() let curdir = substitute(getcwd(), '/Users/amir/', "~/", "g") return curdir endfunction "Format the statusline set statusline= set statusline+=%f "path to the file in the buffer, relative to current directory set statusline+=\ %h%1*%m%r%w%0* " flag set statusline+=\ [%{strlen(&ft)?&ft:'none'}, " filetype set statusline+=%{&encoding}, " encoding set statusline+=%{&fileformat}] " file format set statusline+=\ CWD:%r%{CurDir()}%h set statusline+=\ Line:%l/%L """""""""""""""""""""""""""""" " => Visual """""""""""""""""""""""""""""" " From an idea by Michael Naumann function! VisualSearch(direction) range let l:saved_reg = @" execute "normal! vgvy" let l:pattern = escape(@", '\/.*$^~[]') let l:pattern = substitute(l:pattern, " $", "", "") if a:direction == 'b' execute "normal ?" . l:pattern . "^M" else execute "normal /" . l:pattern . "^M" endif let @/ = l:pattern let @" = l:saved_reg endfunction "Basically you press * or # to search for the current selection !! Really useful vnoremap * :call VisualSearch('f') vnoremap # :call VisualSearch('b') """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Moving around and tab """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Map space to / and c-space to ? map / "map ? "Smart way to move btw. window map j map k map h map l "Actually, the tab does not switch buffers, but my arrow "Bclose function ca be found in "Buffer related" section map bd :Bclose map bd "Use the arrows to something usefull map :bn map :bp "Tab configuration map tn :tabnew % map tc :tabclose map tm :tabmove if has("usetab") set switchbuf=usetab endif if has("stal") set stal=2 endif "Moving fast to front, back and 2 sides ;) imap $a imap 0i imap $a imap 0i """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => General Autocommand """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Switch to current dir map cd :cd %:p:h """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Parenthesis/bracket expanding """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" vnoremap $1 `>a)` ") vnoremap $2 `>a]` vnoremap $3 `>a}` vnoremap $$ `>a"` vnoremap $q `>a'` vnoremap $w `>a"` "Map auto complete of (, ", ', [ "http://www.vim.org/tips/tip.php?tip_id=153 " ino ( ():let leavechar=")"i ino { {}:let leavechar="}"i ino $q '':let leavechar="'"i ino $w "":let leavechar='"'i imap :exec "normal f" . leavechara """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => General Abbrev """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Comment for C like language if has("autocmd") au BufNewFile,BufRead *.js,*.htc,*.c,*.tmpl,*.css ino $c /** **/O endif "My information ia xdate =strftime("%d/%m/%y %H:%M:%S") "iab xname Amir Salihefendic """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Editing mappings etc. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Remap VIM 0 map 0 ^ "Move a line of text using control nmap mz:m+`z nmap mz:m-2`z vmap :m'>+`mzgv`yo`z vmap :m'<-2`>my` nmap vmap vmap endif """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Command-line config """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" func! Cwd() let cwd = getcwd() return "e " . cwd endfunc func! DeleteTillSlash() let g:cmd = getcmdline() if MySys() == "linux" || MySys() == "mac" let g:cmd_edited = substitute(g:cmd, "\(.*[/]\).*", "\1", "") else let g:cmd_edited = substitute(g:cmd, "\(.*[\\]\).*", "\1", "") endif if g:cmd == g:cmd_edited if MySys() == "linux" || MySys() == "mac" let g:cmd_edited = substitute(g:cmd, "\(.*[/]\).*/", "\1", "") else let g:cmd_edited = substitute(g:cmd, "\(.*[\\]\).*[\\]", "\1", "") endif endif return g:cmd_edited endfunc func! CurrentFileDir(cmd) return a:cmd . " " . expand("%:p:h") . "/" endfunc "cno $q eDeleteTillSlash() "cno $c e eCurrentFileDir("e") "cno $tc eCurrentFileDir("tabnew") cno $th tabnew ~/ cno $td tabnew ~/Desktop/ "Bash like cno cno cno """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Buffer realted """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Fast open a buffer by search for a name "map :sb "Open a dummy buffer for paste map q :e ~/buffer "Restore cursor to file position in previous editing session set viminfo='10,"100,:20,%,n~/.viminfo " Buffer - reverse everything ... :) map ggVGg? " Don't close window, when deleting a buffer command! Bclose call BufcloseCloseIt() function! BufcloseCloseIt() let l:currentBufNum = bufnr("%") let l:alternateBufNum = bufnr("#") if buflisted(l:alternateBufNum) buffer # else bnext endif if bufnr("%") == l:currentBufNum new endif if buflisted(l:currentBufNum) execute "bdelete! ".l:currentBufNum endif endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Files and backup """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Turn backup off set nobackup set nowb "set noswapfile set noar """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Folding """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Enable folding, I find it very useful set fen set fdl=0 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Text option """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " python script "set expandtab set shiftwidth=2 set softtabstop=2 set tabstop=2 set backspace=2 set smarttab set lbr "set tw=500 """""""""""""""""""""""""""""" " => Indent """""""""""""""""""""""""""""" "Auto indent set ai "Smart indet set si "C-style indenting set cindent "Wrap line set wrap """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Spell checking """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" map sn ] map sp [ map sa zg map s? z= """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Plugin configuration """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""" " => Yank Ring """""""""""""""""""""""""""""" map y :YRShow """""""""""""""""""""""""""""" " => File explorer """""""""""""""""""""""""""""" "Split vertically let g:explVertical=1 "Window size let g:explWinSize=35 let g:explSplitLeft=1 let g:explSplitBelow=1 "Hide some file let g:explHideFiles='^.,.*.class$,.*.swp$,.*.pyc$,.*.swo$,.DS_Store$' "Hide the help thing.. let g:explDetailedHelp=0 """""""""""""""""""""""""""""" " => Minibuffer """""""""""""""""""""""""""""" let g:miniBufExplModSelTarget = 1 let g:miniBufExplorerMoreThanOne = 0 let g:miniBufExplModSelTarget = 0 let g:miniBufExplUseSingleClick = 1 let g:miniBufExplMapWindowNavVim = 1 let g:miniBufExplVSplit = 25 let g:miniBufExplSplitBelow=1 "WindowZ map :WMToggle let g:bufExplorerSortBy = "name" """""""""""""""""""""""""""""" " => Tag list (ctags) - not used """""""""""""""""""""""""""""" "let Tlist_Ctags_Cmd = "/sw/bin/ctags-exuberant" "let Tlist_Sort_Type = "name" "let Tlist_Show_Menu = 1 "map t :Tlist map :Tlist """""""""""""""""""""""""""""" " => LaTeX Suite thing """""""""""""""""""""""""""""" "set grepprg=grep\ -r\ -s\ -n let g:Tex_DefaultTargetFormat="pdf" let g:Tex_ViewRule_pdf='xpdf' if has("autocmd") "Binding au BufRead *.tex map :w! :silent! call Tex_RunLaTeX() "Auto complete some things ;) au BufRead *.tex ino $i indent au BufRead *.tex ino $* cdot au BufRead *.tex ino $i item au BufRead *.tex ino $m []O endif """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Filetype generic """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Todo """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "au BufNewFile,BufRead *.todo so ~/vim_local/syntax/amido.vim """""""""""""""""""""""""""""" " => VIM """""""""""""""""""""""""""""" if has("autocmd") au BufRead,BufNew *.vim map :w!:source % endif """""""""""""""""""""""""""""" " => HTML related """""""""""""""""""""""""""""" " HTML entities - used by xml edit plugin let xml_use_xhtml = 1 "let xml_no_auto_nesting = 1 "To HTML let html_use_css = 0 let html_number_lines = 0 let use_xhtml = 1 """""""""""""""""""""""""""""" " => Ruby & PHP section """""""""""""""""""""""""""""" """""""""""""""""""""""""""""" " => Python section """""""""""""""""""""""""""""" ""Run the current buffer in python - ie. on leader+space "au BufNewFile,BufRead *.py so ~/vim_local/syntax/python.vim "au BufNewFile,BufRead *.py map :w!:!python % "au BufNewFile,BufRead *.py so ~/vim_local/plugin/python_fold.vim ""Set some bindings up for 'compile' of python "au BufNewFile,BufRead *.py set makeprg=python -c "import py_compile,sys; sys.stderr=sys.stdout; py_compile.compile(r'%')" "au BufNewFile,BufRead *.py set efm=%C %.%#,%A File "%f"\, line %l%.%#,%Z%[%^ ]%\@=%m "au BufNewFile,BufRead *.py nmap :w!:make ""Python iMap "au BufNewFile,BufRead *.py set cindent "au BufNewFile,BufRead *.py ino $r return "au BufNewFile,BufRead *.py ino $s self "au BufNewFile,BufRead *.py ino $c ####kla "au BufNewFile,BufRead *.py ino $i import "au BufNewFile,BufRead *.py ino $p print "au BufNewFile,BufRead *.py ino $d """"""O ""Run in the Python interpreter "function! Python_Eval_VSplit() range " let src = tempname() " let dst = tempname() " execute ": " . a:firstline . "," . a:lastline . "w " . src " execute ":!python " . src . " > " . dst " execute ":pedit! " . dst "endfunction "au BufNewFile,BufRead *.py vmap :call Python_Eval_VSplit() """""""""""""""""""""""""""""" " => Cheetah section """"""""""""""""""""""""""""""" """"""""""""""""""""""""""""""" " => Java section """"""""""""""""""""""""""""""" """""""""""""""""""""""""""""" " => JavaScript section """"""""""""""""""""""""""""""" "au BufNewFile,BufRead *.js so ~/vim_local/syntax/javascript.vim "function! JavaScriptFold() " set foldmethod=marker " set foldmarker={,} " set foldtext=getline(v:foldstart) "endfunction "au BufNewFile,BufRead *.js call JavaScriptFold() "au BufNewFile,BufRead *.js imap console.log();hi "au BufNewFile,BufRead *.js imap alert();hi "au BufNewFile,BufRead *.js set nocindent "au BufNewFile,BufRead *.js ino $r return "au BufNewFile,BufRead *.js ino $d //////ka "au BufNewFile,BufRead *.js ino $c /****/ka if has("eval") && has("autocmd") fun! abbrev_cpp() iabbrev cci const_iterator iabbrev ccl cla iabbrev cco const iabbrev cdb \bug iabbrev cde \throw iabbrev cdf /** \file/ iabbrev cdg \ingroup iabbrev cdn /** \namespace/ iabbrev cdp \param iabbrev cdt \test iabbrev cdx /**/ iabbrev cit iterator iabbrev cns namespace iabbrev cpr protected iabbrev cpu public iabbrev cpv private iabbrev csl std::list iabbrev csm std::map iabbrev css std::string iabbrev csv std::vector iabbrev cty typedef iabbrev cun using namespace iabbrev cvi virtual iabbrev #i #include iabbrev #d #define endfun fun! abbrev_java() iabbrev #i import iabbrev #p System.out.println iabbrev #m public static void main(String[] args endfun fun! abbrev_python() iabbrev #i import iabbrev #p print iabbrev #m if __name__=="__main": endfun augroup abbreviation autocmd! autocmd FileType cpp,c :call abbrev_cpp() autocmd FileType java :call abbrev_java() autocmd FileType python :call abbrev_python() augroup END endif """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => MISC """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Remove the Windows ^M noremap m :%s/\r//g "Paste toggle - when pasting something in, don't indent. "set pastetoggle= "Remove indenting on empty line map :%s/s*$//g:noh'' "Super paste ino :set pastemui+mv'uV'v=:set nopaste