段落を文ごとに1行に分割しながら、視覚的にラップしたままにするにはどうすればよいですか?


14

これは、行ごとに1センテンス(機能と動機)でファイル編集するのと似ていますが、すべての文で視覚的な区切りではなく、完全で流れるような段落が必要です。

アクティブな場合、同じ段落の行を視覚的に結合し(\n\nまたはparagraph-separateorまたは...で区切られていない)、visual-line-mode実際に挿入せずに行をラップする動作(おそらくから派生する)をアクティブにするマイナーモードが必要です\n

そのようなモードは存在しますか?そうでない場合、結果を達成するために段落の表示プロパティを変更するプロセスについてどうすればよいですか?(結局、これはそのようなモードの要点であり、スニペットから開発することができます。)


[...]は視覚的に参加します[...]。基になる\n(存在する場合)を維持することを意味しますか、それとも実際に改行を削除して1行につき1段落を提供しますか?
ジョナサンリーチペピン14

1
を使用し て、改行をスペースや何かのようbuffer-display-tableに見せることができます\n-リンクの次の例を参照してください: stackoverflow.com/a/24842771/2112489これの利点は、ドキュメントは変更されません。新しい行は、ほぼ何でも構いません。たとえば、スマイリーフェイス、スペース、ピルクロウシンボルなどです。視覚効果は、ラッピングが発生することです。
法律家14

@ JonathanLeech-Pepin存在する場合は改行を保持したいです。実際、文末に改行を強制したいのですが、これは別のフックを介して行うことができます。
ショーンオールレッド14

1
@lawlist視覚効果は、改行がどこにでもなくなるということですよね?すべての段落が1つに折りたたまれませんか?
マラバルバ14

1
私はこの要求に同情していますが、OPによって記述されたマイナーモードは正しい解決策ではないと思います。根本的な問題は、diffがコード用に設計されているため、テキストに対してうまく機能しないことです。Emacsでこの問題を回避することは可能ですが、さまざまな理由で明確な解決策ではありません。diffを改善して、テキストで適切に動作するようにした方がはるかに良いでしょう。
マルス

回答:


3

トムが言ったように、改行に表示プロパティを設定すると、一種の作業になります。

問題は、折り返す行を把握することです。

以下に例を示します。

(let ((eol-regexp "[[:graph:]] ?\\(\n\\)[^\t\n ]"))
  (font-lock-add-keywords nil
   `((,eol-regexp 1 '(face default display " ")))))

(visual-line-mode 1)

これは、グラフィカル文字が前にあり、次の行がインデントまたは空でない場合、改行を「削除」します。自分に合ったものを見つけるために実験する必要があります。

さらにいくつかの説明:

  1. font-lock-add-keywordsフォントロックにルールのリストを追加します(したがって、フォントロックを有効にする必要があります。最初の引数はモード(例:)にすることができます。このtext-mode場合はnilです。
  2. 私たちの「ルール」は(,eol-regexp 1 '(face default display " "))です。最初の要素は、以前に構築した正規表現です。2番目は、関心のある部分式です。3番目は、適用する「顔」です。
  3. 改行に面を使用することは役に立ちませんが、テキストプロパティを追加することもできます。したがって、デフォルトのフェイスを使用し、表示プロパティを追加するよりも、サブストリング1(つまり、改行)をスペースに置き換えます。
  4. 自分で足を撃った場合は、バッファを削除するか、でキーワードを削除してくださいfont-lock-remove-keywords
  5. 追加するdisplayこともできますfont-lock-extra-managed-props(これは試していません)。
  6. トリッキーな部分は正規表現を正しくすることです。「\(\ n \)[^ \ n]」は、直後に別の改行が続かない改行に一致します。「。\ {30、\} \(\ n \)」は、少なくとも30文字前の改行のみに一致します。

上記の実装は、github.com
andersjohansson /

0

問題を正しく理解していれば、バッファ内のすべての改行をそのまま保持したいということです。ただし、それらの一部をスペースとして表示したい場合。次に、ワードラップが必要です。

ワードラッピングにはを使用できると思いますvisual-line-mode

改行を処理するために、別の方法で表示したい改行の値として(単一のスペースで構成される文字列)をdisplay持つプロパティを配置できると思います" "

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.