当前位置:  开发笔记 > 开发工具 > 正文

你能在vi/vim中的括号中抓取或删除吗?

如何解决《你能在vi/vim中的括号中抓取或删除吗?》经验,为你挑选了5个好方法。

鉴于C中的这行代码:

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));

有没有办法从第一个粗体括号中删除或抽出其匹配的括号?我想过df),但这只会让你在9.0之后.

有没有类似的方法让vim抓住匹配大括号之间的所有内容,无论换行?



1> CMS..:

怎么样dib或者di(.

它将删除光标所在的内部(...)块.

我喜欢文字对象的动作和选择!


是否可以删除括号?(是的,我回答了我自己的问题:'dab` =>删除*a*块(包括它的括号)
幸运的是,这个问题是我谷歌的第一个问题 - 我不知道这个答案多少次救了我.我总是忘记它...... :-(
我投了票.另外,如果你想纠正括号内的单词,请执行**ciw**.
+1!最近我发现文字对象动作时,我感到很震惊!不再试图将光标定位在正确的位置来抽取文本:D

2> 小智..:

各种动作:%

%命令跳转到光标下项目的匹配项.将光标定位在开口(或关闭)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进入可视模式,然后指定您想要达到2parens的水平.最后a)选择"一个块".之后你可以使用dx删除等.

如果您不想包含外部的parens,可以使用"inner block"代替:

v2i)

有关:help object-select相关命令的完整列表,请参阅.


有趣的是,我一直认为"a"的意思是"周围"而不是"a".感觉它更好地补充了"内在".似乎没有一天没有学习关于Vim的新东西.

3> Kevin..:

要删除一对括号内的所有内容,您始终可以发布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))'


你应该添加一个说"a"作为"i"对应的注释,因为这可能会帮助很多人.

4> 小智..:

您可以使用d%进行删除,y%进行yanking.


%是"匹配的括号,括号或括号"的运动说明符.任何移动规范都可以与d和y(以及许多其他事物)配对.

5> David Norman..:

将光标放在第一个括号上,然后按v%yv%d.


大!%跳到匹配的paren.所以你甚至可以使用d%和y%.
推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有