我尝试使用 vim 在所有行中复制和粘贴模式,但没有成功,假设我有一个如下所示的文本文件:
Hello name is Mishal
Hello name is jon
Hello name is dod
Hello name is joli
Hello name is sara
我想复制每一行中的最后一个模式或任何其他模式并将其放回到同一行的中间。这样它看起来像:
Hello Mishal name is Mishal
Hello jon name is jon
Hello dod name is dod
Hello joli name is joli
Hello sara name is sara
我知道它可以用其他工具来完成,比如 awk、sed、cut、paste 等,但我需要用 vim 来完成
答案1
你可以用宏来实现。在正常模式下输入q
加上任意字母即可在寄存器中启动宏录制a
。
然后将光标移到行首并执行以下命令:
3wyw^wPa
解释
- 将
3w
光标移至第三个单词 yw
在注册表中复制单词^w
转到第一个非空白字符,然后向前移动一个单词(您需要输入^
两次才能使其有效。P
在当前寄存器中光标之前粘贴单词a space
在最后一个单词后添加空格
然后输入q
停止录制宏。到达行首然后执行寄存器“a”中的宏@a
和/或@@
执行最后一个宏。
我确信有更优雅的方法来做到这一点,但这个方法效果很好。
答案2
尝试将 awk “作为外部命令”,如下所示:
:%!awk '{print $1,$NF,$2,$3,$NF}'
% ................... current file
! ................... filter
$NF ................. last field on awk