有没有一种方法可以从第一个粗体括号到其匹配括号进行删除或复制?我想到了df),但这只能让您到达9.0后面。
printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
是否有类似的方法可以让vim获取匹配大括号之间的所有内容,而不管换行符?
%
命令 可以跳转到光标下的项目匹配项。将光标定位在开放(或关闭)括号上,使用 y%
进行复制或使用 d%
删除从光标到匹配括号的所有内容。
这是因为 %
是一个“运动命令”,所以它可以在 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”包括括号、大括号、圆括号、C风格的注释和各种预编译语句(#ifdef
等)。
有一个“扩展匹配”插件,你可以在Vim主页上找到。
你可以通过在命令模式下输入:help various-motions
来阅读有关 %
和相关运动命令的文档。
还有一组运动命令,你可以在可视模式下使用它们来选择不同的文本对象。
要解决你的具体问题,你需要执行以下操作:
printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
^
^
处。输入以下序列以选择您要查找的部分:v2a)
首先进入可视模式,然后指定要向上跳 2
层圆括号。最后使用 a)
选择“一个块”。之后,您可以使用 d
或 x
进行删除等操作。
如果您不想包含外部圆括号,则可以使用“内部块”代替:
v2i)
:help object-select
,查看所有相关命令的完整列表。a
是指“周围”而不是“a”。感觉它更好地补充了“内部”。似乎每天都能学到新的Vim知识。 - Andrew Marshalldi(
及其衍生词。
注意 :
如 @porglezomb 在评论中建议的那样,您可以使用 a
("along 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))'
a
是 i
的对应物,因为这有助于很多人理解。 - porglezomp%
来解决这个问题,但这需要更多时间,并且在我看来,只应用于更复杂的情况。删除特定范围内的内容正是di
的用例。 - daniel451d%
删除,使用 y%
复制。将光标放在第一个括号上,然后按下v%y
或v%d
。
尝试使用 ci[block-surrounder]
在您的情况下,将光标放置在您高亮显示的两个括号之间,并尝试按键:ci(
v%y
或v%d
。标记 字符 备注 正常模式下的操作 ------------------------------------------------------------------------------ |v| v 开始字符为单位的可视模式 |%| % 1 查找本行中下一个(花括号/方括号)括号并跳到它的匹配项,或跳转到匹配的注释括号,或跳到匹配项 |d| ["x]d{motion} 2 删除Nmove文本[到缓冲区x]这意味着它会选择两个括号之间和包括它们之间的所有内容(
%
),同时在视觉上向您显示选择内容(v
),然后将其复制/粘贴y
或删除/剪切d
。(到默认缓冲区。)p
可以进行粘贴。
dab
表示删除一个块(包括它的括号)) - bantic