2

Emacs に Markdown スタイルのリスト項目をぶら下げインデントでラップしてもらいたいです。実際、 でさえfundamental-mode、これは非常にうまく機能します。次の 3 つのリスト項目を検討してください。

* Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

- Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

M-q( )を使用して埋めるfill-paragraphと、結果は次のようになります。

* Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
  eiusmod tempor incididunt ut labore et dolore magna aliqua.

- Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
  nisi ut aliquip ex ea commodo consequat.

+ Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur.

最初の 2 つは希望どおりに入力されていますが、最後の 2 つは入力されていないことに注意してください。最後のケースで動作が異なる理由と、それを適切に変更する方法を理解するのに苦労しています。

のソース コード内のコメントにはfill-paragraph、次の手順が試行されていることが示されています。

  1. インタラクティブに呼び出されたときにアクティブな場合は、領域を塗りつぶします。
  2. 試してみてくださいfill-paragraph-function
  3. 構文を認識する埋め込みコードを試してください。
  4. すべてが失敗した場合は、デフォルトで古き良きテキスト段落の塗りつぶしを使用します。

これらのリスト項目を埋めるために押してもアクティブな領域がないM-qため、手順 1 はスキップする必要があります。を定義していません( にあるfill-paragraph-function ことを確認しました)。fill-paragraph-functionnilfundamental-mode

これは、ステップ 3 に進むことを意味します。では、fundamental-mode3 つのリスト マーカーの構文はすべて同じdescribe-charです ( で確認)。

character: * (displayed as *) (codepoint 42, #o52, #x2a)
   syntax: _    which means: symbol

character: - (displayed as -) (codepoint 45, #o55, #x2d)
   syntax: _    which means: symbol

character: + (displayed as +) (codepoint 43, #o53, #x2b)
   syntax: _    which means: symbol

したがって、このステップでこれらの段落が異なる方法で処理される理由がわかりません。ソースを見ると、これはコメントを処理しようとしているように見えるので、上記の場合は3つスキップされていると思います。

では、ステップ 4 に進むようです paragraph-start。次のように設定paragraph-startしてみました(これにより、マーカーの前に空白が許可されます):

"\f\\|[ \t]*$\\|^[ \t]*[*+-] "

これもうまくいかなかったので、どうすればうまくいくのか途方に暮れています。

カスタムのfill-paragraph関数を書く必要がありますか?それとももっと簡単な方法がありますか?

4

2 に答える 2

2

簡単な解決策は、 を使用することadaptive-fill-regexpです。この変数は、インデントを構成する行頭のテキストに一致する正規表現です。上記の場合、リスト マーカーをインデントにカウントする必要があります。

最初の 2 つのケースでは、これらのマーカーはadaptive-fill-regexp、 で定義されているように、既定値の に既に設定されていfill.elます。

"[ \t]*\\([-–!|#%;>*·•‣⁃◦]+[ \t]*\\)*"

最初のグループの文字セットには多くの異なる箇条書き文字が含まれていますが、プラス記号 (+) は含まれていないことに注意してください。上記の 3 つのケースでは、次のようにします。

"[ \t]*\\([*+-][ \t]*\\)*"
于 2013-03-02T16:05:32.810 に答える
0

Elpa / package.elからmarkdown-modeを更新する(そしておそらくmarkdown-mode +を取​​得する)だけでよいと思います

ミルクボックス、マーマレードのレポがあることを確認してください。

ユースケースを試してみました.... markdown-mode / markdown-mode+ のバージョンに注意してください

ここに画像の説明を入力

于 2013-03-02T19:56:30.940 に答える