鉴于C中的这行代码:
printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
有没有办法从第一个粗体括号中删除或抽出其匹配的括号?我想过df),但这只会让你在9.0之后.
有没有类似的方法让vim抓住匹配大括号之间的所有内容,无论换行?
怎么样dib
或者di(
.
它将删除光标所在的内部(...)块.
我喜欢文字对象的动作和选择!
该%
命令跳转到光标下项目的匹配项.将光标定位在开口(或关闭)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主页上找到"扩展%匹配"插件.
您可以%
通过进入: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
相关命令的完整列表,请参阅.
要删除一对括号内的所有内容,您始终可以发布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))'
您可以使用d%进行删除,y%进行yanking.
将光标放在第一个括号上,然后按v%y
或v%d
.