你可以在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“一个块”。 之后,您可以使用d或x删除等。
如果你不想包括外面的东西,你可以用“inner block”代替:
v2i)
请参阅:help object-select相关命令的完整列表。
那么dib或di( 。
它将删除光标所在的内部 (…)块。
我喜欢文本对象的运动和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%y或v%d 。
尝试ci [block-surrounder]
在你的情况下,将光标放在你高亮的两个圆括号之间的任意位置,然后尝试下面的键:ci(
正如David Norman的回答所言,
将光标放在第一个圆括号上,然后按v%y或v%d 。
来自http://vimdoc.sourceforge.net/htmldoc/vimindex.html的说明:;
在正常模式下标记char note动作
-------------------------------------------------- ----------------------------
| V | v以字符视觉模式开始
|%| %1find下一个(curl/方形)括号
这条线,去它的比赛,或去
匹配注释括号,或者去匹配
| d | [“x] d {动作} 2删除Nmove文本[进入缓冲区x]
这意味着它将select包括两个括号( % )之间的所有内容,同时向你显示select( v ),然后抽出/复制或删除/剪切。 (到默认缓冲区。)
你可以把/贴上p 。
做出这个答案“教我自己去钓鱼” 。