ヤンク後に空白を自動的に調整する方法は?


7

人間の言語のテキストを編集してテキストフラグメントを移動すると、フラグメントの最初または最後に移動した空白が新しい位置に収まらないという問題に頻繁に遭遇します。たとえば、次の段落について考えてみます。

This is the first sentence.  This is the second sentence.  These
three sentences are the whole paragraph.

kill + yankで最後の文を最初の文の前に移動すると、先頭または末尾に空白があります。列挙型でも同様の問題が発生します。

もう1つの使用例は、末尾または先頭に空白がない、killリングにある単一の単語または式を挿入する場合です。たとえば、キルリングの「very」という単語と次の文について考えてみます。

Such a minor mode would be useful.

ヤンクした後、これは誤って次のようになる可能性があります。

Such a minor mode would bevery useful.

人間のテキストの空白を自動的に調整する方法はありますか?

回答:


3

delete-leading-whitespace-on-line名前が示すとおりに実行する関数を次に示します。

(defun delete-leading-whitespace-on-line ()
  "Delete whitespace at the beginning of the current line."
  (interactive)
  (let ((start (line-beginning-position))
        (end (line-end-position)))
    (save-excursion
      (delete-whitespace-rectangle start end nil))))

以下の場合は末尾の空白を、私が使用しますM-x delete-trailing-whitespace

ヤンク後にこれらをトリガーするには、次のようにします。

(defun yank-and-trim-whitespace ()
  "Yank and then trim whitespace on the line."
  (interactive)
  (yank)
  (delete-leading-whitespace-on-line)
  (delete-trailing-whitespace))

そしてそれを次のようにバインドします:

(global-set-key "\C-y" 'yank-and-trim-whitespace)

また、Steve Purcellのwhitespace-cleanup-modeというマイナーモードを試してみることもできます。

バッファが保存される前に、ホワイトスペースクリーンアップをインテリジェントに呼び出します。

PS彼のGitHubアカウントは、Emacsグッズの宝庫です。


まだ評判はありませんが、関連するドキュメントへのリンクは次のとおり
software

あるcall-interactivelyのは、ここでは必要?関数を呼び出すことはできませんか?
erikstokes 2015

@erikstokes、良いキャッチ。call-interactively冗長です。
yurrriq 2015

call-interactivelyここで使用すると、で動作するようになると思いますyank-pop
politza

1

これはあなたが尋ねたことをしているようです。対照的に、すでに余分な空白がある場合は、以前と同じように保持されます。

  (defun yank-and-adjust-whitespace ()
  (interactive)
  (if (equal (char-after) ?\s)
      (progn
        (insert " ")
        (yank))
    (if (eolp) (if (bolp) (yank)
        (if (equal (char-before) ?\s)
            (yank)
          (insert " ")
          (yank)))
      (yank)
      (insert " "))))

Eric Baileyの回答のように、以下のショートカットを関連付けることができます。

(global-set-key "\C-y" 'yank-and-adjust-whitespace)

使用eolp/bolphttps://emacs.stackexchange.com/a/13741/から借用されました。


@wasamasa編集ありがとうございます。あなたはに変更され? ました?\s。どちらも機能しているようです。それらの違いについて知りたいです。
名前

1
正解です。どちらも同等です。マニュアルは?\s、混乱を少なくし? 、タイプミスではなくスペースを一致させることを保証するため、推奨されています。
wasamasa 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.