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”或者一些变种,而不是词“!效率低下,我知道。 你读过吗?我完全忘记了我对这个问题的“有限的理解”,但是在那里!它说:
我从中得到的是:由于我们不知道的一些原因,Vim使用另一种机制来匹配报价而不是其他对,这就是为什么ci“与ciband的朋友不同,根本原因根本不清楚,我相当肯定,大片看起来好像我想像的那样。 对我来说,它看起来很像一个bug或一个限制伪装成一个功能。 如果你还好奇,我建议你在vim-dev提出更多的问题。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |