【问题标题】:searching whole word in Vim (dash character)在 Vim 中搜索整个单词(破折号)
【发布时间】:2011-02-04 17:02:35
【问题描述】:

我知道要搜索整个单词,我应该使用/\<mypattern\>。但破折号 (+U002d) 字符并非如此,/\<-\> 总是失败。我也尝试/\<\%d45\> 也失败了。有人知道原因吗?

Edit2:正如@bobbogo 提到的破折号不在'iskeyword'中,所以我添加:set isk+=-/\<-\> 有效!

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

【问题讨论】:

    标签: vim editor find vi


    【解决方案1】:

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

    由于- 不在您的isk 选项中,所以- 永远开始 一个词,因此\<-永远 > 匹配。

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

    【讨论】:

    • 谢谢。现在我知道我的问题的原因了。我想搜索像-r 不是test-r 也不是-rtest 也不是test-rtest 之类的模式
    • 我找到它并将其添加到我的问题中(Edit2)
    • 我使用此映射来切换关键字中的破折号:nnoremap <expr> <leader>t- ':set isk' . (index(split(&isk, ','), '-') == -1 ? '+' : '-') . '=-<cr>:set iskeyword?<cr>'
    【解决方案2】:

    总是可以搜索正则表达式\byourwordhere\b

    【讨论】:

    • 感谢您的回复,但我认为 \b 不在 Vim 中。在 vim 中我们应该使用 "\\"
    【解决方案3】:

    正如 OP 所说。为了在搜索中包含破折号-,只需执行:

    :set isk+=-
    

    就是这样。

    示例:当您在字母 ccolor-primary 上按 * 时,它将搜索整个变量名,而不仅仅是 color

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      相关资源
      最近更新 更多