做者: Jolly Wing(jiqingwu@gmail.com) 生成: 2014-05-16 週五 轉載請保留做者信息
從Emacs 23.2開始,Speedbar也變成了Emacs自帶的組件。
和imenu相似,
它也能顯示文件內容的索引,但比imenu更強大一些。java
M-x speedbar
會打開一個窄而高的導航窗口,裏面顯示的是文件列表,點擊每一個文件前的 +
,能展開文件內的索引。
有的索引項還可以進一步展開,點擊不能在展開的索引項,就能跳轉到文件內對應的位置。
用鼠標用 speedbar 仍是很方便的。c++
再次 M-x speedbar
會關閉speedbar窗口。在speedbar窗口按 q
也會關閉speedbar窗口。express
至於怎麼使用,在speedbar窗口點右鍵,彈出的菜單已經夠詳細了。segmentfault
要想讓speedbar隨Emacs一塊兒啓動,在啓動文件里加上函數
(speedbar 1)
speedbar有多種模式,能夠顯示以樹形結構顯示文件和目錄,也能夠顯示當前活躍的buffer。
你能夠在speedbar窗口點右鍵進入 Display
的子菜單進行模式切換。工具
在顯示文件模式下,speedbar能夠做爲文件管理器使用。快捷鍵以下:fetch
在顯示緩衝區的模式時,也能夠管理buffer。
如 k
刪除buffer,r
從新從硬盤讀取內容到buffer。ui
針對特別的緩衝區,speedbar會進入特別的模式。
好比你在查看emacs手冊,speedbar會進入info模式,列出全部手冊的節點和子節點,方便你閱讀手冊。code
以上說的都是皮毛,下面講點實在的,主要講講speedbar的工做原理。blog
speedbar使用什麼數據生成的索引呢?
它不只使用imenu的分析結果,也使用 etags (Emacs自帶的生成tags的工具) 和 semantic (Emacs自帶的用elisp實現的分析語法的工具)的分析結果。
默認狀況下,speedbar使用的是imenu分析的結果。
咱們能夠經過查看 speedbar-supported-extension-expressions
變量的值,
(C-h v speedbar-supported-extension-expressions RET
)
看看 speedbar 能分析哪些類型的文件。
怎樣讓speedbar使用etags分析文件內容?
有一個變量 speedbar-use-imenu-flag
控制 speedbar 使用imenu仍是etags分析源文件。
默認狀況下這個變量的值是 t
,即便用 imenu 的分析結果。
將這個變量值設爲 nil
,speedbar會使用etags分析文件。
(setq speedbar-use-imenu-flag nil)
其實etags的分析結果好不到哪去。並且etags支持的文件類型不多。C-h v speedbar-fetch-etags-parse-list RET
查看一下speedbar-fetch-etags-parse-list
的值, 結果以下:
(("\\.\\([cChH]\\|c\\+\\+\\|cpp\\|cc\\|hh\\|java\\|cxx\\|hxx\\)\\'" . speedbar-parse-c-or-c++tag) ("^\\.emacs$\\|.\\(el\\|l\\|lsp\\)\\'" . "def[^i]+\\s-+\\(\\(\\w\\|[-_]\\)+\\)\\s-*") ("\\.tex\\'" . speedbar-parse-tex-string) ("\\.p\\'" . "\\(\\(FUNCTION\\|function\\|PROCEDURE\\|procedure\\)\\s-+\\([a-zA-Z0-9_.:]+\\)\\)\\s-*(?^?"))
看以看到,etags分析支持的文件只有 c/c++, java, lisp(elisp), tex, pascal幾種。
真正強悍的是speedbar和semantic的結合。
怎麼讓speedbar使用semantic的分析結果?
M-x semantic-mode
(require 'semantic/sb)
,讓speedbar使用semantic的分析結果。再打開一個c/c++的源文件看看,speedbar中的索引細緻多了。
用imenu和etags分析的索引只有類和函數。類的成員函數都分析不出來。
如今類的成員,全局變量和函數(包括函數的返回值和參數)都顯示出來了。
並且,結合speedbar和semantic,咱們在寫代碼的時候,speedbar還能提示代碼的補全呢。
具體怎麼作,等到寫 semantic 專題的時候再講解吧。
最後談談speedbar的配置和擴展。
speedbar的選項挺多,但須要配置的並很少。
授人以魚,不如授人以漁。這裏講配置方法,不講配置。
首先,咱們看看speedbar有哪些變量能夠配置。M-x describe-variable RET speedbar TAB
,會列出speedbar的全部變量。
選擇你感興趣的研究一番吧。
相似的,M-x describe-function RET speedbar TAB
,會列出speedbar的全部函數,
有些是改變speedbar行爲的,本身研究吧。
其它的emacs組件也能夠用相似的方法研究。
至於擴展,有一個叫 sr-speedbar
的,會把 speedbar嵌入到emacs的主窗口中。