你可以在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
。
做出这个答案“教我自己去钓鱼” 。