• 史上最强的Vim 配置文件(修正版)


    史上最强的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,目前我在vim5.8.9, vim6.1,vim6.3, vim6.4,vim7.0, 上测试过。
    • 其他一些通用性,兼容性的修正

    • 去掉了输入([{时的自动填入右括号的功能,在我修改代码时增加很多麻烦.

    我强烈建议你通读这个vimrc文件,一定会很有收获的,至少我是如此.

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " _
    " __ |
    " / | /
    " __ |
    " by Amix - http://amix.dk/
    "
    " Maintainer: Amir Salihefendic <amix3k at gmail.com>
    " Version: 2.0
    " Last Change: 12/08/06 13:39:28
    " Fixed (win32 compatible) by: redguardtoo <chb_sh at gmail.com>
    " This vimrc file is tested on platforms like win32,linux, cygwin,mingw
    " and vim7.0, vim6.4, vim6.1, vim5.8.9 by redguardtoo
    "
    " 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 <leader>c to see the results, or :botright cw
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => General
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "Get out of VI's compatible mode..
    set nocompatible

    function! MySys()
    if has("win32")
    return "win32"
    elseif has("unix")
    return "unix"
    else
    return "mac"
    endif
    endfunction
    "Set shell to be bash
    if MySys() == "unix" || MySys() == "mac"
    set shell=bash
    else
    "I have to run win32 python without cygwin
    "set shell=E:cygwininsh
    endif

    "Sets how many lines of history VIM har to remember
    set history=400

    "Enable filetype plugin
    filetype on
    if has("eval") && v:version>=600
    filetype plugin on
    filetype indent on
    endif

    "Set to auto read when a file is changed from the outside
    if exists("&autoread")
    set autoread
    endif

    "Have the mouse enabled all the time:
    set mouse=a

    "Set mapleader
    let mapleader = ","
    let g:mapleader = ","

    "Fast saving
    nmap <leader>w :w!<cr>


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Colors and Font
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "Enable syntax hl
    if MySys()=="unix"
    if v:version<600
    if filereadable(expand("$VIM/syntax/syntax.vim"))
    syntax on
    endif
    else
    syntax on
    endif
    else
    syntax on
    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 exists("&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 <leader>1 :set syntax=cheetah<cr>
    map <leader>2 :set syntax=xhtml<cr>
    map <leader>3 :set syntax=python<cr>
    map <leader>4 :set ft=javascript<cr>
    map <leader>$ :syntax sync fromstart<cr>

    "Highlight current
    if has("gui_running")
    if exists("&cursorline")
    set cursorline
    endif
    endif

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Fileformat
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "Favorite filetype
    set ffs=unix,dos,mac

    nmap <leader>fd :se ff=dos<cr>
    nmap <leader>fu :se ff=unix<cr>



    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => 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
    """"""""""""""""""""""""""""""
    "Format the statusline
    " Nice statusbar
    set laststatus=2
    set statusline=
    set statusline+=%2*%-3.3n%0*/ " buffer number
    set statusline+=%f/ " file name
    set statusline+=%h%1*%m%r%w%0* " flag
    set statusline+=[
    if v:version >= 600
    set statusline+=%{strlen(&ft)?&ft:'none'}, " filetype
    set statusline+=%{&encoding}, " encoding
    endif
    set statusline+=%{&fileformat}] " file format
    if filereadable(expand("$VIM/vimfiles/plugin/vimbuddy.vim"))
    set statusline+=/ %{VimBuddy()} " vim buddy
    endif
    set statusline+=%= " right align
    set statusline+=%2*0x%-8B/ " current char
    set statusline+=%-14.(%l,%c%V%)/ %<%P " offset

    " special statusbar for special window
    if has("autocmd")
    au FileType qf
    / if &buftype == "quickfix" |
    / setlocal statusline=%2*%-3.3n%0* |
    / setlocal statusline+=/ /[Compiler/ Messages/] |
    / setlocal statusline+=%=%2*/ %<%P |
    / endif

    fun! FixMiniBufExplorerTitle()
    if "-MiniBufExplorer-" == bufname("%")
    setlocal statusline=%2*%-3.3n%0*
    setlocal statusline+=/[Buffers/]
    setlocal statusline+=%=%2*/ %<%P
    endif
    endfun

    if v:version>=600
    au BufWinEnter *
    / let oldwinnr=winnr() |
    / windo call FixMiniBufExplorerTitle() |
    / exec oldwinnr . " wincmd w"
    endif
    endif

    " Nice window title
    if has('title') && (has('gui_running') || &title)
    set titlestring=
    set titlestring+=%f/ " file name
    set titlestring+=%h%m%r%w " flag
    set titlestring+=/ -/ %{v:progname} " program name
    endif



    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Moving around and tab
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "Map space to / and c-space to ?
    map <space> /

    "Smart way to move btw. window
    map <C-j> <C-W>j
    map <C-k> <C-W>k
    map <C-h> <C-W>h
    map <C-l> <C-W>l

    "Actually, the tab does not switch buffers, but my arrow
    "Bclose function ca be found in "Buffer related" section
    map <leader>bd :Bclose<cr>
    map <down> <leader>bd
    "Use the arrows to something usefull
    map <right> :bn<cr>
    map <left> :bp<cr>

    "Tab configuration
    map <leader>tn :tabnew %<cr>
    map <leader>tc :tabclose<cr>
    map <leader>tm :tabmove

    if v:version>=700
    set switchbuf=usetab
    endif

    if exists("&showtabline")
    set stal=2
    endif

    "Moving fast to front, back and 2 sides ;)
    imap <m-$> <esc>$a
    imap <m-0> <esc>0i
    imap <D-$> <esc>$a
    imap <D-0> <esc>0i


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => General Autocommand
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "Switch to current dir
    map <leader>cd :cd %:p:h<cr>


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => 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 $w <esc>`>a"<esc>`<i"<esc>
    imap <c-l> <esc>la
    imap <c-h> <esc>ha

    "Map auto complete of (, ", ', [
    "http://www.vim.org/tips/tip.php?tip_id=153
    "

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => General Abbrev
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "Comment for C like language
    if has("autocmd")
    au BufNewFile,BufRead *.js,*.htc,*.c,*.tmpl,*.css ino $c /**<cr> **/<esc>O
    endif

    "My information
    ia xdate <c-r>=strftime("%d/%m/%y %H:%M:%S")<cr>
    "iab xname Amir Salihefendic

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Editing mappings etc.
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "Remap VIM 0
    map 0 ^

    "Move a line of text using control
    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


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Command-line config
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    func! Cwd()
    let cwd = getcwd()
    return "e " . cwd
    endfunc

    func! DeleteTillSlash()
    let g:cmd = getcmdline()
    if MySys() == "unix" || MySys() == "mac"
    let g:cmd_edited = substitute(g:cmd, "(.*[/]).*", "", "")
    else
    let g:cmd_edited = substitute(g:cmd, "(.*[/]).*", "", "")
    endif
    if g:cmd == g:cmd_edited
    if MySys() == "unix" || MySys() == "mac"
    let g:cmd_edited = substitute(g:cmd, "(.*[/]).*/", "", "")
    else
    let g:cmd_edited = substitute(g:cmd, "(.*[/]).*[/]", "", "")
    endif
    endif
    return g:cmd_edited
    endfunc

    func! CurrentFileDir(cmd)
    return a:cmd . " " . expand("%:p:h") . "/"
    endfunc

    "cno $q <C->eDeleteTillSlash()<cr>
    "cno $c e <C->eCurrentFileDir("e")<cr>
    "cno $tc <C->eCurrentFileDir("tabnew")<cr>
    cno $th tabnew ~/
    cno $td tabnew ~/Desktop/

    "Bash like
    cno <C-A> <Home>
    cno <C-E> <End>
    cno <C-K> <C-U>


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Buffer realted
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "Fast open a buffer by search for a name
    "map <c-q> :sb

    "Open a dummy buffer for paste
    map <leader>q :e ~/buffer<cr>

    "Restore cursor to file position in previous editing session
    set viminfo='10,"100,:20,%,n~/.viminfo

    " Buffer - reverse everything ... :)
    map <F9> ggVGg?

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Files and backup
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "Turn backup off
    set nobackup
    set nowb
    "set noswapfile

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Folding
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "Enable folding, I find it very useful
    if exists("&foldenable")
    set fen
    endif

    if exists("&foldlevel")
    set fdl=0
    endif

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => 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 <leader>sn ]
    map <leader>sp [
    map <leader>sa zg
    map <leader>s? z=


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Plugin configuration
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """"""""""""""""""""""""""""""
    " => Yank Ring
    """"""""""""""""""""""""""""""
    map <leader>y :YRShow<cr>

    """"""""""""""""""""""""""""""
    " => 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 <c-w><c-t> :WMToggle<cr>

    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 <leader>t :Tlist<cr>
    map <F3> :Tlist<cr>


    """"""""""""""""""""""""""""""
    " => 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 <silent><leader><space> :w!<cr> :silent! call Tex_RunLaTeX()<cr>

    "Auto complete some things ;)
    au BufRead *.tex ino <buffer> $i indent
    au BufRead *.tex ino <buffer> $* cdot
    au BufRead *.tex ino <buffer> $i item
    au BufRead *.tex ino <buffer> $m [<cr>]<esc>O
    endif

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Filetype generic
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Todo
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "au BufNewFile,BufRead *.todo so ~/vim_local/syntax/amido.vim

    """"""""""""""""""""""""""""""
    " => VIM
    """"""""""""""""""""""""""""""
    if has("autocmd") && v:version>600
    au BufRead,BufNew *.vim map <buffer> <leader><space> :w!<cr>:source %<cr>
    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 <buffer> <leader><space> :w!<cr>:!python %<cr>
    "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 <buffer> <F8> :w!<cr>:make<cr>

    ""Python iMap
    "au BufNewFile,BufRead *.py set cindent
    "au BufNewFile,BufRead *.py ino <buffer> $r return
    "au BufNewFile,BufRead *.py ino <buffer> $s self
    "au BufNewFile,BufRead *.py ino <buffer> $c ##<cr>#<space><cr>#<esc>kla
    "au BufNewFile,BufRead *.py ino <buffer> $i import
    "au BufNewFile,BufRead *.py ino <buffer> $p print
    "au BufNewFile,BufRead *.py ino <buffer> $d """<cr>"""<esc>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 <F7> :call Python_Eval_VSplit()<cr>


    """"""""""""""""""""""""""""""
    " => 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 <c-t> console.log();<esc>hi
    "au BufNewFile,BufRead *.js imap <c-a> alert();<esc>hi
    "au BufNewFile,BufRead *.js set nocindent
    "au BufNewFile,BufRead *.js ino <buffer> $r return

    "au BufNewFile,BufRead *.js ino <buffer> $d //<cr>//<cr>//<esc>ka<space>
    "au BufNewFile,BufRead *.js ino <buffer> $c /**<cr><space><cr>**/<esc>ka


    if has("eval") && has("autocmd")
    "vim 5.8.9 on mingw donot know what is <SID>, so I avoid to use function
    "c/cpp
    fun! Abbrev_cpp()
    ia <buffer> cci const_iterator
    ia <buffer> ccl cla
    ia <buffer> cco const
    ia <buffer> cdb bug
    ia <buffer> cde throw
    ia <buffer> cdf /** file<CR><CR>/<Up>
    ia <buffer> cdg ingroup
    ia <buffer> cdn /** Namespace <namespace<CR><CR>/<Up>
    ia <buffer> cdp param
    ia <buffer> cdt test
    ia <buffer> cdx /**<CR><CR>/<Up>
    ia <buffer> cit iterator
    ia <buffer> cns Namespace ianamespace
    ia <buffer> cpr protected
    ia <buffer> cpu public
    ia <buffer> cpv private
    ia <buffer> csl std::list
    ia <buffer> csm std::map
    ia <buffer> css std::string
    ia <buffer> csv std::vector
    ia <buffer> cty typedef
    ia <buffer> cun using Namespace ianamespace
    ia <buffer> cvi virtual
    ia <buffer> #i #include
    ia <buffer> #d #define
    endfunction

    fun! Abbrev_java()
    ia <buffer> #i import
    ia <buffer> #p System.out.println
    ia <buffer> #m public static void main(String[] args)
    endfunction

    fun! Abbrev_python()
    ia <buffer> #i import
    ia <buffer> #p print
    ia <buffer> #m if __name__=="__main":
    endfunction
    augroup abbreviation
    au!
    au FileType cpp,c :call Abbrev_cpp()
    au FileType java :call Abbrev_java()
    au FileType python :call Abbrev_python()
    augroup END
    endif

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => MISC
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "Remove the Windows ^M
    noremap <Leader>m :%s/r//g<CR>

    "Paste toggle - when pasting something in, don't indent.
    "set pastetoggle=<F3>

    "Remove indenting on empty line
    map <F2> :%s//s*$//g<cr>:noh<cr>''

    "Super paste
    ino <C-v> <esc>:set paste<cr>mui<C-R>+<esc>mv'uV'v=:set nopaste<cr>

  • 相关阅读:
    第二天课程档案
    第一天课程档案
    SAM初步
    计算几何初步
    数论二次总结
    生成函数入门题汇总
    1500: [NOI2005]维修数列
    20170214
    【bzoj2286】[Sdoi2011]消耗战
    bzoj2223: [Coci 2009]PATULJCI
  • 原文地址:https://www.cnblogs.com/huanlei/p/2430188.html
Copyright © 2020-2023  润新知