【问题标题】:Vim Copy and paste text on the same lineVim 复制并粘贴文本到同一行
【发布时间】:2012-09-24 10:09:54
【问题描述】:

我有一个输入文本如下 -

(command (and (A B C) ))
(command (and (D E F) ))
(command (and (G H I) ))
...
...

我想将部分文本复制并粘贴到与

相同的行
(command (and (A B C) (A B C)))
(command (and (D E F) (D E F)))
(command (and (G H I) (G H I)))
...
...

是否可以使用 VI 编辑器自动完成?

更新: 我想我错过了一个重要的点,即值 A、B、C ... I ... 可以具有可变长度。我只是将它们用作符号。

谢谢!

【问题讨论】:

  • Ctrl-v visual-block, yank and paste
  • @kev:将其发布为答案。
  • 当行数很大时,这是太多的手动任务。
  • 你试过替换命令:%s/foo/bar/ 吗?
  • @RajTendulkar :正则表达式非常适合可变长度。问题是A B C 模式是否有嵌套括号。如果没有,您可以轻松地使用正则表达式来捕获括号之间(或包括)括号之间的所有内容。类似\(([^)])\)

标签: vim


【解决方案1】:

(这些在 vim 中对我有用)

使用块选择:

14l<C-v>jj6ly7lp

使用宏(如果长度不同):

使用以下方法录制宏:

qqf(;vf)y;pj0q

然后根据需要重复:

100@q

适用于 100 行的文件

【讨论】:

    【解决方案2】:

    我结合了 bmearns 和 Kev 给出的技术。

    所以我的做法如下

    1. 通过q开始录制宏。
    2. /( 找到左括号,所以它转到第二个。
    3. n 转到第三个。
    4. v 标记视觉块
    5. /) 搜索括号的结尾
    6. y 复制可视块
    7. n 转到下一个 ) 括号
    8. 一次箭头键可转到右括号旁边
    9. p 粘贴可视块
    10. 向下箭头键转到下一行。
    11. Home 键转到下一行的第一个位置。
    12. q 停止录制宏
    13. @a 对所有行执行相同的操作。

    而且效果很好! 非常感谢大家!

    【讨论】:

      【解决方案3】:

      如果所有行的长度和格式都与您的示例相同:

      光标位于括号内或括号内的任意位置(A B C):

      va(Ctrl+v

      现在您已选择 (A B C) 并处于块选择模式。使用任何机制来阻止选择向下。如果是几行,你可以向下移动。如果它很多,您可以添加计数,或使用搜索 (/) 或文件结尾 Shift+g

      选择全部后:

      y/)输入p

      这将拉动(y)整个块,移动到关闭的括号,然后将块粘贴到它之后(p)。

      如果行的长度不同或不能合理地选择为块

      您可以使用模式替换。这特定于您的示例,我们正在寻找模式 (A B C) 其中 A、B 和 C 是包含在括号中并由空格分隔的大写字母。我们取该模式的匹配加上后面的空格,并将其替换为该模式的匹配、一个空格,然后再次匹配该模式。

      :%s/\(([A-Z] [A-Z] [A-Z])\) /\1 \1/
      

      【讨论】:

        【解决方案4】:

        是的,在 vim 中有几种方法可以做到这一点(就像大多数事情一样)。我可能会选择快速宏:转到第一行并从正常模式点击qa 开始录制名为“a”的宏。现在手动对该行进行编辑。当然你会希望操作是通用的,所以不要只输入值,使用 yank 和 put 来复制它。编辑完成后,退出到正常模式并按 j 向下移动到下一行(这将设置您在下一行运行宏)。再次点击q 停止录制,然后输入@a 在下一行执行宏,然后再次点击它在下一行运行,等等。或者,一旦你执行一次@a,你可以执行@@ 再次运行相同的宏。您也可以向@@ 提供一个计数来执行多次。

        或者,您可以使用:s 命令执行正则表达式,但这取决于您的行的实际外观以及您对正则表达式的使用程度。

        【讨论】:

          猜你喜欢
          • 2019-01-31
          • 2019-01-31
          • 1970-01-01
          • 1970-01-01
          • 2012-07-14
          • 2012-07-08
          • 2023-03-11
          • 1970-01-01
          相关资源
          最近更新 更多