歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Vim/Cscope 教程

Cscope是一個非常方便的工具, 它會為你的編輯器(即Vim)帶來很好的舒適性. 幸運的是, Cscope 已經被 Vim 在內部集成.

這個教程向你介紹了 Vim 內建的 Cscope 支持,以及一套讓搜索更方便的方法.

假設你知道使用 vi 風格編輯器的基本知識, 但是不需要任何關於Vim的特定知識 (會簡單介紹一些用得到的 Vim 特有功能——如多窗口). 你也無需知道任何關於Cscope的知識: 我們會逐步介紹一些基本的東西.

簡而言之,Vim 的 Cscope 支持很像你用過的 Vim 的 ctags 功能。但是因為 Cscope 的搜索類型比 ctags 更多,所以會有些不同。

這是一個實踐教程, 所以要啟動一個 shell , 然後跟著下面的步驟做:

1. 如果你的電腦還沒有Cscope,先下載並安裝。理想狀態下, 你的 Vim 應該是 6.x 版本, 但是用 Vim 5 以上的版本都可以獲得大部分功能 (無法使用垂直分割, 但是通過修改相關文件可以使用水平分割).

注意: 如果你的 Vim 版本在編譯時沒有指定 '--enable-cscope' 選項, 你需要重新編譯和配置 Vim 。 大部分隨 Linux 發行版安裝的 Vim 二進制文件都使能了 Cscope 插件。

2. 下載 cscope_maps.vim 文件, 讓 Vim 在啟動時讀取它. 如果你用的是 Vim 6.x, 把它復制到 $HOME/.vim/plugin 目錄下即可 (或者其他插件子目錄). 如果你用的是 Vim 5.x, 只能把 cscope_maps 文件的內容復制到 $HOME/.vimrc 文件中, 或者黏貼 "source cscope_maps.vim" 一行到 .vimrc 文件.

3. 進入一個有C代碼文件的目錄, 執行 'cscope -R' ( '-R' 會讓 Cscope 遍歷所有子目錄, 否則只會檢測當前目錄). 由於沒有使用 '-b' 選項 (它告訴 Cscope 只建立數據庫後就退出), Cscope 會打開一個基於 curses 的 GUI 界面. 在這裡嘗試一些搜索 (提示: 使用方向鍵可以在搜索類型之間移動, 用 'tab' 鍵來在搜索類型和搜索結果之間做出選擇). 在搜索結果的左邊敲入數字, Cscope 就會在 Vim 中打開它的位置. www.linuxidc.com (除非你把 EDITOR 環境變量設為了 Vim 之外的東西). 關閉 Vim, 就會返回到離開 Cscope GUI 時的位置. 有趣。

Cscope 接口有個大問題; 每次要執行新的搜索時都要關閉 Vim. 這就是 Vim 插件. 用 CTRL-D 關閉 Cscope.

4. 啟動 Vim. 如果你願意, 可以在啟動時帶一個C語言的標識符 (入: 'vim -t main'), 然後就會跳到代碼中該標識符定義的地方.

5. 把光標移到一個在程序中多次使用的標識符上. 鍵入 "CTRL-\ s" (先敲CTRL-\, 然後敲 's') , 應該會在 Vim 窗口的底部看到一個菜單,顯示了程序中所有用到這個標識符的地方. 選擇其中的一個然後點回車, 就會跳到那裡. 類似 ctags, 可以點擊 "CTRL-t" 調回搜索之前的位置 (也可以多搜索幾個,然後用 CTRL-t 依次釋放).

助記符: '\'鍵在']'鍵的右邊, 用於 ctags 搜索.

6. 嘗試同樣的搜索, 但是這次用 "CTRL-spacebar s" 組合鍵. 這一次,Vim 窗口會水平分割為兩個, Cscope 的搜索結果將在新的窗口上顯示.[如果你從來沒用過 Vim 的多窗口: 用 'CTRL-W w' (或 CTRL-W 和方向鍵, 或 CTRL-W 和 h/j/k/l )在窗口之間移動, 用 'CTRL-W c' (或 ':q')關閉一個窗口, 用 'CTRL-W o'只顯示當前窗口, 用 'CTRL-W s' (或 'CTRL-W v' 垂直分割)將窗口分割為兩個, 用 ':spl[it] filename]' 在分割的新窗口打開文件。

Mnemonic: 在兩個分割的窗口之間會有一條空白的間隔.

7. 現在用 "CTRL-spacebar CTRL-spacebar s"(只需按住CTRL連按兩次空格)進行同樣的搜索. 如果你無法快速的按鍵, 就打開 cscope_maps.vim 腳本,將 Vim 的超時設置改為注釋 [事實上,我通常關閉 Vim 的超時]. 這一次 Vim 的窗口會被垂直分割 (注意: 在 Vim 5.x 上是無法實現的).

Copyright © Linux教程網 All Rights Reserved