您的位置:首页 > 编程语言 > Python开发

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

2016-07-19 09:20 323 查看
转载自:http://blog.csdn.net/redguardtoo/article/details/1172136

史上最强的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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vim buffer python cmd