说,我有一个文件:
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)
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提出更多的问题。