在Vim中搜索整个单词(短划线字符)

Sam*_*man 5 vi vim editor find

我知道要搜索我应该使用的整个单词/\<mypattern\>.但是对于破折号(+ U002d)角色来说并非如此,并且/\<-\>始终失败.我也试过/\<\%d45\>,它也失败了.有谁知道原因?

编辑2:正如@bobbogo提到的破折号不在'iskeyword'所以我添加:set isk+=-/\<-\>工作!

Edit1:我认为在Vim中/\<word\>只对字母数字字符有效,我们不应该将它用于标点字符(参见Edit2).我应该改变我的问题并询问我们如何搜索标点符号作为一个整体世界,例如我希望我的搜索在"a?b"中找到问号,并且模式如"??" 和"abc?" 不应该是有效的.

bob*_*ogo 5

\<匹配非单词字符和单词字符之间的零宽度边界。什么是字字符?它由isk选项 ( :help isk) 指定。

由于-不在您的isk选项中,因此-永远无法开始单词,因此永远不会\<-匹配。

我不知道你想要什么,但/\>-\<会匹配 中的破折号hello-word

  • 我使用此映射来切换关键字中的破折号: `nnoremap &lt;expr&gt; &lt;leader&gt;t- ':set isk' 。(index(split(&amp;isk, ','), '-') == -1 ? '+' : '-') 。'=-&lt;cr&gt;:设置 iskeyword?&lt;cr&gt;'`。 (2认同)