【问题标题】:How to select between brackets (or quotes or ...) in Vim?如何在 Vim 中的括号(或引号或 ...)之间进行选择?
【发布时间】:2010-11-06 21:51:06
【问题描述】:

我确定以前有这样的插件,但现在我需要它,我似乎(自然)找不到它,所以我只想问得好简单。

在括号、引号或通常是匹配字符列表之间进行选择的最简单方法是什么?

   write ( *, '(a)' ) 'Computed solution coefficients:'

例如,这里我想选择(a),或者Computed solution coefficients:

我对多行不感兴趣,只对一行发生的情况感兴趣。

【问题讨论】:

    标签: vim quotes brackets parentheses yank


    【解决方案1】:

    我想补充已经很好的答案。我来这里是为了寻找一种方法来更改 html 括号内的文本,所以我想为其他也在寻找它的人提供一个答案。

    您可能认为ci< 会起作用,但实际上只有当您位于其中一个标签内时才会起作用:

    <would work inside here> But not here </would work inside here>
    

    我想要的是改变html标签之间的文本:

    <div>change me</div>
    

    我想要的是“更改内部标签”:cit

    感谢提到文档 (:help text-objects) 的其他答案,这就是我找到所需内容的方式。

    【讨论】:

      【解决方案2】:

      要在单引号之间进行选择,我通常会使用vi'(“选择内部单引号”)。

      在括号块内,我使用vib(“选择内部块”)

      在花括号块内,您可以使用viB ("capital B")

      要使选择“包含”(同时选择引号、括号或大括号),您可以使用a 而不是i

      您可以阅读手册上的Text object selections 或vim 中的:help text-objects 的更多信息。

      【讨论】:

      • 感谢您的提示,我一直在搜索并要求类似的内容,但对我的结果不满意。太棒了。
      • 这个技巧非常简单,很容易在我的大脑和肌肉记忆中使用。谢谢。
      • 这是一个非常有用的提示。无需再为额外的按键而摸索。谢谢你的链接。
      【解决方案3】:

      我会在投票最多的答案中添加一个细节:

      如果您正在使用 gvim 并想复制到剪贴板,请使用

      "+&lt;command&gt;

      复制括号(或括号或大括号)之间的所有内容

      例如:"+yi} 会将光标所在大括号之间的所有内容复制到剪贴板。

      【讨论】:

      • 这与问题完全正交,不应作为答案。您可以在每个询问y的问题上写下这个。
      • 这是对答案的补充,而不是答案本身。
      • 那么它应该是对那个答案的编辑,这个帖子原样没有回答这个问题。
      • 这是一个不使用 gvim 的广告 :) 谁需要额外的两个 shift+keypress 在他们的生活中?
      【解决方案4】:

      使用searchpair 内置函数在.vimrc 中编写一个Vim 函数:

      searchpair({start}, {middle}, {end} [, {flags} [, {skip}
                  [, {stopline} [, {timeout}]]]])
          Search for the match of a nested start-end pair.  This can be
          used to find the "endif" that matches an "if", while other
          if/endif pairs in between are ignored.
          [...]
      

      (http://vimdoc.sourceforge.net/htmldoc/eval.html)

      【讨论】:

        【解决方案5】:

        这种选择方法是内置的,并且在 Vim 帮助中有详细介绍。它涵盖了 XML 标签等等。

        :help text-objects

        【讨论】:

        • :帮助文本对象更接近有用的东西......你至少可以提到一些常见的东西,比如在可视模式下的 a" 和 a(。
        • (另外,+1 因为尽管我是 vim 的老用户,但我不知道这些!)
        • @Stobor 。干杯修复了该参考
        【解决方案6】:

        使用箭头或hjkl 进入其中一个括号表达式,然后使用v 选择视觉(即选择)模式,然后使用% 跳转到另一个括号。

        【讨论】:

        • (不幸的是,不做引号......)
        【解决方案7】:

        要在单引号内选择,请使用vi'

        在括号内选择使用vi(

        【讨论】:

        • 注意:ci'ci( 用于更改而不是视觉选择。但这正是我想要的。谢谢:)
        • 第二个只在 () 块内有效,所以通常我会使用 %vi(%vib
        【解决方案8】:

        使用括号内的任何导航键,然后您可以使用yi(yi) 复制匹配括号内的所有内容。这也适用于方括号(例如yi])和花括号。除了y,您还可以删除或更改文本(例如ci)di])。

        我用双引号和单引号试过这个,它似乎也可以在那里工作。对于您的数据,我愿意:

        write (*, '(a)') 'Computed solution coefficients:'
        

        将光标移动到C,然后输入yi'。将光标移到空行,点击p,得到

        Computed solution coefficients:
        

        作为CMS noted,这也适用于视觉模式选择 - 只需使用vi)vi}vi'等。

        【讨论】:

        • 我通常在寻找一种方法来选择预定义匹配字符之间的所有内容(通常只有单引号和双引号,以及各种括号)。
        • 分开的单词是什么意思?我在 "[x, y, z]" 上试了一下,它选择了 "x, y, z"
        • 忽略最后一条评论 - 发现问题所在。像魅力一样工作:-)
        • 它似乎也适用于引号yi" select all withing quotes
        • 似乎不太适合 azerty (iso-fr) 布局,因为 {, [, 必须使用“Alt Gr”键访问。
        【解决方案9】:

        我做了一个插件vim-textobj-quotes:https://github.com/beloglazov/vim-textobj-quotes

        它为任何类型的最接近的引号对提供文本对象。仅使用 iqaq 它允许您对当前围绕光标、位于光标前面或位于 (按优先顺序)。换句话说,它会在需要到达引号时向前或向后跳转。

        看例子更容易理解(光标显示为|):

        1. 之前:foo '1, |2, 3' bar;按diq后:foo '|' bar
        2. 之前:foo| '1, 2, 3' bar;按下diq后:foo '|' bar
        3. 之前:foo '1, 2, 3' |bar;按下diq后:foo '|' bar
        4. 之前:foo '1, |2, 3' bar;按下daq后:foo | bar
        5. 之前:foo| '1, 2, 3' bar;按下daq后:foo | bar
        6. 之前:foo '1, 2, 3' |bar;按下daq后:foo | bar

        上面的例子是针对单引号给出的,插件对双引号(")和反引号(`)的工作方式完全相同。

        您还可以使用任何其他运算符:ciqdiqyiqviq 等。

        请查看上面链接的 github 页面了解更多详情。

        【讨论】:

          【解决方案10】:

          vim 中的一个简单的键盘映射可以解决这个问题。 地图 viq F”lvf”hh 上述命令将 viq 映射到键以在引号之间进行搜索。将 " 替换为任何字符并创建您的键盘映射。 在启动的时候把它放在vimrc中,你应该可以每次都使用它。

          【讨论】:

            猜你喜欢
            • 2020-01-30
            • 1970-01-01
            • 2014-08-07
            • 2012-03-18
            • 1970-01-01
            • 1970-01-01
            • 2017-07-05
            • 1970-01-01
            • 2016-04-09
            相关资源
            最近更新 更多