下划线作为前进单词不起作用的单词的一部分

时间:2012-05-19 14:47:36

标签: emacs emacs23 nxhtml

我正在尝试将下划线视为forward/backward-word函数的一部分,如herehere所述。我特意试图让这个适用于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)

我错过了什么?

4 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:6)

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

但是Emacs已经拥有了一个符合你要求的角色组织:sexp。如果您学习了sexp命令而不是打破单词命令,那么您可以根据情况适合删除“word”或“symbol”。

答案 2 :(得分:4)

作为event_jr,我建议您学习使用基于sexp的命令,例如C-M-fC-M-b。但是如果你真的只想跳过标识符(并忽略括号之类的东西),那么不要试图改变所有主要模式中的所有语法表(最终可能会产生无法预料的后果),我建议你只使用新的基于符号的方法。运动命令。 例如。 (global-set-key [remap forward-word] 'forward-symbol)。对于某些命令(如kill-word),您需要自己编写kill-symbol,但这应该很容易。

答案 3 :(得分:3)

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

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

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

某些模式更顽固,修改标准语法表不会影响它们,因为它们会在初始化期间覆盖某些符号。一个例子是cc-mode。你仍然必须明确地修改他们的表。