2013-04-26 51 views
2

Vim是一個很好的編輯器,我用它來完成許多任務。但是,當談到開始研究一個新的(可能是巨大的)代碼庫時,我不習慣用它來理解代碼,目的是理解事情的工作方式。如何理解vim的代碼?

例如,如果我想看看在使用C++函數,我可以:vimgrep在每**/*.cpp文件功能和:copen quickfix窗口跳到每一次出現該字符串的......。

如果我對例如Eclipse(C++方法的調用層次結構)不僅僅是一個字符串,而是一個定義在對象中的C++方法,所以我將精確地指出該函數的用法(而不是同名的函數在另一個類中定義)。

所以問題是,如何讓vim成爲分析代碼的強大工具?

子問題:

  • 是否有專門爲這個任何VIM插件?
  • 使用vim只分析代碼有意義嗎?可能有外部工具(例如:OpenGrok)可以完成這項工作嗎?

回答

7

Vim是一個文本編輯器。你想要的東西幾乎完全正交於編輯文本,完全超出了Vim自己的能力。

然而時,Vim是在使用像ctagscscope外部工具的項目中進行導航相當不錯。假設你已經創建了一個tags文件和/或一個cscope.out數據庫,Vim有一堆命令可以用來「跳轉到定義」,「跳轉到使用」等::ts[elect] foo<C-]>通過函數名稱等等...您可以在:h ctags:h cscope中找到所有您需要的信息。

如果您好奇,GNU GLOBAL是另一種選擇。 cscope的另一個專業版是它自帶的TUI,您可以在您的shell中使用它。

唯一的插件提供我知道cscope(+ ctags)接口是CCTree這似乎僅限於C.

有一堆像ctagsTagBar面向TagList插件,你可以嘗試,但注意, ,而ctags僅限於定義,cscope也可以做用法和來電者。

您應該記住,這些工具是代碼索引器:您不應該期望他們「理解」您的代碼,或者甚至可以像IDE工具一樣精確。不過我喜歡Vim,我建議你使用比文本編輯器更適合該任務的工具。

2

當我從Netbeans切換到Vim時,我感覺和你一樣。我錯過了Netbeans功能,在右鍵單擊時看到任何函數定義。聲明:我使用紅寶石,Javascript主要有時PHP

我試過ctags,但發現它不是那麼準確,也不那麼幹淨。我也嘗試使用插件Tagbar和Taglist與ctags一起使用。 Tagbar在我看來有點沉重,處理標籤時會佔用大量的CPU和內存。 Taglist更好,但最好的用例是瀏覽長文件而不是標籤。

最後我放棄了使用ctags。

後來我發現有更好的語言解決方案。例如,對於Ruby,有一個插件可以顯示已安裝的gem(libs)中的任何函數的ri doc,只有一個鍵。

但我仍然不會經常使用,因爲我的習慣已經改變。我喜歡事情要變得精益,要在正確的地方,並且要快。

現在我感到舒適:

  1. 用Vim一起使用TMUX。在需要時檢查文檔並在控制檯中驗證代碼。
  2. 使用snippet插件(Neosnippet)來存儲經常使用的代碼,方法。 Vim中的片段管理比我見過的任何IDE都好得多,也更靈活。
  3. 使用大腦存儲更多,與鼠標少觸摸。

希望這些幫助。

+0

什麼是「大腦」? – sica07 2013-04-29 10:50:47

-1

有一個名爲fly.vim的插件,可以瀏覽源代碼。它利用cscope數據庫並提供簡單的導航機制。將它與autotags插件結合使用,可以在中心位置爲項目生成和維護cscope和ctags,並且可以輕鬆地在不同的代碼庫之間切換。 我使用Source Insight瀏覽Linux內核源代碼,當我切換到這個組合時,我沒有什麼可抱怨的。不過,這可能需要一些時間和/或努力才能加快速度。如果你知道ctags和cscope如何工作,那麼,你可能會在不到一個小時的時間內完成它。但優點:cscope快速編碼索引,vim快速使用cscope,fly.vim通過cscope查詢並快速顯示,並以可用格式顯示。另外,它保持跳躍歷史。