[英]How can I refactor C++ source code using emacs?
我主要對 C++ 和方法/類名/簽名自動更改感興趣。
在最近的 Emacs 版本 (24) 中,Semantic 能夠做到這一點。
如果你可以在 elisp 中編程,你可以從CEDET 庫中尋找 cedet + srecode 的組合——它為這項任務提供了所有工具——查找函數的調用者,獲取簽名等。但是你需要自己創建重構工具,使用這些工具
我經常這樣做,所以我也在焦急地等待其他答復。
我知道的唯一技巧是非常基本的。 以下是我在重構代碼時在 Emacs 中最好的朋友:
M-x query-replace
這允許您進行全局搜索和替換。 當您將方法和常用數據移動到其他類或命名空間時,您會經常這樣做。
C-x 3
這為您提供了一個並排顯示兩個緩沖區的顯示。 然后,您可以繼續在其中加載不同的文件,並使用Cx o
將 cursor 從一個移動到另一個。 這是非常基本的東西,但我之所以提到它是因為它使下一個...
C-x (
(type any amount of stuff and/or emacs commands here)
C-x )
這就是在 emacs 中定義宏的方式。 任何時候你發現自己需要對一堆代碼一遍又一遍地做同樣的事情(而且對於查詢替換來說太復雜了),這就是救命稻草。 如果你搞砸了,你可以點擊Cg
來停止宏定義,然后撤消( C-_
)直到你回到你開始的地方。 調用宏的鍵是Cx e
。 如果您想多次執行此操作,可以Esc
並先輸入一個數字。 例如: Esc 100 Cx e
將嘗試調用您的宏 100 次。
(注意:在 Windows 上,您可以通過按 Esc 鍵或按住 Alt 來獲得“Meta”)。
對於介於重構工具和簡單正則表達式之間的某個地方,從 Emacs 22 開始,您可以在替換文本中嵌入任意 elisp 表達式,這使您可以進行非常強大的文本操作。 Steve Yegge 不久前寫了一篇很好的文章。
我的一個朋友在玩xrefactory ,說它工作得很好。 不過它並不便宜。
構建 cscope 符號。
查找要重構的符號。
進入 cscope window,並在第一次出現 cursor 后啟動宏
你現在必須 cx ce
我完全同意查找和替換工作正常。 然而,cedet 的一個非常好的特性是“semantic-symref-list”。
在方法上使用 cursor,運行此命令,您將看到一個緩沖區,其中列出了代碼中引用此標記的所有位置。
您仍然可以使用查找和替換技巧,這將確認您已更改所有引用。
我一直在為我的 C++ 完成使用cquery ,它使用 Microsoft LSP 進行 IDE <-> 工具通信。 cquery服務器使用 clang 后端滿足 LSP 協議的請求。
lsp-emacs是 package ,它位於 emacs 和cquery后端 (cquery-emacs) 之間,它公開了一個lsp-rename
ZC1C425268E68385D1AB5074C17A94F。 順便說一下, cquery作為一個補全系統,一直非常可靠和快速,強烈推薦。
試一試,按照cquery github 上的入門指南進行操作: https://github.com/cquery-project/cquery/wiki/Emacs
完成 cquery設置后:
lsp-rename
您可能應該通過所有修改過的緩沖區 go 並檢查使用任何工具/語言重構后所做的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.