• Eclipse 和 Vim 协同使用使用Eclim插件开发Python程序


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

     
    我们组里的Kevin,介绍了使用Eclipse和Pydev作为Python的开发环境,由于基于GUI,很多人都很容易接受。我对Eclipse很久以前有过研究,好长时间没有用了,今天花了3个多小时的时间,在网上找了一个Eclim的插件,装上试用了一下,还真可以,下面我就将具体的配置步骤说一下。
     
    配置步骤:
    1. 下载eclim的build(version:1.7.4), http://sourceforge.net/projects/eclim/files/latest/download
    2. 我使用的windows下的版本,双击下载的eclim_1.7.4.jar文件直接安装。 
    3. 安装的要选择pydev的那个项目,建议,先把Eclipse+pyDev配置好
    4. 安装完成后,在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,相应的文件同时可以用。
         

     
     
     
    GVIM的配置
     
    这几年,一直在为找一种强的编程用的编辑器,而不断的重试着,试过Notepad++, Scite,UltraEdit等等,但是一直不能达到自己的要求。
    最近遇到了“神的编辑器“---GVIM,终于找到了知音。
     
    我希望GVIM,可以给满足我一下的配置目的:
    • C/C++ IDE
    • Python IDE
    • PHP IDE
    • VBScript IDE
    • HTML, CSS IDE
    • Java IDE
     
    1. 软件及插件各种地址
    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文件。
     
    快捷键:
        CTRL + ]------ 光标跳到定义处
        CTRL + T----- 光标跳回原来的位置
        2\ Taglist&winmanager
    • 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窗口了。
             在_vmrc中增加如下的,
    "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下的gvim都提供了支持),所以,如果你打算要在linux下面使用vim+cscope,那么1,你要下载安装cscope。2,你要重新编译vim,加上支持选项:
    --enable-cscope
    当然,cscope也提供了windows版(否则windows下gvim怎么和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
    else
        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")
            else
                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")
            else
                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")
            else
                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"
            else
                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 查找包含本文件的文件
        4\Grep

    启用Grep,在工程中查找 

    Grep是linux中命令,如果你不熟悉可以看Grep的文档

    下载安装Grep for windows

    下载Vim的Grep插件,grep.vim放在plugin目录

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

     

    "==============================================================================================================
    "Grep: Find the files in the project files
    "==============================================================================================================
    "Grep plugin settings
    nnoremap <silent> <C-F1> :Grep<CR>
     
     
        5\ Minibuffer
    启用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, 当你把光标置于这个窗口时, 有下面几个快捷键可以用:
    <Tab> 向前循环切换到每个buffer名上
    <S-Tab> 向后循环切换到每个buffer名上
    <Enter> 在打开光标所在的buffer
    d 删除光标所在的buffer

    以下的两个功能需要在~/.vimrc中增加:
    let g:miniBufExplMapCTabSwitchBufs = 1

    <C-Tab> 向前循环切换到每个buffer上,并在但前窗口打开
    <C-S-Tab> 向后循环切换到每个buffer上,并在但前窗口打开

    如果在~/.vimrc中设置了下面这句:
    let g:miniBufExplMapWindowNavVim = 1
    则可以用<C-h,j,k,l>切换到上下左右的窗口中去,就像:
    C-w,h j k l    向"左,下,上,右"切换窗口.
    在~/.vimrc中设置:
    let g:miniBufExplMapWindowNavArrows = 1
    是用<C-箭头键>切换到上下左右窗口中去
     
    "==============================================================================================================
    "minibuffer plugin
    "==============================================================================================================
    let g:miniBufExplMapCTabSwitchBufs = 1
    let g:miniBufExplMapWindowNavVim = 1
    let g:miniBufExplMapWindowNavArrows = 1
                
     
    4. C/C++ IDE配置
    • C/C++函数高亮
            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插件
    下载c.vim插件,并解压到vimfiles中,不用做任何设置,注意只要有filetype plugin on在vimrc文件中
    • Mingw
    安装mingw,用c.vim中快捷键,进行编译,运行
    • omicppcomplete 插件--自动补全
    解压omicppcomplete到vimfiles文件夹中,并在vimrc进行如下设置:
     
    " OmniCppComplete
    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 上下移动光标进行选择。
    • a插件---头文件和源程序之间的切换
    直接可以:A,打开.cpp和.h对应的文件,:AV,打开.cpp和.h对应的文件,并且分屏。
     
    5. Python IDE 配置
    • pydiction---自动补全

    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,可以调试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---重构

    启用ropevim ,重构Python程序

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

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

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

    • pyflakes---python代码检查

    Python代码检查

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

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

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

    6.Perl IDE 设置

     
    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
  • 相关阅读:
    20200209 ZooKeeper 3. Zookeeper内部原理
    20200209 ZooKeeper 2. Zookeeper本地模式安装
    20200209 Zookeeper 1. Zookeeper入门
    20200206 尚硅谷Docker【归档】
    20200206 Docker 8. 本地镜像发布到阿里云
    20200206 Docker 7. Docker常用安装
    20200206 Docker 6. DockerFile解析
    20200206 Docker 5. Docker容器数据卷
    20200206 Docker 4. Docker 镜像
    Combining STDP and Reward-Modulated STDP in Deep Convolutional Spiking Neural Networks for Digit Recognition
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2471970.html
Copyright © 2020-2023  润新知