你可以在vi / vim中的括号之间进行抓取或删除吗?

鉴于这行代码在C:

printf("%3.0f\t%6.1f\n", fahr, ( (5.0/9.0) * (fahr-32) ) );

有没有办法从第一个大括号删除或从第一个括号中删除? 我想过df) ,但只会让你在9.0之后。

有没有一种类似的方式来让vim抓住匹配大括号之间的所有内容,而不pipe换行符是什么?

各种运动:%

%命令跳转到光标下的项目的匹配。 将光标定位在打开(或closures)paren上,并使用y%作为yanking或d%来删除从光标到匹配paren的所有内容。

这是可行的,因为%是一个“动作命令”,因此vim可以在任何地方使用这样的命令。 来自:help y

 ["x]y{motion} Yank {motion} text [into register x]. When no characters are to be yanked (eg, "y0" in column 1), this is an error when 'cpoptions' includes the 'E' flag. 

默认情况下,“item”包括括号,大括号,parens,C风格的注释和各种预编译器语句( #ifdef等)。

在Vim主页上有一个“扩展%匹配”插件。

您可以通过input:help various-motions命令来阅读有关%和相关运动命令的文档:help various-motions在命令模式下进行:help various-motions

对象的select

还有一组运动命令可以在可视模式下用来select各种文本对象。

要解决您的具体问题,您将执行以下操作:

 printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))); ^ 

假设您的光标位于^ 。 input以下顺序select您要查找的零件:

 v2a) 

第一个v进入可视化模式,然后你指定你想要去2层次的向上。 最后a)select“一个块”。 之后,您可以使用dx删除等。

如果你不想包括外面的东西,你可以用“inner block”代替:

 v2i) 

请参阅:help object-select相关命令的完整列表。

那么dibdi(

它将删除光标所在的内部 (…)块。

我喜欢文本对象的运动和select!

要删除一对括号内的所有内容,可以始终发出di(及其衍生词。

注意 :

正如@porglezomb在他的评论中所build议的,你可以使用(“与”一起)而不是i (“内部”)来包含括号。 所以,使用da(删除()内的所有内容,包括()

删除直接外部括号内的文本:

所以,这行代码

 printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))); ^ ^ | | \_______\___---> Cursor range 

假设你的光标在上面提到的光标范围内,你可以发出以下命令:

 di( --> Deletes '5.0/9.0' ci( --> Substitutes '5.0/9.0' yi( --> Yanks '5.0/9.0' 

删除第n对外括号内的文本:

要抓住第n对外括号内的所有内容,只需在上述命令之前添加n 。 所以,使用与上面相同的光标位置,

 2di( --> Deletes '(5.0/9.0) * (fahr-32)' 2ci( --> Substitutes '(5.0/9.0) * (fahr-32)' 2yi( --> Yanks '(5.0/9.0) * (fahr-32)' 3di( --> Deletes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))' 3ci( --> Substitutes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))' 3yi( --> Yanks '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))' 

您可以使用d%作为删除,y%作为yanking。

将光标放在第一个圆括号上,然后按v%yv%d

尝试ci [block-surrounder]

在你的情况下,将光标放在你高亮的两个圆括号之间的任意位置,然后尝试下面的键:ci(

正如David Norman的回答所言,

将光标放在第一个圆括号上,然后按v%yv%d

来自http://vimdoc.sourceforge.net/htmldoc/vimindex.html的说明:;

在正常模式下标记char note动作        
 -------------------------------------------------- ----------------------------
 | V |  v以字符视觉模式开始
 |%|  %1find下一个(curl/方形)括号
                                       这条线,去它的比赛,或去
                                       匹配注释括号,或者去匹配
 | d |  [“x] d {动作} 2删除Nmove文本[进入缓冲区x]

这意味着它将select包括两个括号( % )之间的所有内容,同时向你显示select( v ),然后抽出/复制或删除/剪切。 (到默认缓冲区。)

你可以把/贴上p

做出这个答案“教我自己去钓鱼” 。