关于如何在 vim 中搜索整个单词,有几个答案。例如,这个链接How to do whole-word search similar to "grep -w" in Vim 回答了它。
我想知道在 vim 中是否有替代
\<word\>
的方法来搜索整个单词?我问的原因是出于好奇。我想知道 vim 的替代方案。我知道其他一些工具,例如 grep
可以完成相同的任务,但我有兴趣在 vim
中找到方法。
怎么了?\<\>
我在问替代品。
从技术上讲是的,您可以将光标放在文档中的那个词上,然后按 *,这将自动用词边界包围的词填充搜索。与 # 相同,用于向后搜索。
此外,Vim 的默认搜索转义非常冗长且设计不佳。我强烈建议使用“非常神奇”的开关
\v
开始所有搜索,这样您就不必转义特殊字符。正如您可以键入 /\v<word>
和 <
和 >
将被正确视为单词边界而无需转义它们。
为所有搜索“启用”非常神奇的映射:
nnoremap / /\v
nnoremap ? ?\v
另请参阅此处的答案:
https://stackoverflow.com/a/44296906/584940
/\v<yourword>
https://stackoverflow.com/a/71241990/584940
map w /\v<><Left>
第二个链接可能(我猜)最适用于您的问题,特别是如果您输入 .vimrc
即使不做,也只需要做一次映射。当然,映射
w
会覆盖其典型的“下一个词”行为。这对你来说可能是可以接受的,因为W
(大写W)有类似的行为,“下一个词”(这通常是我真正想做的)。
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
总计