为什么ci“和ci(,ci {…performance不同?
我们都知道什么是ci" ci( ci[在日常的编辑中非常方便,我发现了一些奇怪的东西,并且检查了帮助,没有find原因。 
说,我有一个文件:
 foo "target" foo 'target' foo (target) foo {target} foo [target] foo <target> 
 如果我的光标在每行的开头 ,(在' f '),然后我键入ci“,ci',ci(… 
  cix只能使用引号(单或双),不适用于括号。 为什么他们的行为有所不同? 
  ( dix , vix相同) 
用–noplugin,vim 7.3进行testing
谢谢。
更新
感谢@romainl的答案。 我仍然怀疑“vim中的pair处理”
检查这个例子:
 foo "targ\"eti\" some\"thing else " 
 如果我有上面这样的一行,我input“ ci" ,无论光标是在开头还是在引号之间,它都可以正常工作,看来vim确实有“pair”的概念吗? 
这也许是你的配对意思?
 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"像他们那样工作,exception值是引号,这里不是括号。 
Vim不认为引号括起来是成对的。 它有一个内部逻辑来匹配与实际对一起工作的对,但不包含引号,因此在行为上是不同的。
你不是第一个抱怨这种差异: 这是一个解决scheme ,也许你可以find其他人。
编辑
我不太了解Vim的内部知识,所以我只能在这里做出假设。
 如果你问Vim做ci"尽量find一对双引号,但是双引号不是成对的:没有办法告诉"是闭合的还是与括号相反的开头的。 因此,Vim必须做出一些select。 国际海事组织(IMO),考虑到家庭其他成员如何工作,最有意义的select是假定光标位于引号之间,并从第一个到第一个从右到第一个之间select。 我只能假设这种方法在某种程度上被certificate是错误的,或者由于某种原因而不起作用,另一种方法(当前的方法)占上风。 
 另一种解释可能是, i<something>机制与特定子系统(可能与showmatch相同)无法正确处理引号。 
 无论如何,就像你一样,我发现这种差异很奇怪,我已经把它内在化了,并把我对<action>i"用法与其他人的工作方式进行了2t"ci" ,直到实际上做了2t"ci"或者某种变体而不是ci" ! 没有效率,我知道。 
 你读过:h a' ? 我完全忘记了自己对这个问题的“有限理解”,但是它在那里! 它说: 
“只能在一行内工作,当光标开始引用时,Vim会从行首search,找出哪些引用对形成一个string。
 我从中得到的是这样的:由于某些我们不了解的原因,Vim使用了另外一种匹配引号的机制,而不是其他对,这就是为什么ci"和cib和朋友不同的原因。我相当肯定,这个大局看起来很像我想象的那样。 
对我来说,它看起来很像是一个伪装成function的bug或限制。
如果你仍然好奇,我build议你在vim-dev上再问一个问题。