修改语法条目未加载到emacs init中?
由于我不希望下划线char修改语法条目未加载到emacs init中?,emacs,Emacs,由于我不希望下划线char\uuu打断一个单词,因此我将脚本放在: (modify-syntax-entry ?_ "w") 在Emacs init文件中。其目的是,对于像test\u test这样的单词,双击该单词将选择\u前后的整个单词 但由于某些原因,脚本在初始化时无法工作。 如果我跑 然后它就会开始生效。为什么呢 顺便说一句,init中的所有其他设置都运行良好,只有修改语法条目在初始启动后需要额外评估。每个缓冲区都有自己的语法表,这通常取决于缓冲区的主要模式。在Emacs init文件
\uuu
打断一个单词,因此我将脚本放在:
(modify-syntax-entry ?_ "w")
在Emacs init文件中。其目的是,对于像test\u test
这样的单词,双击该单词将选择\u
前后的整个单词
但由于某些原因,脚本在初始化时无法工作。
如果我跑
然后它就会开始生效。为什么呢
顺便说一句,init中的所有其他设置都运行良好,只有
修改语法条目
在初始启动后需要额外评估。每个缓冲区都有自己的语法表,这通常取决于缓冲区的主要模式。在Emacs init文件中运行代码时,它只是修改加载文件时使用的临时缓冲区的语法表,而不是常规缓冲区
大多数语法表继承自标准语法表,因此您可以通过为modify syntax entry
提供另一个参数来更改该表:
(modify-syntax-entry ?_ "w" (standard-syntax-table))
每个缓冲区都有自己的语法表,这通常取决于缓冲区的主要模式。在Emacs init文件中运行代码时,它只是修改加载文件时使用的临时缓冲区的语法表,而不是常规缓冲区 大多数语法表继承自标准语法表,因此您可以通过为
modify syntax entry
提供另一个参数来更改该表:
(modify-syntax-entry ?_ "w" (standard-syntax-table))
请参阅Elisp手册,节点。在这里,您将看到: 通常,每个主要模式都有自己的语法表,其中 它安装在所有使用该模式的缓冲区中。例如 变量
emacs lisp mode syntax table
保存
Emacs Lisp模式和c-mode-syntax-table
保存使用的语法表
通过C模式。更改主模式的语法表会更改中的语法
所有该模式的缓冲区,以及随后放入的任何缓冲区
在那种模式下
您需要更改当前缓冲区的语法表(将
通常在相同模式下对所有缓冲区进行更改)
当前语法表,即当前缓冲区的语法表,由函数语法表
返回。这就是您传递给修改语法的内容:
;;修改当前语法表(不是“标准语法表”)。
(修改语法条目?u“w”(语法表))
函数语法表
在Elisp手册节点中进行了说明
但是,您似乎希望对所有缓冲区进行此更改,无论模式如何。是这样吗?那可能是个错误
您可能应该做的是:
确定要以这种方式修改的模式
对于这些模式,将对modifysyntax entry
的调用放入一个函数中,该函数添加到每个模式的模式挂钩中(使用addhook
)
例如,要修改,例如,foo模式的语法
:
(defun my-syntax () (modify-syntax-entry ?_ "w" (syntax-table)))
(add-hook 'foo-mode-hook 'my-syntax)
请参阅Elisp手册,节点。在这里,您将看到:
通常,每个主要模式都有自己的语法表,其中
它安装在所有使用该模式的缓冲区中。例如
变量emacs lisp mode syntax table
保存
Emacs Lisp模式和c-mode-syntax-table
保存使用的语法表
通过C模式。更改主模式的语法表会更改中的语法
所有该模式的缓冲区,以及随后放入的任何缓冲区
在那种模式下
您需要更改当前缓冲区的语法表(将
通常在相同模式下对所有缓冲区进行更改)
当前语法表,即当前缓冲区的语法表,由函数语法表
返回。这就是您传递给修改语法的内容:
;;修改当前语法表(不是“标准语法表”)。
(修改语法条目?u“w”(语法表))
函数语法表
在Elisp手册节点中进行了说明
但是,您似乎希望对所有缓冲区进行此更改,无论模式如何。是这样吗?那可能是个错误
您可能应该做的是:
确定要以这种方式修改的模式
对于这些模式,将对modifysyntax entry
的调用放入一个函数中,该函数添加到每个模式的模式挂钩中(使用addhook
)
例如,要修改,例如,foo模式的语法
:
(defun my-syntax () (modify-syntax-entry ?_ "w" (syntax-table)))
(add-hook 'foo-mode-hook 'my-syntax)
一个横向解决方案:将有问题的代码行替换为
(global-superword-mode 1)
这将告诉Emacs,您喜欢您的“单词移动”实际操作标识符,而不是Emacs传统上定义的单词。优点是它保持了单词的正常定义供内部使用,因此理论上它应该比你的方法更少地破译代码。一个横向解决方案:用
(global-superword-mode 1)
这将告诉Emacs,您喜欢您的“单词移动”实际操作标识符,而不是Emacs传统上定义的单词。优点是它保持了单词的正常定义供内部使用,因此理论上它应该比您的方法更少地分解代码。每个缓冲区都有自己的语法表。emacs init文件以临时缓冲区作为当前缓冲区运行。Read Hi@Barmar,我已经阅读了emacswiki,但我仍然不知道如何破解它。你介意再解释一下吗?谢谢。emacs.stackexchange.com可能是获得帮助的更好地方。每个缓冲区都有自己的语法表。emacs init文件以临时缓冲区作为当前缓冲区运行。Read Hi@Barmar,我已经阅读了emacswiki,但我仍然不知道如何破解它。