[英]Code navigation in vim and emacs
我在emacs和vim中最想念的IDE功能是代碼導航和查找用法。 這兩個編輯器都具有以下類似功能:
據我了解,這兩個系統都非常不精確。 如果我們有相同名稱的相似標識符,則標記和范圍可能會混淆它們。 有沒有更好的選擇,它們究竟有多精確?
我在Emacs中使用cscope和semantic。 這對我來說已經足夠了。
在cscope中,我大量使用的兩個函數是cscope-find-global-definition和cscope-find-this-symbol。 以前的功能非常精確。
C-c s s Find symbol.
C-c s d Find global definition.
至於語義(動態索引,不需要生成TAGS)。
(global-set-key [f8] 'semantic-ia-fast-jump) ;; jump to definition.
(global-set-key [S-f8] ;; jump back
(lambda ()
(interactive)
(if (ring-empty-p (oref semantic-mru-bookmark-ring ring))
(error "Semantic Bookmark ring is currently empty"))
(let* ((ring (oref semantic-mru-bookmark-ring ring))
(alist (semantic-mrub-ring-to-assoc-list ring))
(first (cdr (car alist))))
(if (semantic-equivalent-tag-p (oref first tag)
(semantic-current-tag))
(setq first (cdr (car (cdr alist)))))
(semantic-mrub-switch-tags first))))
例如, GNU Global允許重復的標識符,您將能夠選擇所需的標識符。
有許多程序輸出ctags兼容的tags
文件。 它們通常是特定於語言的,因為ctags中存在一些低級別的限制,但是當你有多個具有相同名稱的方法時,它們和ctags都不會幫助你,因為這些工具只能完成作業的索引部分。 搜索索引實際上是Vim的工作, 因為它是一個令人討厭的文本編輯器而不是IDE,它沒有意義來決定哪個方法聲明是正確的。
幸運的是,當有多個匹配時,Vim會顯示一個可操作的列表。 但那是你能走多遠。
Cscope比ctags更聰明,當從Vim使用時,它會進行搜索以及索引。 但是,像ctags一樣,cscope 仍然是代碼索引器。
實際上,可以同時使用set cscopetags
同時使用它們,但它對命名問題沒有幫助。
你可以試試GNU Global。 但它不支持JavaScript,所以我從來沒有真正使用它足夠長的時間來發表意見。
IDE通常通過針對您的代碼在后台運行的特定於語言的解析器/靜態分析工具來發揮其魔力。 Vim至少有一個限制和一個功能,甚至很難想象它達到你似乎正在尋找的代碼感知水平:
Vim不是多線程的。 因此它無法在后台運行靜態分析工具。
Vim支持數百種語言。 對於任何規模的任何組織來說,為這么多語言提供這種功能是不可能的。
但這對我來說都不是問題,因為Vim不是IDE。
因為我的項目中沒有多個具有相同名稱的方法。
<C-]>
, <Cw>}
:tag /foo<Tab>
和:cs fc bar
足以滿足我的謙遜需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.