Python开发环境配置 Vim + Ctags+ TagList

在 Linux 下对 vim 进行一些配置,使之支持以下特性:php

1. 增强的 Python 语法高亮显示;python

2. 对脚本、项目生成 ctag 序列;c++

3. 在 vim 中显示 ctag 序列列表;vim

4. Python 函数、类的自动补全;bash

5. Python 代码自动折叠;编辑器

1、准备函数

本文以 CentOS 5.6 为例对系统默认自带的 vim 进行配置。在开始以前须要确认系统已经安装了如下 RPM 包:vim-enhanced、ctags。spa

1. 配置 vim alias,使 vim 成为默认的 vi 编辑器:.net

# echo alias vi=\'vim\' >> ~/.bashrc # source ~/.bashrc

2. 复制默认的 .vimrc 初始化文件:插件

# cp /usr/share/vim/vim70/vimrc_example.vim  ~/.vimrc
# vi ~/.vimrc

能够添加一些配置:

1 2 3 4 5 6
set tabstop=4 set softtabstop=4 set shiftwidth=4 set expandtab set autoindent set number

这样,咱们就完成了对 vim 的一些前期准备。下面开始进行 vim Python IDE 环境的配置。

2、Python IDE 环境配置

1. 增强 Python 语法高亮显示
下载加强的 Python 语法高亮脚本最新版本:http://www.vim.org/scripts/script.php?script_id=790 下载后获得 python.vim。

# mv /usr/share/vim/vim70/syntax/python.vim  /usr/share/vim/vim70/syntax/python.vim.ori # cp python.vim  /usr/share/vim/vim70/syntax/

2. 对脚本/项目生成 ctag  序列
进入到 python 程序脚本(项目)所在的目录,在该目录下执行:

# ctag -R *

会在当前目录下自动生成一个 ctags 文件,该文件记录了程序/项目的函数、类等的分析序列记录。有关 ctag 的详细用法请阅读 ctag 的 manpage。

3. 在 vim 中显示 ctag 序列列表
下载 taglist 插件:http://www.vim.org/scripts/script.php?script_id=273 下载后获得 taglist_45.zip。

# unzip taglist_45.zip
解压后获得两个文件:plugin/taglist.vim(taglist 插件)、doc/taglist.txt(taglist 帮助文件)

# cp plugin/taglist.vim  /usr/share/vim/vim70/plugin/ # cp doc/taglist.txt  /usr/share/vim/vim70/doc/ # vi

启动一个 vi 编辑器,并输入如下命令:

1 2
:helptags  /usr/share/vim/vim70/doc    "生成 taglist 帮助文件列表 :help  taglist.txt    "查看 taglist 帮助信息

为了更方便的使用 tablist,咱们还能够在 vim 中作一些设置:

# vi ~/.vimrc

添加以下指令:

1 2 3
let Tlist_Show_One_File = 1            "不一样时显示多个文件的tag,只显示当前文件的。 let Tlist_Exit_OnlyWindow = 1          "若是 taglist 窗口是最后一个窗口,则退出 vim。 let Tlist_Use_Right_Window = 1         "在右侧窗口中显示 taglist 窗口。

当编辑程序代码文件时,能够在 vi 中输入 :Tlist 来启动 taglist 窗口。

下面是一些 .vimrc 中有关 taglist 的配置参数:

1 2 3 4
Tlist_Auto_Open=1    "在启动 vim 后,自动打开 taglist 窗口。 Tlist_File_Fold_Auto_Close=1    "taglist 只显示当前文件 tag,其它文件的tag折叠。 Tlist_WinHeight & Tlist_WinWidth    "能够设置taglist窗口的高度和宽度。 Tlist_Use_Horiz_Window=1    "设置taglist窗口横向显示。

在 taglist 窗口中,可使用如下操做指令:

: 跳到光标下tag所定义的位置,用鼠标双击此tag功能也同样 o: 在一个新打开的窗口中显示光标下tag : 显示光标下tag的原型定义 u: 更新taglist窗口中的tag s: 更改排序方式,在按名字排序和按出现顺序排序间切换 x: taglist窗口放大和缩小,方便查看较长的tag +: 打开一个折叠,同 zo -: 将tag折叠起来,同 zc *: 打开全部的折叠,同 zR =: 将全部 tag 折叠起来,同 zM [[: 跳到前一个文件 ]]: 跳到后一个文件 q: 关闭 taglist 窗口 : 显示帮助

4. Python 函数、类的自动补全
CentOS 5.6 自带的 vim7.0 已经支持了 PHP、Python、Ruby 等多种语言的自动补全,只需进行开启便可。

开启 Python 自动补全支持:

# echo 'autocmd FileType python set omnifunc=pythoncomplete#Complete' >> ~/.vimrc

这样,当编写 python 脚本时,使用 + x    + o 便可打开自动补全菜单,在顶部,还有对应的说明帮助信息 (docstring)。

vim 自带的 pythoncomplete.vim 虽然很方便,还支持 docstring,可是有时并不能方便的列出一些函数的自动补全。因此,懒人能够继续安装 Pydiction 插件:

下载 Pydiction 插件:http://www.vim.org/scripts/script.php?script_id=850 下载后获得 pydiction-1.2.zip。

# unzip  pydiction-1.2.zip # cp python_pydiction.vim  /usr/share/vim/vim70/ftplugin # mkdir  /usr/share/vim/vim70/pydiction # cp complete-dict  pydiction.py  /usr/share/vim/vim70/pydiction/ # vi ~/.vimrc

增长以下两行:

1 2
let g:pydiction_location = '/usr/share/vim/vim70/pydiction/complete-dict' let g:pydiction_menu_height = 20

打开 python 脚本文件,在编写 python 程序时,按 TAB 键便可激活自动补全菜单。

5. Python 代码自动折叠
下载 python_fold 插件:http://www.vim.org/scripts/script.php?script_id=515 下载后获得 python_fold.vim。

# cp python_fold.vim  /usr/share/vim/vim70/plugin/ # vi ~/.vimrc

添加:

1
set foldmethod=indent

这样,再编辑 python 文件时会发现代码已经做了折叠处理。下面是有关折叠的一些命令:

zo: 打开光标位置的折叠代码; zc: 折叠光标位置的代码; zr: 将文件中全部折叠的代码打开; zm: 将文件中全部打开的代码折叠; zR: 做用和 zr 相似,但会打开子折叠(折叠中的折叠); zM: 做用和 zm 相似,但会关闭子折叠; zi: 折叠与打开操做之间的切换命令;

taglist用法

1.taglist
注意:taglist依赖于ctags,因此要先装ctags,不然taglist装了也无法用!
(1)将taglist_45.zip解压获得的两个文件夹:doc和plugin 放到 ~/.vim文件夹里面,若是主目录下没有这个隐藏的文件夹,就建一个。
(2)
plugin/taglist.vim – taglist插件
doc/taglist.txt - taglist帮助文件
(3)经常使用快捷键
ctrl+ww    在列表和源文件中切换
ctrl + ]     查看函数定义
ctrl + o     返回上一级文件。
gf             查看头文件
gd        转到当前光标所指的局部变量的定义处。
*        转到当前光标所在单词的下一次出现的地方。
#        转到当前光标所在的单词的上一次出现的地方。
<CR>          跳到光标下tag所定义的位置,用鼠标双击此tag功能也同样   
o             在一个新打开的窗口中显示光标下tag   
<Space>       显示光标下tag的原型定义   
u             更新taglist窗口中的tag   
s             更改排序方式,在按名字排序和按出现顺序排序间切换  
x             taglist窗口放大和缩小,方便查看较长的tag    
+             打开一个折叠,同zoctags经常使用快捷键ctags经常使用快捷键   
-             将tag折叠起来,同zc   
*             打开全部的折叠,同zR   
=             将全部tag折叠起来,同zM   
[[            跳到前一个文件  
]]            跳到后一个文件 
q             关闭taglist窗口  

taglist 窗口ENTER 

2.ctags
(1)安装ctags : sudo apt-get install ctags
(2)使用
ctags -R      对当前目录下的文件递归产生tags文件。
ctags file.c
(3)在.vimrc文件中添加配置
:TlistToggle 或 :Tlist     显示函数列表
在.vimrc文件中加上键盘映射
map <F8> :Tlist<CR>
这样我就可使用快捷键F8直接进入tlist模式了。这里注意<F8>和 : 之间有空格的。
在.vimrc下加入一下两行
set tags=tags;
set autochdir
这样使用tags时能够首先在当前目录下查找tags文件,若是没有则转到父目录查找。依次向上。

查看帮助文件
:help helptags
:help taglist.txt

3.cscope
(1)仔细阅读了cscope的手册后发现,原来cscope在产生索引文件时,只搜索类型为 C, lex和yacc的文件(后缀名为.c, .h, .l, .y),
C++的文件根本没有生成索引。不过按照手册上的说明,cscope支持c++和Java语言的文件。
因而按照cscope手册上提供的方法,先产生一个文件列表,而后让cscope为这个列表中的每一个文件都生成索引。
为了方便使用,编写了下面的脚原本更新cscope和ctags的索引文件:

 #!/bin/sh  
find  . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files  
cscope  -bkq -i cscope.files  
ctags  -R     
 
 -R : 在生成索引文件时,搜索子目录树中的代码
 -b : 只生成索引文件,不进入cscope的界面
 -k : 在生成索引文件时,不搜索 / usr / include目录
 -q : 生成cscope . in . out和cscope . po . out文件,加快cscope的索引速度
将这个脚本保存到/usr/local/bin/cscopes.sh,之后就能够在源代码目录下使用sudo bash cscope.sh命令直接生成索引拉!
(2)cscope经常使用快捷键:
先按 ctrl+\ 而后  
c: 查找该函数被调用的位置  
d: 查找该函数调用了哪些函数  
e: 查找指定的正规表达式 f: 查找指定的文件  
g: 查找指定标识符的定义位置  
i: 查找该文件在哪些地方被包含  
s: 查找指定标识符的使用位置