使用vim搭建python开发环境
puluto
|
1#
puluto 发表于 2006-12-22 14:42
使用vim搭建python开发环境
在使用vim之前也徘徊了好久,boa、drpython、eclipse+pydev、wingide、pythonwin、idle等等,用下来总觉
得要么不顺手、要么bug较多。其中eclipse+pydev在功能和方便性上做得不错,可惜内存占用过多,我的本本经不起折腾。于是想到了vim这个 强大的编辑器。 关于在vim里搭建python环境的文章也有不少,我也不打算重复,只是想把使用中感觉较好的几个插件和配置记录在这里,以便自己和朋友们参考。
这篇文章主要是介绍vim下python开发环境的支持插件,没有涉及其它开发语言环境的配置。下面贴出了我现在所用的_vimrc配置文件,是我基于其他人的配置文件基础上修改了的,其中不止涉及了python的开发环境,希望能对大家有所借鉴。 set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin "set ffs=unix set diffexpr=MyDiff() function MyDiff() let opt = '-a --binary ' if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif let arg1 = v:fname_in if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif let arg2 = v:fname_new if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif let arg3 = v:fname_out if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif silent execute '!D:\Vim\vim70\diff ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 endfunction hi HL_HiCurLine ctermfg=blue ctermbg=cyan guifg=blue guibg=cyan let HL_HiCurLine= "HL_HiCurLine" set formatoptions=tcrqn2 set guifont=FixedsysTTF:h14 "如果没有这个字体那就不要加 set tabstop=4 set softtabstop=4 set shiftwidth=4 "colorscheme darkblue "在gvim下可以看到有多少coloscheme color desert set lsp=0 set sw=4 " shiftwidth set et " expandtab "set wm=8 " wrapmargin set lbr "不在单词中间断行 set fo+=mB "打开断行模块对亚洲语言支持 set bs=2 " backspace set ru " ruler set ic " ignorecase "忽略大小写 但是输入中有大写的话不忽略 set is " incsearch set scs " smartcase: override the 'ic' when searching " if search pattern contains uppercase char set nu "显示行号 set wmnu set wildignore=*.bak,*.o,*.e,*~ iab #i #include iab #d #define iab #e #endif set cst set csto=1 set tags=./tags,../tags,../../tags,../../../tags,D:/Microsoft\ Visual\ Studio/VC98/Include/tags,D:/MinGW/include set cspc=3 " show file path's last three part set grepprg=grep\ -nH map :Tlist "map :WMToggle "代码折叠快捷方式 map zO map zc map zR map zM "map :cn " set vb t_vb= " set visual bell and disable screen flash set backup " enable backup and define the backup file set backupext=.bak set hlsearch " hlsearch " allow backspacing over everything in " the insert mode set backspace=indent,eol,start set dir=D:\vim\temp " 设置swap文件的目录上面 set backupdir=D:\vim\temp "设置备份文件的目录上面 我不喜欢看到每个目录下都有备份 因为一般备份用不到 "下面是设置自动folder的 而且是根据写C代码设置的 如果你不喜欢使用folder那么可以省略掉 "au BufReadPost *.h,*.c,*.cpp,*.java,*.pl syn region myFold start="{" end="}" transparent fold "au BufReadPost *.h,*.c,*.cpp,*.java,*.pl syn sync fromstart "au BufReadPost *.h,*.c,*.cpp,*.java,*.pl set foldmethod=syntax "set foldlevel=0 set foldmarker={,} set foldmethod=marker set foldlevel=100 " Don't autofold anything (but I can still fold manually) set foldopen-=search " don't open folds when you search into them set foldopen-=undo " don't open folds when you undo stuff "------------------------------------------------------------------------------- " C-support.vim "------------------------------------------------------------------------------- let g:C_AuthorName = 'J.T Jacky' let g:C_AuthorRef = '' let g:C_Email = 'brothertian@gmail.com' let g:C_Company = 'Baosight' "------------------------------------------------------------------------------- " C++ "------------------------------------------------------------------------------- set sm set cin set cino=:0g0t0(sus "------------------------------------------------------------------------------- " copy from web "------------------------------------------------------------------------------- set history=1000 " How many lines of history to remember set cf " enable error files and error jumping set clipboard+=unnamed " turns out I do like is sharing windows clipboard set ffs=dos,unix,mac " support all three, in this order filetype plugin on " load filetype plugins set viminfo+=! " make sure it can save viminfo set isk+=_,$,@,%,#,- " none of these should be word dividers, so make them not be """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Vim UI """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set lsp=0 " space it out a little more (easier to read) set wildmenu " turn on wild menu set ruler " Always show current positions along the bottom set cmdheight=1 " the command bar is 2 high "set number " turn on line numbers set lz " do not redraw while running macros (much faster) (LazyRedraw) "set hid " you can change buffer without saving set backspace=2 " make backspace work normal set whichwrap+=,h,l " backspace and cursor keys wrap to set mouse=a " use mouse everywhere set shortmess=atI " shortens messages to avoid 'press a key' prompt set report=0 " tell us when anything is changed via :... set noerrorbells " don't make noise " make the splitters between windows be blank set fillchars=vert:\ ,stl:\ ,stlnc:\ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Visual Cues """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "set showmatch " show matching brackets "set mat=5 " how many tenths of a second to blink matching brackets for "set nohlsearch " do not highlight searched for phrases set incsearch " BUT do highlight as you type you search phrase set listchars=tab:\|\ ,trail:.,extends:>,precedes: set lines=80 " 80 lines tall set columns=160 " 160 cols wide set so=0 " Keep 10 lines (top/bottom) for scope set novisualbell " don't blink set noerrorbells " no noises set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L] set laststatus=2 " always show the status line """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Text Formatting/Layout """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set fo=tcrqn " See Help (complex) "set ai " autoindent "set si " smartindent set cindent " do c-style indenting filetype indent on "set tabstop=8 " tab spacing (settings below are just to unify it) "set softtabstop=8 " unify "set shiftwidth=8 " unify "set noexpandtab " real tabs please! set nowrap " do not wrap lines set guioptions+=b "添加水平滚动条 "set smarttab " use tabs at the start of a line, spaces elsewhere """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Folding " Enable folding, but by default make it act like folding is off, because folding is annoying in anything but a few rare cases """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "set foldenable " Turn on folding "set foldmethod=indent " Make folding indent sensitive "set foldlevel=100 " Don't autofold anything (but I can still fold manually) "set foldopen-=search " don't open folds when you search into them "set foldopen-=undo " don't open folds when you undo stuff """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " File Explorer """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:explVertical=1 " should I split verticially let g:explWinSize=20 " width of 35 pixels """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Win Manager """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:winManagerWidth=20 " How wide should it be( pixels) "let g:winManagerWindowLayout = 'FileExplorer,TagsExplorer|BufExplorer' " What windows should it """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " CTags """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let Tlist_Ctags_Cmd = 'D:\Vim\Intellisense\cppft\ctags.exe' " Location of ctags let Tlist_Sort_Type = "name" " order by let Tlist_Use_Right_Window = 1 " split to the right side of the screen let Tlist_Compart_Format = 1 " show small meny let Tlist_Exist_OnlyWindow = 1 " if you are the last, kill yourself let Tlist_File_Fold_Auto_Close = 0 " Do not close tags for other files let Tlist_Enable_Fold_Column = 0 " Do not show folding tree let g:ctags_path='D:\Vim\Intellisense\cppft\ctags.exe' let g:ctags_statusline=1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Minibuf """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:miniBufExplTabWrap = 1 " make tabs show complete (no broken on two lines) let g:miniBufExplModSelTarget = 1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Matchit """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let b:match_ignorecase = 1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Perl """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let perl_extended_vars=1 " highlight advanced perl vars inside strings """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " cscope """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "if has("cscope") " set csprg=D:\Vim\vim70\cscope.exe " set csto=0 " set cst " set nocsverb " " add any database in current directory " if filereadable("cscope.out") " cs add cscope.out " " else add database pointed to by environment " elseif $CSCOPE_DB != "" " cs add $CSCOPE_DB " endif " set csverb "endif """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Custom Functions """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Select range, then hit :SuperRetab($width) - by p0g and FallingCow function! SuperRetab(width) range silent! exe a:firstline . ',' . a:lastline . 's/\v%(^ *)@ endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Useful abbrevs """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "iab xasp %> "iab xdate =strftime("%d/%m/%y %H:%M:%S") """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " python """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" if has("autocmd") " 自动检测文件类型并加载相应的设置 filetype plugin indent on " Python 文件的一般设置,比如不要 tab 等 autocmd FileType python setlocal et | setlocal sta | setlocal sw=4 " Python Unittest 的一些设置 " 可以让我们在编写 Python 代码及 unittest 测试时不需要离开 vim " 键入 :make 或者点击 gvim 工具条上的 make 按钮就自动执行测试用例 autocmd FileType python compiler pyunit autocmd FileType python setlocal makeprg=\"D:\Python24\python.exe\"\ ./alltests.py autocmd BufNewFile,BufRead test*.py setlocal makeprg=\"D:\Python24\python.exe\"\ % " 自动使用新文件模板 autocmd BufNewFile test*.py 0r \"D:\Vim\skeleton\test.py\" autocmd BufNewFile alltests.py 0r \"D:\Vim\skeleton\alltests.py\" autocmd BufNewFile *.py 0r \"D:\Vim\skeleton\skeleton.py\" endif " python auto-complete code " Typing the following (in insert mode): " os.lis " will expand to: " os.listdir( " Python 自动补全功能,只需要反覆按 Ctrl-N 就行了 "if has("autocmd") "autocmd FileType python set complete+=k\"D:\Vim\vim70\tools\pydiction-0.5\pydiction\" "endif au FileType python source D:\Vim\vimfiles\plugin\python.vim """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Python Debugger Script """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Block of python " python import time import vim def SetBreakpoint(): import re nLine = int( vim.eval( 'line(".")')) strLine = vim.current.line strWhite = re.search( '^(\s*)', strLine).group(1) vim.current.buffer.append( "%(space)spdb.set_trace() %(mark)s Breakpoint %(mark)s" % {'space':strWhite, 'mark': '#' * 30}, nLine - 1) for strLine in vim.current.buffer: if strLine == "import pdb": break else: vim.current.buffer.append( 'import pdb', 0) vim.command( 'normal j1') vim.command( 'map :py SetBreakpoint()') def RemoveBreakpoints(): import re nCurrentLine = int( vim.eval( 'line(".")')) nLines = [] nLine = 1 for strLine in vim.current.buffer: if strLine == 'import pdb' or strLine.lstrip()[:15] == 'pdb.set_trace()': nLines.append( nLine) nLine += 1 nLines.reverse() for nLine in nLines: vim.command( 'normal %dG' % nLine) vim.command( 'normal dd') if nLine nCurrentLine -= 1 vim.command( 'normal %dG' % nCurrentLine) vim.command( 'map :py RemoveBreakpoints()') def RunDebugger(): vim.command( 'wall') strFile = vim.eval( "g:mainfile") vim.command( "!start python -m pdb %s" % strFile) vim.command( 'map :py RunDebugger()') EOF """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " ShowFunc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:showfuncctagsbin = 'D:\Vim\Intellisense\cppft\ctags.exe' map! ShowFunc map ShowFunc |