用户工具

站点工具


linux:vim:vimrc-example

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

linux:vim:vimrc-example [2011/01/23 08:05] (当前版本)
行 1: 行 1:
 +====== 史上最强的vimrc文件 ======
 +
 +网上称为史上最强的vimrc文件,约800行,还是作者精简后的结果。评价:未必全用,但通读有益!
 +
 +中文改进版 [[linux:​vim:​vimrc-example-cn]]
 +
 +<code vim>
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" Maintainer: amix the lucky stiff
 +" ​            ​http://​amix.dk - amix@amix.dk
 +"
 +" Version: 3.6 - 25/08/10 14:40:30
 +"
 +" Blog_post: ​
 +" ​      ​http://​amix.dk/​blog/​post/​19486#​The-ultimate-vim-configuration-vimrc
 +" Syntax_highlighted:​
 +" ​      ​http://​amix.dk/​vim/​vimrc.html
 +" Raw_version: ​
 +" ​      ​http://​amix.dk/​vim/​vimrc.txt
 +"
 +" How_to_Install_on_Unix:​
 +" ​   $ mkdir ~/​.vim_runtime
 +" ​   $ svn co svn://​orangoo.com/​vim ~/​.vim_runtime
 +" ​   $ cat ~/​.vim_runtime/​install.sh
 +" ​   $ sh ~/​.vim_runtime/​install.sh <​system>​
 +" ​     <​sytem>​ can be `mac`, `linux` or `windows`
 +"
 +" How_to_Upgrade:​
 +" ​   $ svn update ~/​.vim_runtime
 +"
 +" Sections:
 +" ​   -> General
 +" ​   -> VIM user interface
 +" ​   -> Colors and Fonts
 +" ​   -> Files and backups
 +" ​   -> Text, tab and indent related
 +" ​   -> Visual mode related
 +" ​   -> Command mode related
 +" ​   -> Moving around, tabs and buffers
 +" ​   -> Statusline
 +" ​   -> Parenthesis/​bracket expanding
 +" ​   -> General Abbrevs
 +" ​   -> Editing mappings
 +"
 +" ​   -> Cope
 +" ​   -> Minibuffer plugin
 +" ​   -> Omni complete functions
 +" ​   -> Python section
 +" ​   -> JavaScript section
 +"
 +"
 +" Plugins_Included:​
 +" ​    > minibufexpl.vim - http://​www.vim.org/​scripts/​script.php?​script_id=159
 +" ​      Makes it easy to get an overview of buffers:
 +" ​          info -> :e ~/​.vim_runtime/​plugin/​minibufexpl.vim
 +"
 +" ​    > bufexplorer - http://​www.vim.org/​scripts/​script.php?​script_id=42
 +" ​      Makes it easy to switch between buffers:
 +" ​          info -> :help bufExplorer
 +"
 +" ​    > yankring.vim - http://​www.vim.org/​scripts/​script.php?​script_id=1234
 +" ​      ​Emacs'​s killring, useful when using the clipboard:
 +" ​          info -> :help yankring
 +"
 +" ​    > surround.vim - http://​www.vim.org/​scripts/​script.php?​script_id=1697
 +" ​      Makes it easy to work with surrounding text:
 +" ​          info -> :help surround
 +"
 +" ​    > snipMate.vim - http://​www.vim.org/​scripts/​script.php?​script_id=2540
 +" ​      ​Snippets for many languages (similar to TextMate'​s):​
 +" ​          info -> :help snipMate
 +"
 +" ​    > mru.vim - http://​www.vim.org/​scripts/​script.php?​script_id=521
 +" ​      ​Plugin to manage Most Recently Used (MRU) files:
 +" ​          info -> :e ~/​.vim_runtime/​plugin/​mru.vim
 +"
 +" ​    > Command-T - http://​www.vim.org/​scripts/​script.php?​script_id=3025
 +" ​      ​Command-T plug-in provides an extremely fast, intuitive mechanism for opening filesa:
 +" ​          info -> :help CommandT
 +" ​          ​screencast and web-help -> http://​amix.dk/​blog/​post/​19501
 +"
 +"
 +" ​ Revisions:
 +" ​    > 3.6: Added lots of stuff (colors, Command-T, Vim 7.3 persistent undo etc.)
 +" ​    > 3.5: Paste mode is now shown in status line  if you are in paste mode
 +" ​    > 3.4: Added mru.vim
 +" ​    > 3.3: Added syntax highlighting for Mako mako.vim ​
 +" ​    > 3.2: Turned on python_highlight_all for better syntax
 +" ​           highlighting for Python
 +" ​    > 3.1: Added revisions ;) and bufexplorer.vim
 +"
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => General
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" Sets how many lines of history VIM has to remember
 +set history=700
 +
 +" Enable filetype plugin
 +filetype plugin on
 +filetype indent on
 +
 +" Set to auto read when a file is changed from the outside
 +set autoread
 +
 +" With a map leader it's possible to do extra key combinations
 +" like <​leader>​w saves the current file
 +let mapleader = ","​
 +let g:mapleader = ","​
 +
 +" Fast saving
 +nmap <​leader>​w :​w!<​cr>​
 +
 +" Fast editing of the .vimrc
 +map <​leader>​e :e! ~/​.vim_runtime/​vimrc<​cr>​
 +
 +" When vimrc is edited, reload it
 +autocmd! bufwritepost vimrc source ~/​.vim_runtime/​vimrc
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => VIM user interface
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" Set 7 lines to the curors - when moving vertical..
 +set so=7
 +
 +set wildmenu "Turn on WiLd menu
 +
 +set ruler "​Always show current position
 +
 +set cmdheight=2 "The commandbar height
 +
 +set hid "​Change buffer - without saving
 +
 +" Set backspace config
 +set backspace=eol,​start,​indent
 +set whichwrap+=<,>,​h,​l
 +
 +set ignorecase "​Ignore case when searching
 +set smartcase
 +
 +set hlsearch "​Highlight search things
 +
 +set incsearch "Make search act like search in modern browsers
 +set nolazyredraw "​Don'​t redraw while executing macros ​
 +
 +set magic "Set magic on, for regular expressions
 +
 +set showmatch "Show matching bracets when text indicator is over them
 +set mat=2 "How many tenths of a second to blink
 +
 +" No sound on errors
 +set noerrorbells
 +set novisualbell
 +set t_vb=
 +set tm=500
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => Colors and Fonts
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +syntax enable "​Enable syntax hl
 +
 +" Set font according to system
 +if MySys() == "​mac"​
 +  set gfn=Menlo:​h14
 +  set shell=/​bin/​bash
 +elseif MySys() == "​windows"​
 +  set gfn=Bitstream\ Vera\ Sans\ Mono:h10
 +elseif MySys() == "​linux"​
 +  set gfn=Monospace\ 10
 +  set shell=/​bin/​bash
 +endif
 +
 +if has("​gui_running"​)
 +  set guioptions-=T
 +  set t_Co=256
 +  set background=dark
 +  colorscheme peaksea
 +  set nonu
 +else
 +  colorscheme zellner
 +  set background=dark
 +
 +  set nonu
 +endif
 +
 +set encoding=utf8
 +try
 +    lang en_US
 +catch
 +endtry
 +
 +set ffs=unix,​dos,​mac "​Default file types
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => Files, backups and undo
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" Turn backup off, since most stuff is in SVN, git anyway...
 +set nobackup
 +set nowb
 +set noswapfile
 +
 +"​Persistent undo
 +try
 +    if MySys() == "​windows"​
 +      set undodir=C:​\Windows\Temp
 +    else
 +      set undodir=~/​.vim_runtime/​undodir
 +    endif
 +
 +    set undofile
 +catch
 +endtry
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => Text, tab and indent related
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +set expandtab
 +set shiftwidth=4
 +set tabstop=4
 +set smarttab
 +
 +set lbr
 +set tw=500
 +
 +set ai "Auto indent
 +set si "Smart indet
 +set wrap "Wrap lines
 +
 +
 +""""""""""""""""""""""""""""""​
 +" => Visual mode related
 +""""""""""""""""""""""""""""""​
 +" Really useful!
 +" ​ In visual mode when you press * or # to search for the current selection
 +vnoremap <​silent>​ * :call VisualSearch('​f'​)<​CR>​
 +vnoremap <​silent>​ # :call VisualSearch('​b'​)<​CR>​
 +
 +" When you press gv you vimgrep after the selected text
 +vnoremap <​silent>​ gv :call VisualSearch('​gv'​)<​CR>​
 +map <​leader>​g :vimgrep // **/​*.<​left><​left><​left><​left><​left><​left><​left>​
 +
 +
 +function! CmdLine(str)
 +    exe "menu Foo.Bar :" . a:str
 +    emenu Foo.Bar
 +    unmenu Foo
 +endfunction
 +
 +" 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,​ "​\n$",​ "",​ ""​)
 +
 +    if a:direction == '​b'​
 +        execute "​normal ?" . l:pattern . "​^M"​
 +    elseif a:direction == '​gv'​
 +        call CmdLine("​vimgrep " . '/'​. l:pattern . '/'​ . ' **/​*.'​)
 +    elseif a:direction == '​f'​
 +        execute "​normal /" . l:pattern . "​^M"​
 +    endif
 +
 +    let @/ = l:pattern
 +    let @" = l:saved_reg
 +endfunction
 +
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => Command mode related
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" Smart mappings on the command line
 +cno $h e ~/
 +cno $d e ~/Desktop/
 +cno $j e ./
 +cno $c e <​C-\>​eCurrentFileDir("​e"​)<​cr>​
 +
 +" $q is super useful when browsing on the command line
 +cno $q <​C-\>​eDeleteTillSlash()<​cr>​
 +
 +" Bash like keys for the command line
 +cnoremap <​C-A> ​     <​Home>​
 +cnoremap <​C-E> ​     <End>
 +cnoremap <​C-K> ​     <C-U>
 +
 +cnoremap <C-P> <Up>
 +cnoremap <C-N> <​Down>​
 +
 +" Useful on some European keyboards
 +map ½ $
 +imap ½ $
 +vmap ½ $
 +cmap ½ $
 +
 +
 +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
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => Moving around, tabs and buffers
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" Map space to / (search) and c-space to ? (backgwards search)
 +map <​space>​ /
 +map <​c-space>​ ?
 +map <​silent>​ <​leader><​cr>​ :​noh<​cr>​
 +
 +" Smart way to move btw. windows
 +map <C-j> <​C-W>​j
 +map <C-k> <​C-W>​k
 +map <C-h> <​C-W>​h
 +map <C-l> <​C-W>​l
 +
 +" Close the current buffer
 +map <​leader>​bd :​Bclose<​cr>​
 +
 +" Close all the buffers
 +map <​leader>​ba :1,300 bd!<​cr>​
 +
 +" Use the arrows to something usefull
 +map <​right>​ :​bn<​cr>​
 +map <​left>​ :​bp<​cr>​
 +
 +" Tab configuration
 +map <​leader>​tn :​tabnew<​cr>​
 +map <​leader>​te :tabedit
 +map <​leader>​tc :​tabclose<​cr>​
 +map <​leader>​tm :tabmove
 +
 +" When pressing <​leader>​cd switch to the directory of the open buffer
 +map <​leader>​cd :cd %:​p:​h<​cr>​
 +
 +
 +command! Bclose call <​SID>​BufcloseCloseIt()
 +function! <​SID>​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
 +
 +" Specify the behavior when switching between buffers ​
 +try
 +  set switchbuf=usetab
 +  set stal=2
 +catch
 +endtry
 +
 +
 +""""""""""""""""""""""""""""""​
 +" => Statusline
 +""""""""""""""""""""""""""""""​
 +" Always hide the statusline
 +set laststatus=2
 +
 +" Format the statusline
 +set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{CurDir()}%h\ \ \ Line:\ %l/%L:%c
 +
 +
 +function! CurDir()
 +    let curdir = substitute(getcwd(),​ '/​Users/​amir/',​ "​~/",​ "​g"​)
 +    return curdir
 +endfunction
 +
 +function! HasPaste()
 +    if &paste
 +        return 'PASTE MODE  '
 +    else
 +        return ''​
 +    endif
 +endfunction
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => Parenthesis/​bracket expanding
 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +vnoremap $1 <​esc>​`>​a)<​esc>​`<​i(<​esc>​
 +vnoremap $2 <​esc>​`>​a]<​esc>​`<​i[<​esc>​
 +vnoremap $3 <​esc>​`>​a}<​esc>​`<​i{<​esc>​
 +vnoremap $$ <​esc>​`>​a"<​esc>​`<​i"<​esc>​
 +vnoremap $q <​esc>​`>​a'<​esc>​`<​i'<​esc>​
 +vnoremap $e <​esc>​`>​a"<​esc>​`<​i"<​esc>​
 +
 +" Map auto complete of (, ", ', [
 +inoremap $1 ()<​esc>​i
 +inoremap $2 []<​esc>​i
 +inoremap $3 {}<​esc>​i
 +inoremap $4 {<​esc>​o}<​esc>​O
 +inoremap $q ''<​esc>​i
 +inoremap $e ""<​esc>​i
 +inoremap $t <><​esc>​i
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => General Abbrevs
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +iab xdate <​c-r>​=strftime("​%d/​%m/​%y %H:​%M:​%S"​)<​cr>​
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => Editing mappings
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +"Remap VIM 0
 +map 0 ^
 +
 +"Move a line of text using ALT+[jk] or Comamnd+[jk] on mac
 +nmap <M-j> mz:​m+<​cr>​`z
 +nmap <M-k> mz:​m-2<​cr>​`z
 +vmap <M-j> :​m'>​+<​cr>​`<​my`>​mzgv`yo`z
 +vmap <M-k> :​m'<​-2<​cr>​`>​my`<​mzgv`yo`z
 +
 +if MySys() == "​mac"​
 +  nmap <D-j> <M-j>
 +  nmap <D-k> <M-k>
 +  vmap <D-j> <M-j>
 +  vmap <D-k> <M-k>
 +endif
 +
 +"​Delete trailing white space, useful for Python ;)
 +func! DeleteTrailingWS()
 +  exe "​normal mz"
 +  %s/​\s\+$//​ge
 +  exe "​normal `z"
 +endfunc
 +autocmd BufWrite *.py :call DeleteTrailingWS()
 +
 +set guitablabel=%t
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => Cope
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" Do :help cope if you are unsure what cope is. It's super useful!
 +map <​leader>​cc :botright cope<​cr>​
 +map <​leader>​n :​cn<​cr>​
 +map <​leader>​p :​cp<​cr>​
 +
 +
 +""""""""""""""""""""""""""""""​
 +" => bufExplorer plugin
 +""""""""""""""""""""""""""""""​
 +let g:​bufExplorerDefaultHelp=0
 +let g:​bufExplorerShowRelativePath=1
 +map <​leader>​o :​BufExplorer<​cr>​
 +
 +
 +""""""""""""""""""""""""""""""​
 +" => Minibuffer plugin
 +""""""""""""""""""""""""""""""​
 +let g:​miniBufExplModSelTarget = 1
 +let g:​miniBufExplorerMoreThanOne = 2
 +let g:​miniBufExplModSelTarget = 0
 +let g:​miniBufExplUseSingleClick = 1
 +let g:​miniBufExplMapWindowNavVim = 1
 +let g:​miniBufExplVSplit = 25
 +let g:​miniBufExplSplitBelow=1
 +
 +let g:​bufExplorerSortBy = "​name"​
 +
 +autocmd BufRead,​BufNew :call UMiniBufExplorer
 +
 +map <​leader>​u :​TMiniBufExplorer<​cr>​
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => Omni complete functions
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +autocmd FileType css set omnifunc=csscomplete#​CompleteCSS
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => Spell checking
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +"​Pressing ,ss will toggle and untoggle spell checking
 +map <​leader>​ss :setlocal spell!<​cr>​
 +
 +"​Shortcuts using <​leader>​
 +map <​leader>​sn ]s
 +map <​leader>​sp [s
 +map <​leader>​sa zg
 +map <​leader>​s?​ z=
 +
 +
 +""""""""""""""""""""""""""""""​
 +" => Python section
 +""""""""""""""""""""""""""""""​
 +let python_highlight_all = 1
 +au FileType python syn keyword pythonDecorator True None False self
 +
 +au BufNewFile,​BufRead *.jinja set syntax=htmljinja
 +au BufNewFile,​BufRead *.mako set ft=mako
 +
 +au FileType python inoremap <​buffer>​ $r return
 +au FileType python inoremap <​buffer>​ $i import
 +au FileType python inoremap <​buffer>​ $p print
 +au FileType python inoremap <​buffer>​ $f #--- PH ----------------------------------------------<​esc>​FP2xi
 +au FileType python map <​buffer>​ <​leader>​1 /class
 +au FileType python map <​buffer>​ <​leader>​2 /def
 +au FileType python map <​buffer>​ <​leader>​C ?class
 +au FileType python map <​buffer>​ <​leader>​D ?def
 +
 +
 +""""""""""""""""""""""""""""""​
 +" => JavaScript section
 +"""""""""""""""""""""""""""""""​
 +au FileType javascript call JavaScriptFold()
 +au FileType javascript setl fen
 +au FileType javascript setl nocindent
 +
 +au FileType javascript imap <c-t> AJS.log();<​esc>​hi
 +au FileType javascript imap <c-a> alert();<​esc>​hi
 +
 +au FileType javascript inoremap <​buffer>​ $r return
 +au FileType javascript inoremap <​buffer>​ $f //--- PH ----------------------------------------------<​esc>​FP2xi
 +
 +function! JavaScriptFold()
 +    setl foldmethod=syntax
 +    setl foldlevelstart=1
 +    syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend
 +
 +    function! FoldText()
 +    return substitute(getline(v:​foldstart),​ '​{.*',​ '​{...}',​ ''​)
 +    endfunction
 +    setl foldtext=FoldText()
 +endfunction
 +
 +
 +""""""""""""""""""""""""""""""​
 +" => MRU plugin
 +""""""""""""""""""""""""""""""​
 +let MRU_Max_Entries = 400
 +map <​leader>​f :​MRU<​CR>​
 +
 +
 +""""""""""""""""""""""""""""""​
 +" => Command-T
 +""""""""""""""""""""""""""""""​
 +let g:​CommandTMaxHeight = 15
 +set wildignore+=*.o,​*.obj,​.git,​*.pyc
 +noremap <​leader>​j :​CommandT<​cr>​
 +noremap <​leader>​y :​CommandTFlush<​cr>​
 +
 +
 +""""""""""""""""""""""""""""""​
 +" => Vim grep
 +""""""""""""""""""""""""""""""​
 +let Grep_Skip_Dirs = 'RCS CVS SCCS .svn generated'​
 +set grepprg=/​bin/​grep\ -nH
 +
 +
 +
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" => MISC
 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""​
 +" Remove the Windows ^M - when the encodings gets messed up
 +noremap <​Leader>​m mmHmt:​%s/<​C-V><​cr>//​ge<​cr>'​tzt'​m
 +
 +"​Quickly open a buffer for scripbble
 +map <​leader>​q :e ~/​buffer<​cr>​
 +au BufRead,​BufNewFile ~/buffer iab <​buffer>​ xh1 ===========================================
 +
 +map <​leader>​pp :setlocal paste!<​cr>​
 +
 +map <​leader>​bb :cd ..<​cr>​
 +</​code>​
 +
 +===== 参考 =====
 +
 +  * http://​amix.dk/​vim/​vimrc.html
  
linux/vim/vimrc-example.txt · 最后更改: 2011/01/23 08:05 (外部编辑)