zoukankan      html  css  js  c++  java
  • 史上最强的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>

  • 相关阅读:
    onload执行顺序
    让EXCHANGE可以接收外部邮件服务器发送的邮件
    QQ网站里AppTui对象脚本
    owa2007写新邮件时已经选择人员不能带入到与通讯录选人界面问题解决方法
    qq网站里动态加载脚本的实现
    qq网站里对元素的操作方法
    让Exchange可以发送邮件到互联网的邮件服务器
    js实现的hashtable
    无线网卡共享网络发射
    css省略号效果
  • 原文地址:https://www.cnblogs.com/huanlei/p/2430188.html
Copyright © 2011-2022 走看看