我有一个输入文字如下 -
(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 Editor进行此操作?
更新: 我想我错过了一个重要的观点,即值A,B,C ...... I ......可以有不同的长度。我只是用它们作为符号。
谢谢!
答案 0 :(得分:3)
将光标放在parens (A B C)
上面或内部的任何位置:
v 一 ( 控制 + v
现在您已选择(A B C)
并处于块选择模式。使用任何机制来阻止向下选择。如果它是几行,你可以向下移动。如果它很多,您可以添加计数,或使用搜索(/
)或文件结尾 Shift + g 。
选择全部:
ý / ) 输入 P
这将猛拉(y)整个块,移动到关闭的paren,然后粘贴块(p)。
您可以使用图案替换。这是特定于您的示例,我们正在寻找模式(A B C)
,其中A,B和C是括号中包含的大写字母,用空格分隔。我们将该模式的匹配加上以下空格,并将其替换为该模式的匹配,空格和模式匹配。
:%s/\(([A-Z] [A-Z] [A-Z])\) /\1 \1/
答案 1 :(得分:1)
(这些在vim中为我工作)
使用块选择:
14l<C-v>jj6ly7lp
使用宏(如果长度不同):
使用以下方式记录宏:
qqf(;vf)y;pj0q
然后根据需要重复:
100@q
适用于100行的文件
答案 2 :(得分:1)
是的,有几种方法可以在vim中执行此操作(与大多数事情一样)。我可能会选择快速宏:转到第一行并从正常模式点击qa
开始录制名为“a”的宏。现在手动编辑该行。当然你会希望操作是通用的,所以不要只输入值,使用yank并将其复制。编辑完成后,退出到正常模式并按j向下移动到下一行(这将使您在下一行运行宏)。再次点击q
以停止录制,然后键入@a
以执行下一行的宏,然后再次点击它以在下一行上运行它等。或者,一旦执行{{1} }一次,您可以@a
再次运行相同的宏。您还可以多次提供@@
的计数。
或者,您可以使用@@
命令执行正则表达式,但这取决于您的行实际外观以及您对正则表达式的好处。
答案 3 :(得分:0)
我结合了bmearns和Kev给出的技术。
所以我做的如下
q
录制宏。q
停止录制宏它工作得非常好! 非常感谢你们!