Emacs の fill-paragraph を Javadoc のようなコメントで適切に処理できるようにする

StackOverflow https://stackoverflow.com/questions/71788

  •  09-06-2019
  •  | 
  •  

質問

私は仕事で使用する APL 方言用の Emacs メジャー モードを作成しています。基本的なフォントロックを機能させました。コメントスタートとコメントスタートスキーを設定した後、コメント/conty/concomment領域と埋め込み段階も機能します。

ただし、コメントブロックにはJavadocスタイルのコメントが含まれていることが多く、そのようなコマンドから始まる線を接着するのを避けるために、塗りつぶしのパラグラフが欲しいです。

これがある場合 (javadoc @ の代わりに \):

# This is a comment that is long and should be wrapped.
# \arg Description of argument
# \ret Description of return value

M-q は私に次のように与えます:

# This is a comment that is long and
# should be wrapped. \arg Description
# of argument \ret Description of
# return value

でも私はしたい:

# This is a comment that is long and
# should be wrapped.
# \arg Description of argument
# \ret Description of return value

私は段落のスタートと適切な値に分離された段落を設定しようとしましたが、塗りつぶしはコメントブロック内でまだ機能しません。コメントマーカーを削除すると、MQが必要に応じて機能するため、パラグラフスタートに使用するRegexpが機能しているようです。

主要なモードのためにカスタムフィルパラグラフを書く必要がありますか?CCモードには、このようなケースを処理するものがありますが、それは本当に複雑です。可能であれば避けたいと思います。

役に立ちましたか?

解決

問題は、段落開始正規表現が機能するには、実際のコメント文字を含む行全体と一致する必要があるということでした。次の elisp は、私が示した例で機能します。

(setq paragraph-start "^\\s-*\\#\\s-*\\\\\\(arg\\|ret\\).*$")

これを行う php モードの正規表現の例を示すページは次のとおりです。http://barelyenough.org/blog/2006/10/nicer-phpdoc-comments/

他のヒント

それほど複雑ではない関数を使用する他のモードもあります。 fill-paragraph-function. 。私のインストールを参照すると、ada-mode と make-mode のものが良い例のようです。

このような場合に私が行うのは、段落行と引数行の間に空行を開き、M-q を使用して段落行を折り返し、それらの間の空行を削除することです。理想的ではありませんが、機能し、繰り返す必要がある場合はマクロに記録するのが簡単です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top