vim 用 * 搜索带下划线的变量名

Hai*_*Kao 2 vim vi

当我按下*诸如 之类的变量名称时hello,vim 将突出显示诸如this->hello或 之类的名称this.hello,但不会突出显示_hello

这是一种非常奇怪的行为,因为我可以突出显示 all hello's by /hello。但由于某种原因,*行为与/.

有什么办法可以*突出显示所有hello的?

Ste*_*ris 5

当您使用*密钥时,它会有效地搜索

\<theword\>
Run Code Online (Sandbox Code Playgroud)

周围\<...\>意味着它只查找整个单词。所以bhello不会被发现,在你的例子中。

您可以通过以下方式修改计为非关键字值的字符 set iskeyword

默认(在我的版本中)是

iskeyword=@,48-57,_,192-255
Run Code Online (Sandbox Code Playgroud)

所以我们可以确保_不是这个的一部分:

set iskeyword=@,48-57,192-255,^_
Run Code Online (Sandbox Code Playgroud)

这可以放在您的.vimrc文件中或使用:set内部运行vim

  • `iskeyword` 通常是从 `fptlugin`s 设置的,并且一些语法文件也会混淆它。如果您仔细考虑一下,这很明显,因为它必须与当前的“文件类型”同步。因此,(1)没有“一个真正的`iskeyword`”,而是很多,并且(2)如果你想覆盖它,你必须从一个`after/ftplugin`来做,否则你的覆盖将被忽略。 (3认同)