3

kill-word と forward word が改行文字を空白として扱い、たとえば次の行の単語の最後まですべてを kill するのはかなり面倒です。代わりに、行末で停止したいと思います。

次のように、単語定義に改行文字を含めるように構文テーブルを変更してみました。

(modify-syntax-entry ?\n "w")

これにより目的の効果が得られますが、構文テーブルごとに個別に指定する必要があります。

この効果をグローバルに達成する方法はありますか?

4

3 に答える 3

3

まず最初に、改行を空白として扱うという考え方に慣れることを強くお勧めします。Emacs は通常、これを一貫して行っており、そのような傾向に逆らおうとすることは終わりのない戦いになる可能性があります。

第二に、構文テーブルをいじったり、それ自体を再定義したりするforward-wordことは、問題と悲しみ以外の何物でもないという Stefan の回答に同意します。

説明した動作が本当に必要な場合は、この目的の動作を持ち、 およびM-dキーをM-fバインドできる新しい関数セットを定義するのがおそらく最善でしょう。M-dM-f

実際、これは、任意の emacs の一部のコア機能のデフォルトの動作を変更する従来の方法です。

たぶん、このようなものですか?(ほとんどテストされていません)

(defun forward-word-stop-eol (arg)
  (interactive "p")
  (let ((start (point)))
    (save-restriction
      (save-excursion
        (move-end-of-line 1)
        (narrow-to-region start (point)))
      (forward-word arg))))

(defun kill-to-end-of-word-or-line (arg)
  (interactive "p")
  (kill-region (point) (progn (forward-word-stop-eol arg) (point))))

(global-set-key "\ef" forward-word-stop-eol)
(global-set-key "\ek" kill-to-end-of-word-or-line)
于 2012-12-17T03:25:27.253 に答える
1

キャラクターの構文を変更すると?\n、あらゆる種類のモードですぐに問題が発生します。代わりに、インタラクティブに呼び出されたときの のようなもののforward-word動作を変更する必要があります (関数の動作を変更すると、forward-wordインデント コードなどでよく使用されるため、問題が発生する可能性があることに注意してください)。subword-modeこれがどのように行われるかの例として、どのように機能するかを見てみたいと思うかもしれません。

于 2012-12-16T23:07:37.933 に答える