vim – 为什么ci“和ci(,ci {…行为不同?

前端之家收集整理的这篇文章主要介绍了vim – 为什么ci“和ci(,ci {…行为不同?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们都知道什么是“ci”ci(ci […,在日常的编辑中非常方便,我发现一些奇怪的东西,检查帮助,没有找到原因。

说,我有一个文件

foo "target"
foo 'target'
foo (target)
foo {target}
foo [target]
foo <target>

如果我的光标在每一行的开头,(在’f’),然后我键入ci“,ci’,ci(…

cix仅使用引号(单或双),不适用于括号。为什么他们的行为有所不同?

(dix,vix相同)

用-noplugin,vim 7.3进行测试

谢谢。

更新

感谢@romainl的答案。我仍然怀疑“vim中的配对处理”

检查这个例子:

foo "targ\"eti\" some\"thing else "

如果我有一个像上面这样的行,我键入ci“,无论光标是在开头还是在引号之间,它完美地工作,似乎vim有”对“的想法?

这可能是你对配对的意义吗?

foo "target x some"thing else "
foo (target x some(thing else )

我有两行,如果(光标在x)我键入ci“和ci(没有发生在第二行,但第一行更改为:

foo "I"thing else " (I is cursor)
ci(与ci [,ci {和cit和所有其他< action> i< something>一样,只有ci’和ci“像他们一样工作。异常值是引号,这里不是括号。

Vim不认为引号是成对的,而括号。它具有内部逻辑,用于匹配与实际对匹配的对,但不与引号对应,因此行为的差异。

你不是第一个抱怨这个差异的人:this is one solution,也许你可以找到别人。

编辑

我不太了解Vim的内部,不幸的是,我只能在这里做出假设。

如果你要求Vim做ci“它最好找到一双双引号,但是双引号不会成对:没有办法告诉一个”是关闭的一个或开头是否与括号相反。因此,Vim必须做出一些选择。海事组织,选择最有意义的考虑到家庭其他成员如何工作,将假定光标在引号之间,从第一个到第一个到第一个到左边的选择。我只能假设这种方法在某种程度上被证明是错误的,或者由于某种原因而没有起作用,而另一种方法(目前的方法)胜于此。

另一个解释可能是,我的东西机制以某种方式绑定到无法正确处理引号的特定子系统(可能与showmatch相同)。

无论如何,就像你一样,我发现这个差异很奇怪,我以某种方式内化了它,并将我的使用< action> i’与他人的工作方式对齐,实际上做了2t“ci”或者一些变种,而不是词“!效率低下,我知道。

你读过吗?我完全忘记了我对这个问题的“有限的理解”,但是在那里!它说:

“Only works within one line. When the cursor starts on a quote,Vim will figure out which quote pairs form a string by searching from the start of the line.”

我从中得到的是:由于我们不知道的一些原因,Vim使用另一种机制来匹配报价而不是其他对,这就是为什么ci“与ciband的朋友不同,根本原因根本不清楚,我相当肯定,大片看起来好像我想像的那样。

对我来说,它看起来很像一个bug或一个限制伪装成一个功能

如果你还好奇,我建议你在vim-dev提出更多的问题。

猜你在找的Bash相关文章