vim之函數跳轉功能


 

現在可以vim中試着打開taglist,輸入命令
:TlistToggle 來打開和關閉taglist窗口。(命令可以簡寫為Tlist)

首先要安裝ctags, 在ubuntu下直接輸入

sudo apt-get install exuberant-ctags


接着,在源文件目錄樹(這里是在/home/ballack/test/目錄下)執行如下命令:

ctags -R .

即可在/home/ballack/test目錄下生成一個tags文件, 這個文件就是所有函數和變量的索引列表。


tags文件:


接着打開用vim打開任一文件(在此打開dhd_linux.c), 如下圖:

找到模塊定義函數, module_init,如下圖:


此時將光標移到想要跳轉的函數或變量上(在此以函數dhd_module_init為例),

通過快捷鍵 " CTRL + ] ",  即可快速跳轉到函數dhd_module_init定義處, 如圖:

 

此時如果想要回到跳轉之前的位置, 只需要通過快捷鍵“ CTRL + T ”即可。這種方式不局限於同一文件中的跳轉,也適合於不同文件之間的跳轉,而且按了多少次“ CTRL + ] ”,就可以按多少次“ CTRL + T ”原路返回,非常方便好用!!!

 

 

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

 

1、加強的 Python 語法高亮顯示;

 

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

 

3、在 vim 中顯示 ctag 序列列表;

 

4、 Python 函數、類的自動補全;

 

5、Python 代碼自動折疊;

 

一、准備

 

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

 

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

 

# 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 環境的配置。

 

二、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    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM