我试图使下划线被视为此处和此处所述的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-f
和 C-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
.您仍然需要显式修改其表。