在C:中给出这行代码:
printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
有没有办法从第一个粗体括号中删除或抽出其匹配的括号?我想过 df),但这只会让你在9.0之后。
是否有类似的方法让vim在匹配的大括号之间抓取所有内容,而不管新行?
答案 0 :(得分:178)
答案 1 :(得分:153)
%
command跳转到光标下项目的匹配项。将光标定位在开口(或关闭)paren上,并使用y%
进行yanking或d%
删除从光标到匹配的paren的所有内容。
这是有效的,因为%
是一个“动作命令”,所以它可以在vim期望这样一个命令的任何地方使用。来自:help y
:
["x]y{motion} Yank {motion} text [into register x]. When no
characters are to be yanked (e.g., "y0" in column 1),
this is an error when 'cpoptions' includes the 'E'
flag.
默认情况下,“item”包括括号,大括号,parens,C风格注释和各种预编译语句(#ifdef
等)。
您可以在Vim homepage找到“扩展%匹配”的插件。
您可以在命令模式下输入:help various-motions
来阅读%
及相关动作命令的文档。
您可以在可视模式下使用另一组动作命令来选择各种文本对象。
要解决您的具体问题,请执行以下操作:
printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
^
假设您的光标位于^
。输入以下序列以选择您要查找的零件:
v2a)
首先v
进入可视模式,然后指定你想要2
级别的parens。最后,a)
选择“一个块”。之后,您可以使用d
或x
删除等。
如果您不想包含外部的parens,可以改为使用“inner block”:
v2i)
有关相关命令的完整列表,请参阅:help object-select
。
答案 2 :(得分:28)
要删除一对括号内的所有内容,您始终可以发出di(
及其派生词。
注意:
正如@porglezomb在评论中建议的那样,您可以使用a
(“with with”)而不是i
(“inside”)来包含括号。因此,使用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))'
答案 3 :(得分:16)
您可以使用d%进行删除,y%进行yanking。
答案 4 :(得分:10)
将光标放在第一个括号上,然后按v%y
或v%d
。
答案 5 :(得分:2)
尝试ci [block-surrounder]
在您的情况下,将光标放在您高亮的2个括号之间的任意位置并尝试键:ci(
答案 6 :(得分:0)
大卫·诺曼的answer说,
v%y
或v%d
。来自http://vimdoc.sourceforge.net/htmldoc/vimindex.html的解释:
tag char note action in Normal mode ------------------------------------------------------------------------------ |v| v start characterwise Visual mode |%| % 1 find the next (curly/square) bracket on this line and go to its match, or go to matching comment bracket, or go to matching |d| ["x]d{motion} 2 delete Nmove text [into buffer x]
这意味着它将在两个括号(%
)之间选择所有内容,同时以可视方式向您显示选择(v
),然后选择/复制y
或删除/剪切d
它。 (到默认缓冲区。)
您可以使用p
进行粘贴/粘贴。