誰說Vim不是IDE?(四)


系列4主要為大家介紹使用Vim實現代碼瀏覽、索引、標簽、標記、檢索等功能,主要包括ctags、taglist和visualmark,尤其是ctags,是后續各種插件的基礎,能夠熟練的掌握和理解為佳。下面進入正文:

ctags

1、下載地址

http://ctags.sourceforge.net

2、功能說明

嚴格意義上來說,ctags並不是Vim的插件,而是Linux/Unix下的標簽命令。通過ctags -R命令可以對當前目錄下源代碼中的類、函數、方法、變量、宏等元素進行索引處理,並生成索引文件。Vim使用ctags生成的tag文件,即可實現IDE中常用的代碼跳轉功能,實乃居家旅行代碼索引的常備利器。ctags不僅支持c/c++/java等靜態語言,還支持python/perl/php/jsp等動態腳本語言,就目前我的使用情況,ctags基本不支持Objective-C,對Ruby支持的也很糟糕,隨着這些語言的普及和發展,希望后續版本的ctags會對更多的編程語言有更好的支持。

3、安裝

對於Ubuntu,可以使用如下命令安裝:sudo apt-get install ctags,安裝完成后在終端鍵入ctags --help,看到正常的幫助信息就說明安裝成功了。

對於Mac用戶來說,OS X自帶了ctags命令,但這並不是vim所需要的ctags,要重新安裝:sudo port install ctags。由於OS X自帶的ctags位於/usr/bin目錄下,一般在PATH中是優先加載的,所以安裝完成后,還需要設置一下環境變量,確保你在命令行使用的是新安裝的ctags。如果沒做特殊設置,安裝的ctags一般在/opt/local/bin下,在當前用戶的.profile中增加如下代碼:export PATH=/opt/local/bin/:$PATH,在終端執行source .profile可立即生效。

4、使用說明

  • 創建標簽索引
    前面我們提到過,ctags主要是用來創建Vim可以使用的tag索引文件,使用ctags -R即可對當前目錄下的代碼遞歸建立索引文件,文件保存在當前目錄下,默認文件名為tags,文件大小和你要索引的代碼量有關。
    如果想自己指定tag文件的位置和索引代碼的位置,可以使用如下命令實現:
    ctags -R -o ~/.vim/ctags/pythontags /somepythondir/

  • 設置索引文件的位置
    Vim在運行過程中需要知道tag的索引文件位置,如果不指定的話,Vim會在當前目錄下尋找名為tags的文件作為tag索引文件。
    如果想使用某個目錄下的索引文件,在該目錄下啟動Vim即可。也可以在啟動后通過如下命令設置或改變索引文件的位置:
    set tags=/home/xxx/xx/tags, xxxx/tags,......

當然,你也可以把這條命令寫到.vimrc中。

  • 在Vim中使用tag
    tag的索引文件和位置都設置好之后,萬事俱備,現在我們就可以在Vim中使用tag進行代碼跳轉和跟蹤。
    ctags主要對源代碼中的類、方法、變量等元素進行了索引,所以,如果我們記得某個類名、方法名或變量名,想在命令行下直接打開隱藏在重重疊疊的目錄深處的某個文件時,以下命令可以幫助我們實現這個功能:
    vim -t class | method | variable
    例如,你想打開包含了loadCache方法的文件,可以用如下命令:
    vim -t loadCache
    如果多個文件中包含loadCache方法,vim會按照字母順利打開第一個文件。想查看其他文件,可以使用ts命令, :ts會列出所有包含loadCache標簽的文件,輸入文件序號可以打開文件並定位到loadCache標簽,通過j和k可以上下滾屏。

如果只是通過vim命令打開文件,那么可以使用如下命令進行文件檢索和瀏覽:

:ta tagname 跳轉到標簽tagname定義的地方
:stag tagname 在分割窗口中查看包含tagname的文件
:tags 查看到達當前位置所經過的標簽路徑
:ts tagname 列出匹配tagname的標簽,如為空,則使用標簽棧中最后的標簽
:tf 跳轉至第一個匹配的標簽
:tl 跳轉至最后一個匹配的標簽

跳轉快捷鍵:

ctrl-] :跳轉至光標所在對象定義之處
ctrl-t :返回跳轉前位置
[n]ctrl-t :[n]為數字,向回跳轉n次;等價於重復n次ctrl-t操作

5、注意事項

確認vim在打開文件時能夠找到相關的標簽文件tags。

taglist

1、下載地址

https://github.com/vim-scripts/taglist.vim

2、功能說明

taglist是Vim的一個代碼瀏覽的插件,類似IDE中的Outline視圖,可以根據不同語言的代碼顯示代碼中的包、類、接口、方法、函數、變量、屬性等內容,是Vim瀏覽代碼的一個必備工具。

如圖:

 

taglist同樣需要依賴ctags命令生成tag。

3、安裝

  • 進入~/.vim/bundle目錄
  • 執行: git clone git://github.com/vim-scripts/taglist.vim.git

  • .vimrc文件設置taglist的配置信息,以下是我的偏好設置

      "taglist{
        let Tlist_Show_One_File = 1            "只顯示當前文件的taglist,默認是顯示多個
        let Tlist_Exit_OnlyWindow = 1          "如果taglist是最后一個窗口,則退出vim
        let Tlist_Use_Right_Window = 1         "在右側窗口中顯示taglist
        let Tlist_GainFocus_On_ToggleOpen = 1  "打開taglist時,光標保留在taglist窗口
        let Tlist_Ctags_Cmd='/opt/local/bin/ctags'  "設置ctags命令的位置
        nnoremap <leader>tl : Tlist<CR>        "設置關閉和打開taglist窗口的快捷鍵
        "}
        

4、使用說明

taglist參數介紹,大家可以根據自己的偏好在.vimrc中設置:

  • Tlist_Ctags_Cmd:設置ctags命令的位置
  • Tlist_Use_Horiz_Window:設置為1時,taglist窗口橫向顯示。默認縱向顯示
  • Tlist_WinHeight:設置taglist窗口的寬度
  • Tlist_WinWidth:設置taglist窗口的高度
  • Tlist_Show_One_File:設置Tlist_Show_One_File為1則只顯示當前文件的taglist,缺省顯示多個文件中的tag
  • Tlist_Sort_Type:taglish默認按tag在文件中出現的順序進行排序,設置為"name",taglist將以tag名字進行排序
  • Tlist_Exit_OnlyWindow:設置為1時,如果taglist是最后一個窗口,則退出vim
  • Tlist_Use_Right_Window:設置為1時,taglist窗口出現在右側,缺省顯示在左側
  • Tlist_Auto_Open:如果想在啟動VIM后自動打開taglist窗口,該參數設置為1
  • Tlist_Close_On_Select:如果想在選擇了tag后自動關閉taglist窗口,該參數設置為1
  • Tlist_GainFocus_On_ToggleOpen:設置為1時,打開taglist光標保留在taglist窗口

當使用vim打開某個程序文件時,我們可以用:Tlist打開taglist窗口,如果該程序具備類、接口、屬性等元素,就會在taglist窗口顯示出來。我們可以通過以下這些常用快捷鍵來操作taglist:

  • 通過光標選擇tag,回車可以跳到定義該tag的程序位置
  • 選中tag時按空格鍵,會在狀態欄下方顯示該tag的完整定義
  • x,橫向放大或縮小taglist窗口
  • =,折疊所有的tag
  • +,打開所有的tag

5、注意事項

確認在.vimrc中使用Tlist_Ctags_Cmd定義了正確的ctags命令的位置,否則會出現找不到tag的錯誤信息。

visualmark

1、下載地址

http://www.vim.org/scripts/download_script.php?src_id=4700

2、功能說明

visualmark,顧名思義,就是在你閱讀代碼或編寫代碼的時候隨時快速打標簽,並通過快捷鍵來回切換瀏覽。如圖:

visualmark

3、安裝

.vim/bundle下建立文件夾visualmark/plugin,把下載的文件visualmark.vim復制到該文件夾下。

4、使用說明

使用vim打開一個文件,使用快捷鍵mm設置標簽,通過F2和shift+F2可以上下切換瀏覽。
我們還可以對標簽的樣式進行定制:
打開visualmark.vim,找到如下代碼修改:

//根據背景色設置標簽顏色,cterm表示為原生vim設置樣式
if &bg == "dark"
highlight SignColor ctermfg=white ctermbg=blue guifg=white guibg=peru
else
highlight SignColor ctermbg=white ctermfg=red guibg=grey guifg=RoyalBlue3
endif

5、注意事項

 

祝大家開心每一天()


免責聲明!

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



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