【问题标题】:How to quickly remove a pair of parentheses, brackets, or braces in Vim?如何快速删除 Vim 中的一对圆括号、方括号或大括号?
【发布时间】:2021-06-29 17:45:06
【问题描述】:

在 Vim 中,如果我有(在 Ruby 中)这样的代码:

anArray << [anElement]

我的光标在第一个[,我可以用%键跳到],我可以删除[]d%对之间的所有内容,但是如果我只想删除[] 留下两者之间的所有剩余内容。换句话说,最快的到达方式是:

anArray << anElement

【问题讨论】:

  • 我会做xf],但它不做paren-matching。或者,首先通过% 进行手动匹配,然后x 后跟两个反引号,然后是x
  • 很好的问题。我是一个多产的 vim 用户,这确实不时出现,而且我没有好的内置解决方案。
  • Alok 的第二个选项很有效。

标签: vim


【解决方案1】:

使用 Vim 的 Surround 插件,您可以使用 ds&lt;delimeter&gt; 消除周围的分隔符。

要通过Vundle插件安装,请添加

Plugin 'tpope/vim-surround' 

到您的.vimrc 文件并运行:PluginInstall

【讨论】:

    【解决方案2】:

    ma%x`ax(在寄存器a中标记位置,去匹配paren,删除char,去标记a,删除char)。

    编辑:

    %x``x 做同样的事情 (thanks to @Alok for the tip)。

    【讨论】:

    • 正如我在主要评论中所说,您不需要手动标记:您可以通过两个反引号转到最后一个位置。所以 %x``x 更快。
    • 这与我一直在做的事情相似,但对于一个本应非常高效的编辑器来说,这是非常多的按键操作。
    • 我更喜欢%%x``x,因为你可以在括号内的任何地方。
    • 您只能执行%%x``x 并在没有嵌套括号的括号内获得所需的效果。
    • %x ctrl-o x 也适用于那些更习惯于该跳转快捷方式的人。
    【解决方案3】:

    可以利用 Vim 中内置的文本对象 (见:help text-objects)。所需的编辑可以表示为 以下三个动作的顺序。

    1. 剪切方括号内的文字:

       di[
      
    2. 选择(空)方括号:

       va[
      

      或者,您可以只选择下面的字符 光标和它左边的那个,因为命令 从第 1 步开始,光标始终位于右括号上:

       vh
      
    3. 将剪切的文本粘贴到选定的括号上:

       p
      

    总之,它为我们提供了以下正常模式命令序列:

    di[va[p
    

    或者,当使用第 2 步的替代形式时:

    di[vhp
    

    【讨论】:

    • 感谢您展示了一种非插件方式来执行此操作!非常适合我们这些从事嵌入式系统工作的人。
    • 就不能跳过第一步吗? va[ 将选择括号和其中的所有内容。然后p 将粘贴整个内容。我不确定di[ 在这里做了什么。我知道我正在回复一个旧答案,所以也许它以前不是这样工作的?
    • @JonathanWren:如果你只做va[p,你最终会得到未命名寄存器的内容——不管它当时是什么——覆盖括号内的文本; di[ 必须先将括号内的文本剪切到该寄存器中,以便后面的va[p 覆盖。
    【解决方案4】:

    如果您对指向该行第一个字符的标记或使用 % ...

    有疑问
    di[vhp 
    

    也可以...当光标在其中的任何位置时,它会删除匹配的 [] 括号。 '[' 可以替换为 '{' 或 '(' .

    【讨论】:

      【解决方案5】:

      如果您想一次删除一行分隔符,其他答案可以正常工作。

      另一方面,如果您想删除一个函数并且它是整个文件的分隔符,请使用:

      :%s/function(\(.*\))/\1/g
      

      arguments 替换文件中所有位置的function(arguments)

      【讨论】:

        【解决方案6】:

        您可以在光标位于方括号/圆括号上时使用 d%。

        【讨论】:

        • 这不仅删除了括号,还删除了包括中间文本在内的括号。
        猜你喜欢
        • 2021-01-11
        • 2011-01-12
        • 1970-01-01
        • 2014-10-13
        • 1970-01-01
        • 2017-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多