Vim - 重复字符的搜索行为令人困惑

时间:2017-03-10 22:09:14

标签: regex vim

假设我有一个带有重复字符的行,而我的光标位于该行的开头,例如

[=]===================

如果我运行/=,则会突出显示光标后面的=符号,如预期的那样。

=[=]==================

然而,如果我然后搜索/==,我会指望

=[==]=================

但我得到了

==[==]================

同样,对于/===,我希望

=[===]================

但我得到了

===[===]==============

有人可以解释这种行为吗?这是一个错误还是设计?

修改

在向后搜索时,我看到甚至更奇怪的行为。假设我的光标位于该行的下方:

?= :(预期)

===================[=]

?== :(预期)

==================[==]

?=== :(预期)

=================[===]

?==== :(意外)

===============[====]==

?===== :(意外)

============[=====]===

?====== :(预期)

==============[======]

?======= :(意外)

============[=======]=

?======== :(意外)

======[========]======

我真的很想听到这种行为的解释。

1 个答案:

答案 0 :(得分:2)

确实很奇怪。 Vim似乎从行的开头寻找匹配项,然后将匹配项与光标位置进行比较。

12[3]212321

现在你想要进入第5个位置,然后找12321 该行的第一场比赛是从位置1.这将匹配

[12321]2321

由于第五个位置的1已用于第一场比赛,vim将无法看到匹配

1232[12321]

在您的情况下,来自

/===
[=]===================

跳过该行的第一个匹配,光标将跳转到第二个匹配。

===[===]==============

编辑: 向后搜索也会计算从行首开始的匹配。 当你有一个20个字符的字符串

====================

并回顾?===将开始从该行的开头进行匹配:

=== === === === === === ==

并将匹配

=== === === === ===[===]==

匹配仍然是从左到右阅读,所以你不会在这里找到一个苹果:

reversed elppa