Emacs 搜索带有下划线的单词不被视为单词边界

You*_* Hu 1 regex emacs search word-boundary

使用正则表达式\bfoo\b搜索单词时foo,结果包括诸如foo_a和 之类的单词a_foo。如何从结果中排除这些词?即,如何要求 emacs 不将下划线视为单词边界。

You*_* Hu 5

我终于找到了解决方案:

默认情况下,下划线 _ 不是单词组成字符(换句话说,它是单词边界)。我们可以通过添加将下划线定义为单词组成字符

 (modify-syntax-entry ?_ "w")
Run Code Online (Sandbox Code Playgroud)

.emacs文件中。

为了使其在主要模式下工作,我们需要将此定义添加到模式挂钩中:

(defun yjf90 () (modify-syntax-entry ?_ "w"))
(add-hook 'f90-mode-hook 'yjf90)
Run Code Online (Sandbox Code Playgroud)

看到这个

更新:

更准确地说,我们应该区分词边界和符号边界。前者是\b,后者:符号的开始和结束分别是\_<\_>(这很尴尬,我使用 Emacs 多年都不知道它的存在)。大多数编程语言将下划线视为符号的一部分,因此问题的直接解决方案是用作\_<foo\_>搜索正则表达式。