emacs で C/C++ 関数定義をカスタマイズするコマンドを定義しようとしています。
私が取得したいのは、コードを次のように自動的に再フォーマットすることです。
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 でコーディング スタイルをカスタマイズする世界にまったく慣れていません。これは、思ったより難しいことがわかりました。どんな助けでも大歓迎です。
アップデート
私はまだ完全にテストする必要がありますが、うまくいくように見えるものを手に入れることができました。
(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))
少なくとも今のところは、これで問題なく、別のコマンドを使用してインデントを手動で調整できます。