VIM編輯器支持Python開發環境(Vim+Ctags+Taglist)

在Linux下用VI編輯器進行Python開發,有必要對VI編輯器進行一些配置,使其具有如下特性:javascript

一、增強的 Python 語法高亮顯示;php

二、對腳本、項目生成 ctag 序列;css

三、在 vim 中顯示 ctag 序列列表;html

四、 Python 函數、類的自動補全;java

五、Python 代碼自動摺疊;python

1、準備c++

本文以 CentOS 5.6 爲例對系統默認自帶的 vim 進行配置。在開始以前須要確認系統已經安裝瞭如下 RPM 包:vim-enhanced、ctags。vim

1. 配置 vim alias,使 vim 成爲默認的 vi 編輯器:bash

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

2. 複製默認的 .vimrc 初始化文件:編輯器

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

編輯用戶VI環境,添加以下配置:

set tabstop=4                                                     

set softtabstop=4                                                

set shiftwidth=4                                                

set expandtab                                                   

set autoindent                                               

set foldmethod=indent 

這樣,咱們就完成了對 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 編輯器,並輸入如下命令:

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

爲了更方便的使用 tablist,咱們還能夠在 vim 中作一些設置:

# vi ~/.vimrc

添加以下指令:

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 的配置參數:

let Tlist_Auto_Open=1    #"在啓動 vim 後,自動打開 taglist 窗口。 
let Tlist_File_Fold_Auto_Close=1    
#"taglist 只顯示當前文件 tag,其它文件的tag摺疊。

在 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/vim72/pydiction/
# vi ~/.vimrc

增長以下兩行:

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

添加:

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: 查找指定標識符的使用位置

附:Python開發(配置Ctag+Taglist後)的用戶環境示例

let g:pydiction_location = '/usr/share/vim/vim72/pydiction/complete-dict'                                                           set tabstop=4                                                  

set softtabstop=4                                                

set shiftwidth=4                                                

set expandtab                                                  

set autoindent                                                   

set foldmethod=indent

let Tlist_Auto_Highlight_Tag=1                                   

let Tlist_Auto_Open=1                                            

let Tlist_Auto_Update=1                                         

let Tlist_Display_Tag_Scope=1                                  

let Tlist_Exit_OnlyWindow=1                                      

let Tlist_Enable_Dold_Column=1                                 

let Tlist_File_Fold_Auto_Close=1                             

let Tlist_Show_One_File=1                                      

let Tlist_Use_Right_Window=1                                     

let Tlist_Use_SingleClick=1                                                 

nnoremap <silent> <F8> :TlistToggle<CR>   

filetype plugin on                                                               

autocmd FileType python set omnifunc=pythoncomplete#Complete

autocmd FileType javascrīpt set omnifunc=javascriptcomplete#CompleteJS                                                   autocmd FileType html set omnifunc=htmlcomplete#CompleteTags

autocmd FileType css set omnifunc=csscomplete#CompleteCSS                

autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags                

autocmd FileType php set omnifunc=phpcomplete#CompletePHP                   

autocmd FileType c set omnifunc=ccomplete#Complete    

相關文章
相關標籤/搜索