我想定義一個命令來定製我的C/C++函數定義在emacs中。Emacs規則來格式化函數聲明
我想獲得是自動格式化代碼看起來像這樣:
type func(type arg1,
type arg2,
...
type argN) {
從一個普通的聲明開始,例如:
type func(type arg1, type arg2, ..., type argN) {
我的想法是搜索函數定義的特定模式,並在每個逗號後用新行替換它,然後調整縮進。
我搞砸了一段時間與正則表達式等,但我不能拿出任何東西。
我無法弄清楚如何正確執行替換使用我的正則表達式獲得的字符串。
以下是我到目前爲止得到的一切,基本上幾乎沒有。
(defun fix-arg-definition()
(interactive)
(goto-char (point-min))
(replace-regexp "([^,()]+\\([,][^,()]+\\)+)[ ]*{" "WHAT TO PUT HERE?")
)
我完全新的在Emacs定製編碼風格的世界,這已經被證明比我想象的更困難。任何幫助表示讚賞。
UPDATE
我已經成功地得到的東西,似乎工作,雖然我還有嘗試對其進行全面測試。
(defun fix-args()
(interactive)
(goto-char 1)
(while (search-forward-regexp "\\(([^,()]+\\([,][^,()]+\\)+)[ ]*{\\)" nil t)
(replace-match (replace-commas) t nil)))
(defun replace-commas()
(let (matchedText newText)
(setq matchedText
(buffer-substring-no-properties
(match-beginning 1) (match-end 1)))
(setq newText
(replace-regexp-in-string "," ",\n" matchedText))
newText))
我可以忍受這個,然後用另一個命令手動調整縮進,至少現在是這樣。
對於一些可能有助於查看[this](http://stackoverflow.com/a/1731571/440558)舊的SO答案的外部工具。 – 2012-07-16 13:13:11