下划线作为单词的一部分,表示转发单词不起作用



我试图使下划线被视为此处和此处所述的forward/backward-word函数单词的一部分。 我特别想让它适用于nxhtml模式,但真的希望它适用于所有模式。

我已经以多种不同的方式修改了我的site-start.el文件,但无济于事。 但是如果我在缓冲区中M-x modify-syntax-table手动执行命令,它可以正常工作。我只是无法将其作为默认行为。

这是我尝试放入site-start.el文件的内容:

;; 1
;; thought  this would apply it to all modes - no error, but did not work
(modify-syntax-entry ?_ "w") 
;; 2
;; thought this would automatically set it on a mode change - no error, but did not work
(defun change-major-mode-hook ()
(modify-syntax-entry ?_ "w"))

;; 3
;; thought  this would apply it to all modes - no error, but did not work
(modify-syntax-entry ?_ "w")
;; 4
;; this produced a symbol's value as variable is void error
(modify-syntax-entry ?_ "w" nxhtml-mode-syntax-table)

我错过了什么?

您是否尝试过直接修改nxhtml-mode-hook? 这样:

(add-hook 'nxhtml-mode-hook
          (lambda () (modify-syntax-entry ?_ "w")))

Trey回答了你非常具体的问题。

但是 Emacs 已经有一定程度的角色组织可以按照你的要求去做:sexp。 如果您学习了 sexp 命令而不是破坏 word 命令,那么您可以根据情况通过"word"或"symbol"删除。

event_jr,我建议您学习使用基于 sexp 的命令,如 C-M-fC-M-b 。 但是,如果您真的只想跳过标识符(并忽略括号之类的内容(,那么与其尝试更改所有主要模式下的所有语法表(最终可能会产生不可预见的后果(,我建议您简单地使用新的基于符号的移动命令。例如 (global-set-key [remap forward-word] 'forward-symbol) . 对于某些命令(如kill-word(,您需要自己编写kill-symbol,但这应该很容易做到。

您可以修改标准语法表,而不是像 Trey Jackson 建议的那样为每个主要模式添加钩子。不同的模式继承自标准语法表,因此您的修改有望适用于所有模式:

(modify-syntax-entry ?_ "w" (standard-syntax-table))

这将影响常规文本,XML,Python等。

某些

模式更顽固,修改标准语法表不会影响它们,因为它们会在初始化期间覆盖某些符号。一个例子是 cc-mode .您仍然需要显式修改其表。

最新更新