Regex Vim-重复字符的混乱搜索行为
假设我有一行带有重复字符,并且我的光标位于该行的开头,例如Regex Vim-重复字符的混乱搜索行为,regex,vim,Regex,Vim,假设我有一行带有重复字符,并且我的光标位于该行的开头,例如 [=]=================== 如果我运行/=,则光标高亮显示后的=符号将按预期显示 =[=]================== 然而,如果我随后搜索/==,我会期望 =[==]================= =[===]================ 但是我得到了 ==[==]================ ===[===]============== 同样,对于/=,我希望 =[==]======
[=]===================
如果我运行/=
,则光标高亮显示后的=
符号将按预期显示
=[=]==================
然而,如果我随后搜索/==
,我会期望
=[==]=================
=[===]================
但是我得到了
==[==]================
===[===]==============
同样,对于/=
,我希望
=[==]=================
=[===]================
但是我得到了
==[==]================
===[===]==============
有人能解释这种行为吗?这是一个bug还是出于设计
编辑
当我向后搜索时,我看到了更奇怪的行为。假设我的光标刚好在该行下方:
?=
:(预期)
?=
:(预期)
?==
:(预期)
?==
:(意外)
?====
:(意外)
?=======
:(预期)
?=======
:(意外)
?=======
:(意外)
我真的很想听到对这种行为的解释。这确实很奇怪。Vim似乎从行的开头查找匹配项,然后将匹配项与光标位置进行比较
12[3]212321
现在您要转到第5个位置,查找12321
线上的第一场比赛是从位置1开始的。那会匹配的
[12321]2321
由于第五个位置上的1
已用于第一次匹配,vim
将看不到匹配
1232[12321]
在您的情况下,使用
[=]===================
跳过行上的第一个匹配,光标将跳转到第二个匹配
===[===]==============
编辑:
向后搜索也会从行首开始计算匹配项。
当你有一个20个字符的字符串
====================
然后回顾?==
将从行首开始进行匹配:
=== === === === === === ==
而且会匹配
=== === === === ===[===]==
匹配仍将从左向右读取,因此您不会在此处找到苹果:
reversed elppa
这是设计的。查找模式的下一个匹配项从上一个匹配项结束的位置开始。这样做是为了提高效率。在除此之外的任何情况下,该行为是否与“下一个事件在光标后的下一个事件开始”不同?如果你能详细解释一下vim的行为是如何运作的,我会接受。我知道所有语言都是这样做的。啊,我明白了。当我的光标不在线时,有没有解释向后搜索中的不规则行为?我知道这是对原始问题的编辑,但它似乎更令人困惑。(不确定Vim是如何开箱即用的,或者它是我的vimrc中的某个插件或某个东西的结果,尽管我认为我没有任何插件真的会干扰搜索)。你的反向搜索似乎有打字错误。第一个示例是一行上有20个
=
,后面是21个。最后一次搜索。对于6个字符的==
似乎给了你一个8个字符的匹配[====]
。谢谢,我将返回并修复打字错误。另外,为了简洁起见,我使用了20个字符,而b/c我认为这不会影响任何事情,但我正在帮助文档上测试这一点,这些文档有一行跨越78个字符的=
。
====================
=== === === === === === ==
=== === === === ===[===]==
reversed elppa