最近Team里,很多人开始学习python,我做的第一次演讲时,重点讲了Vim的使用以及Vim作为Python的开发环境。现在遇到的问题是,Vim的学习曲线太陡峭了,很多人不能很快的掌握。此外,使用Vimpab作为Python调试工具,很多人不适应。

我们组里的Kevin,介绍了使用Eclipse和Pydev作为Python的开发环境,由于基于GUI,很多人都很容易接受。我对Eclipse很久以前有过研究,好长时间没有用了,今天花了3个多小时的时间,在网上找了一个Eclim的插件,装上试用了一下,还真可以,下面我就将具体的配置步骤说一下。
配置步骤:
  • 下载eclim的build(version:1.7.4), http://sourceforge.net/projects/eclim/files/latest/download
  • 我使用的windows下的版本,双击下载的eclim_1.7.4.jar文件直接安装。
  • 安装的要选择pydev的那个项目,建议,先把Eclipse+pyDev配置好
  • 安装完成后,在vim下vimfiles会增加Eclim相关文档,Eclipse中也会增加相关的插件文件。
  • 在陈皓的那篇介绍文章里( http://coolshell.cn/articles/1837.html ),介绍vim和Eclipse协同使用的三种场景,我主要属于第一种场景,即vim是我主要的编辑工具。在调试比较复杂的python程序的时候,使用Eclipse进行调试。
    场景一:Eclipse中使用vim
    1. Open Eclipse
    2. Windows->Show View->Others
    3. select Elcim->eclimd in the Show View dialog.
    4. eclimd console will be shown. please see the following pictures.
    5.select one *.py files and select Open With command from RMB menu.
    6.Vim editor will be shown in the eclipse.
    场景二:Vim为主,同时使用Eclipse
    首要的注意点:ProjectCreate命令对python来说没用用,换而言之,就是不能再vim通过命令行创建eclipse能够识别的project文件夹。变通方法是,在Eclipse创建project,然后在vim中打开就可以了。
    1. 打开Eclipse和vim同时,因为两者之间是server和client的关系。
    2. 在Eclipse中创建一个project。
    3. 在vim中使用:ProjectImport命令导入该project。
    4. 使用:ProjectOpen+<Project Name>,打开project
    5. :ProjectTree+<ProjectName>,显示project树。
    6. 打开相应的*.py文件,在vim中进行编辑,保存。
    7.查看Eclipse,相应的文件同时可以用。
    这几年,一直在为找一种强的编程用的编辑器,而不断的重试着,试过Notepad++, Scite,UltraEdit等等,但是一直不能达到自己的要求。
    最近遇到了“神的编辑器“---GVIM,终于找到了知音。
    我希望GVIM,可以给满足我一下的配置目的:
  • C/C++ IDE
  • Python IDE
  • PHP IDE
  • VBScript IDE
  • HTML, CSS IDE
  • Java IDE
  • 1. 软件及插件各种地址
  • gvim: http://www.vim.org/download.php#pc
  • chs vim help doc: http://sourceforge.net/projects/vimcdoc/files/win32-install-unicode/1.8.0/vimcdoc-1.8.0-setup-unicode.exe/download
  • Ctags: http://sourceforge.net/projects/ctags/files/ctags/5.8/ctags58.zip/download
  • taglist: http://www.vim.org/scripts/script.php?script_id=273
  • winmanager: http://www.vim.org/scripts/script.php?script_id=95
  • cscope(linux): http://cscope.sourceforge.net/
  • cscope(windows): http://sourceforge.net/projects/mslk/files/
  • Grep: http://gnuwin32.sourceforge.net/packages/grep.htm
  • C++ IDE
  • c.vim: http://www. vim .org/scripts/download_script.php?src_id=9679
  • mingw: http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/
  • omicppcomplete: http://www.vim.org/scripts/script.php?script_id=1520
  • a.vim:
  • Python IDE
  • pydiction: http://www.vim.org/scripts/script.php?script_id=850
  • vimpdb: http://code.google.com/p/vimpdb/
  • rope: http://pypi.python.org/pypi/rope
  • ropemode: http://pypi.python.org/pypi/ropemode
  • ropevim: http://pypi.python.org/pypi/ropevim
  • pyflakes: http://www.vim.org/scripts/script.php?script_id=2441
  • PHP IDE
  • NERDTREE: http://www.vim.org/scripts/script.php?script_id=1658
  • 2. 安装顺序
  • 安装gVIM
  • Windows 7系统中, C:\Users\usrname\路径下,创建一个新的_vimrc。 如果不这样做,你会发现VIM中许多快捷键无法使用。
  • 安装中文版help文档,我认为还是多看看英文帮助文档更好。
  • 3. 阅读代码插件设置
    1\Ctags
    tags文件是由ctags程序产生的一个索引文件, ctags程序其是叫"Exuberant Ctags", 是Unix上面ctags程序的替代品, 并且比它功能强大, 是大多数Linux发行   版 上默认的ctags程序. 那么tags文件是做什么用的呢? 如果你在读程序时看了一个函数调用, 或者一个变量, 或者一个宏等等, 你想知道它们的定义在哪儿, 怎么办呢? 用grep? 那会搜出很多不相干的地方. 现在流行用是的<C-]>, 谁用谁知道呀, 当光标在某个函数或变量上时, 按下"Ctrl+]", 光标会自动跳转到其定义处, 够厉害吧, 你不用再羡慕Visual Studio的程序员了, 开始羡慕我吧~_~. --- 摘自吴垠的博客
    在windows下,该软件同样可以使用,具体步骤如下:
  • ec57w32.zip 解压,在解压后文件夹中找到 ctags.exe ,将其复制到 C:\ProgramFiles\Vim\vim73\tools 下(Note:要将该路径加入系统环境变量PATH中,不然,系统不认识),并编辑_vimrc文件,添加以下内容:
    set tags=tags;
    set autochdir
    打开cmd命令行,切换到你要查看的源代码的根目录处,运行
    ctags -R
    将会在此目录处生成一个tags文件。
    用gvim打开一个代码文件,将光标放到某一函数名上,如下图的UpdateViewByPosNo(),按下"ctrl+]",光标会自动跳转到定义处。 按下"ctrl+T"会跳回到原来的位置。变量、结构体、宏等等,都可以这样做。当你的源文件有更新时,只能重新运行 ctags -R 命令,来更新tags文件。
  • taglist_45.zip 解压,解压后包含一个doc文件夹和一个plugin文件夹,将其中内容分别复制到 C:\Program Files\Vim\vim73 下的doc及plugin中。
    在_vimrc文件中加入以下内容:
    let Tlist_Show_One_File=1
    let Tlist_Exit_OnlyWindow=1

    用gvim打开代码文件(已生成过tags文件), :Tlist
    ,TagList窗口即出现在左侧。
    用相同的方法将 winmanager.zip 解压和拷贝,在_vimrc文件中加入以下内容:
    let g:winManagerWindowLayout='FileExplorer|TagList'
    nmap wm :WMToggle<cr>

    用gvim打开代码文件,normal状态下输入命令" wm ",就可以看FileExplorer窗口和Taglist窗口了。
    "TlistUpdate可以更新tags
    map <F3> :silent! Tlist<CR> "按下F3就可以呼出了
    let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行
    let Tlist_Use_Right_Window=0     "让窗口显示在右边,0的话就是显示在左边
    let Tlist_Show_One_File=1     "让taglist可以同时展示多个文件的函数列表,如果想只有1个,设置为1
    let Tlist_File_Fold_Auto_Close=1     "非当前文件,函数列表折叠隐藏
    let Tlist_Exit_OnlyWindow=0        "当taglist是最后一个分割窗口时,自动推出vim
    let Tlist_Process_File_Always=0     "不是一直实时更新tags,因为没有必要
    let Tlist_Inc_Winwidth=0
    "winmanger
    let g:winManagerWindowLayout='FileExplorer|TagList'
    nmap wm :WMToggle<cr>
    F3------ 代替Tlist
    wm----- 打开FileExplorer和Taglist窗口
    3\ CSCope
    首先,我们还是了解一下什么是cscope。简单来讲,cscope主要用来协助浏览C/C++语言,他的功能要强大于ctags,不仅支持变量/函数的定义查询,还记录了函数的调用处查询等功能,所以也有说法称cscope的诞生就是为了取代ctags。无论这个说法是否有据可依,对使用方来说,当然是希望功能越强大方便越好啦,所以这也是我们为什么讲ctags和cscope都装上的原因啦。

    第二,我们来说一下 vim 的支持。cscope没有ctags那么幸运,cscope在大部分的 linux 下的 vim 中是没有提供支持的(但是在windows下的g vim 都提供了支持),所以,如果你打算要在linux下面使用 vim +cscope,那么1,你要下载安装cscope。2,你要重新编译 vim ,加上支持选项:
    --enable-cscope
    当然,cscope也提供了windows版(否则windows下g vim 怎么和cscope搭配嘛……),分别下载地址如下:
    cscope(linux):
    http://cscope.sourceforge.net/
    cscope(windows): http://sourceforge.net/projects/mslk/files/

    当然,安装的最后一步就是,不要忘记讲cscope放进的环境变量里!

    在vimrc中配置如下:

    "==============================================================================================================

    "CScope plug-in
    "==============================================================================================================
    "let g:CODEPATH="D://vim_library//cscope_home"
    "cs add D:/vim_library/cscope_home/cscope.out
    if(has("win32") || has("win95") || has("win64") || has("win16")) "Judge the OS type
    let g:iswindows=1
    let g:iswindows=0
    endif
    map <C-F12> :call Do_CsTag()<CR>
    nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
    nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
    nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
    nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    function Do_CsTag()
    let dir = getcwd()
    if filereadable("tags")
    if(g:iswindows==1)
    let tagsdeleted=delete(dir."\\"."tags")
    let tagsdeleted=delete("./"."tags")
    endif
    if(tagsdeleted!=0)
    echohl WarningMsg | echo "Fail to do tags! I cannot delete the tags" | echohl None
    return
    endif
    endif
    if has("cscope")
    silent! execute "cs kill -1"
    endif
    if filereadable("cscope.files")
    if(g:iswindows==1)
    let csfilesdeleted=delete(dir."\\"."cscope.files")
    let csfilesdeleted=delete("./"."cscope.files")
    endif
    if(csfilesdeleted!=0)
    echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.files" | echohl None
    return
    endif
    endif
    if filereadable("cscope.out")
    if(g:iswindows==1)
    let csoutdeleted=delete(dir."\\"."cscope.out")
    let csoutdeleted=delete("./"."cscope.out")
    endif
    if(csoutdeleted!=0)
    echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.out" | echohl None
    return
    endif
    endif
    if(executable('ctags'))
    "silent! execute "!ctags -R --c-types=+p --fields=+S *"
    silent! execute "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ."
    endif
    if(executable('cscope') && has("cscope") )
    if(g:iswindows!=1)
    silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' -o -name '*.py' -o -name '*.pyw' -o -name '*.php'> cscope.files"
    silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs,*.py,*.php >> cscope.files"
    endif
    silent! execute "!cscope -b"
    execute "normal :"
    if filereadable("cscope.out")
    execute "cs add cscope.out"
    endif
    endif
    endfunction
    "solution the confliction between ctags and cscope
    if has("cscope")
    set cscopequickfix=s-,c-,d-,i-,t-,e-
    set csto=0
    set cst
    set csverb
    endif
    看到亮点了吗,如上所配置,注意红色的标注,按CTRL+F12就可以生成,tags,cscope.files,cscope.out了,然后在按ctrl+shift+2(表示@)+S,g等等来找各种定义了。
    cscope的主要功能是通过同的子命令"find"来实现的
    "cscope find"的用法:
    cs find c|d|e|f|g|i|s|t name
    0 或 s 查找本 C 符号(可以跳过注释) 1 或 g 查找本定义 2 或 d 查找本函数调用的函数 3 或 c 查找调用本函数的函数 4 或 t 查找本字符串 6 或 e 查找本 egrep 模式 7 或 f 查找本文件 8 或 i 查找包含本文件的文件

    配置_vimrc,设置ctrl+F1为快捷键

    "==============================================================================================================
    "Grep: Find the files in the project files
    "==============================================================================================================
    "Grep plugin settings
    nnoremap <silent> <C-F1> :Grep<CR>
    启用 MiniBufExplorer ,管理vim的buffer(缓冲区),快速的在多个同时编辑的文件间切换。
    在编程的时候不可能永远只编辑一个文件, 你肯定会打开很多源文件进行编辑, 如果每个文件都打开一个vim进行编辑的话那操作起来将是多麻烦啊, 所以vim有buffer(缓冲区)的概念, 可以看vim的帮助:
    :help buffer
    vim自带的buffer管理工具只有:ls, :bnext, :bdelete 等的命令, 既不好用, 又不直观. 现在隆重向你推荐一款vim插件(plugin): MiniBufExplorer

    使用方法:
    重新启动vim, 当你只编辑一个buffer的时候
    MiniBufExplorer派不上用场, 当你打开第二个buffer的时候, MiniBufExplorer窗口就自动弹出来了, 见下图:

    (--- 图13 ---)
    上面那个狭长的窗口就是MiniBufExplorer窗口, 其中列出了当前所有已经打开的buffer, 当你把光标置于这个窗口时, 有下面几个快捷键可以用:
    向前循环切换到每个buffer名上 <S-Tab> 向后循环切换到每个buffer名上 <Enter> 在打开光标所在的buffer 删除光标所在的buffer 是用<C-箭头键>切换到上下左右窗口中去
    "==============================================================================================================
    "minibuffer plugin
    "==============================================================================================================
    let g:miniBufExplMapCTabSwitchBufs = 1
    let g:miniBufExplMapWindowNavVim = 1
    let g:miniBufExplMapWindowNavArrows = 1
    D:/Program Files/Vim/vim73/syntax下找到 c.vim 和 cpp.vim,分别添加以下内容:
    syn match cFunction "/<[a-zA-Z_][a-zA-Z_0-9]*/>[^()]*)("me=e-2
    syn match cFunction "/<[a-zA-Z_][a-zA-Z_0-9]*/>/s*("me=e-1
    c.vim插件
    let OmniCpp_NamespaceSearch = 1
    let OmniCpp_GlobalScopeSearch = 1
    let OmniCpp_ShowAccess = 1
    let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
    let OmniCpp_MayCompleteDot = 1 " 输入 . 后自动补全
    let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
    let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
    let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
    " 自动关闭补全窗口
    au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
    set completeopt=menuone,menu,longest
    这样,在插入模式编辑 C/C++ 源文件时按下 . -> :: ,或者手动按下 Ctrl+X Ctrl+O 后就会弹出自动补全窗口,此时可以用 Ctrl+N 和 Ctrl+P 上下移动光标进行选择。

    omni-completion可以实现部分的代码补全功能,但是不是很全,所以我们启用 pydiction ,更丰富的的代码补全功能,按tab补全代码。

    下载 pydiction ,解压后有4个文件,拷贝python_pydiction.vim和complete-dict到ftplugin目录,修改_vimrc

    "Pydiction--自动补全

    let g:pydiction_location='D:\Vim\vim73\ftplugin\complete-dict'

    let g:pydiction_menu_height = 20

    启用 VimPdb ,可以调试Python程序。

    下载 VimPdb ,解压后拷贝VimPdb.py,VimPdb.vim到plugin即可。

    用vim代开python代码文件,按F5运行,然后按F2设置断点,在运行到断点后可以用按F12可以查看Stack Trace,F3查看变量和参数值。

    更高级的使用可以查看文档。

  • Highlighting of currently debugged line and breakpoint lines.
  • F5 - Run/continue running.
  • F2 - Toggle breakpoint at current line
  • Ctrl-F2 / Shift-F2 - Toggle conditional/temporary breakpoint.
  • F7 / F8 - Step into/over
  • F12 - Print stack trace
  • F3 / Ctrl-F3 - Eval/Exec a given statement (in the current debugging context)
  • Save/load breakpoints into session files.
  • Cross-platform
  • CTRL+D--- 直接运行程序
  • 启用ropevim ,重构Python程序

    下载r ope , ropemode ropevim ,分别解压缩,打开控制台,cd到解压缩目录,执行python setup.py install安装。

    然后拷贝ropevim.vim文件到plugin目录。这样就安装好了。我们试试重构一个类名,光标放在类名上,按Ctrl-c 然后连按两下r。

    可以看到quickfix窗体要求你输入New name:,输入新的名称回车,再回车,重构就完成了。如下图

    Python代码检查

    在Vim的ftplugin目录下新建一个python目录。

    下载 pyflakes ,解压缩后把pyflakes.vim文件和pyflakes目录拷贝套ftplugin\python目录中。

    打开一个有问题的python源代码文件,执行命令:cc,即可进行代码检查,如下图中找到了两处错误。

    1. Download the perl-support plug-in: http://www.vim.org/scripts/script.php?script_id=556
    2. unzip it and copy them to vimfiles.
    3. using the perl
    作者: Leo_wl
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。