Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Vim-重复字符的混乱搜索行为_Regex_Vim - Fatal编程技术网

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