在 vim 中搜索整个单词 - 除了使用 \<\>

问题描述 投票:0回答:2

关于如何在 vim 中搜索整个单词,有几个答案。例如,这个链接How to do whole-word search similar to "grep -w" in Vim 回答了它。

我想知道在 vim 中是否有替代

\<word\>
的方法来搜索整个单词?我问的原因是出于好奇。我想知道 vim 的替代方案。我知道其他一些工具,例如
grep
可以完成相同的任务,但我有兴趣在
vim
中找到方法。

\<\>
怎么了?

我在问替代品。

vim vi
2个回答
2
投票

从技术上讲是的,您可以将光标放在文档中的那个词上,然后按 *,这将自动用词边界包围的词填充搜索。与 # 相同,用于向后搜索。

此外,Vim 的默认搜索转义非常冗长且设计不佳。我强烈建议使用“非常神奇”的开关

\v
开始所有搜索,这样您就不必转义特殊字符。正如您可以键入
/\v<word>
<
>
将被正确视为单词边界而无需转义它们。

为所有搜索“启用”非常神奇的映射:

nnoremap / /\v
nnoremap ? ?\v

0
投票

另请参阅此处的答案:

第二个链接可能(我猜)最适用于您的问题,特别是如果您输入 .vimrc

即使不做,也只需要做一次映射。当然,映射

w
会覆盖其典型的“下一个词”行为。这对你来说可能是可以接受的,因为
W
(大写W)有类似的行为,“下一个词”(这通常是我真正想做的)。


  • 旁白:Vim 有两个“非空白字符”用例 -
    (强调我的'**或**')
These commands move over words or WORDS.

                                                       *word*
A word consists of a sequence of letters, digits and underscores, **or** a
sequence of other non-blank characters, separated with white space (spaces,
tabs, <EOL>).  This can be changed with the 'iskeyword' option.  An empty 
line is also considered to be a word.
                                                       *WORD*
A WORD consists of a sequence of non-blank characters, separated with white
space.  An empty line is also considered to be a WORD.

这实际上意味着:

word
/(w+
|
[\W]+/
---
*foo*
3
word
s 总计 (*, foo, *)
但是
WORD
/S+/
---
*foo*
1
WORD
总计

© www.soinside.com 2019 - 2024. All rights reserved.