You*_* Hu 1 regex emacs search word-boundary
使用正则表达式\bfoo\b
搜索单词时foo
,结果包括诸如foo_a
和 之类的单词a_foo
。如何从结果中排除这些词?即,如何要求 emacs 不将下划线视为单词边界。
我终于找到了解决方案:
默认情况下,下划线 _ 不是单词组成字符(换句话说,它是单词边界)。我们可以通过添加将下划线定义为单词组成字符
(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\_>
搜索正则表达式。