我发现 kill-word 和 forward-word 将换行符视为空格并例如杀死直到下一行单词末尾的所有内容,这很烦人。我希望它停在行尾。
我尝试修改语法表以将换行符包含到单词定义中,如下所示:
(修改语法条目?\n“w”)
这会产生预期的效果,但需要为每个语法表单独指定。
有没有办法在全球范围内实现这种效果?
我发现 kill-word 和 forward-word 将换行符视为空格并例如杀死直到下一行单词末尾的所有内容,这很烦人。我希望它停在行尾。
我尝试修改语法表以将换行符包含到单词定义中,如下所示:
(修改语法条目?\n“w”)
这会产生预期的效果,但需要为每个语法表单独指定。
有没有办法在全球范围内实现这种效果?
好吧,首先,我强烈建议您习惯在大多数情况下将换行符视为空格的想法。Emacs 通常会始终如一地做到这一点,试图逆势而上可能是一场永无止境的战斗。
其次,我同意 Stefan 的回答,即弄乱语法表或重新定义forward-word
自己,只会给您带来麻烦和悲伤。
如果您真的想要您所描述的行为M-d
,M-f
那么最好定义一组具有这种所需行为的新函数,并且您可以将M-d
andM-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)
改变?\n
字符的语法会让你在各种模式下很快陷入困境。相反,您希望更改forward-word
交互调用时的行为方式(请注意,更改函数的行为forward-word
也会导致麻烦,因为它经常用于缩进代码之类的事情)。您可能想看看如何subword-mode
工作,以了解如何做到这一点。
我曾经with-syntax-table
临时(和全局)修改语法表。
例如,我将它与syntax-subword
模式一起使用:
(defadvice syntax-subword-forward (around testing activate)
(with-syntax-table (copy-syntax-table (syntax-table))
(modify-syntax-entry ?\n ">")
ad-do-it))