将同一行上的文件名复制到行尾

将同一行上的文件名复制到行尾

我在 VIM 中有以下几行:

<img src="file01.jpg" / >
<img src="file02.jpg" / >
<img src="file03.jpg" / >

我想将每个 jpg 的文件名添加到每行的末尾,如下所示:

<img src="file01.jpg" / > file01.jpg
<img src="file02.jpg" / > file02.jpg
<img src="file03.jpg" / > file03.jpg

实现这一目标的最佳方法是什么?

答案1

不存在单一的最佳方法。

一种方法是:

:1,$s/\(file.*jpg\)\(.*\)/\1\2 \1

另一种方法是

:map q 0t"  yt"A ^[pj

并按q3 次(注意:^[以 control-V escape 形式输入)

您还可以file01.jpg在每一行添加(A file01.jpg转义j . j .)并将 替换0102等(:0输入/01输入c2 02转义n等)

我相信还有很多其他方法。

答案2

这是一个相当优雅的方法:

f"yi"A <C-r>"

在哪里…

  • f"将光标移动到"行首,
  • yi"将当前双引号之间的内容复制到未命名的寄存器中,
  • A在行末进入插入模式,
  • 插入空格,
  • <C-r>"插入未命名寄存器的内容。

你可以通过这种方式来记录:

qq
f"yi"A <C-r>"
q

剩下的就是:

<img src="file01.jpg" / > file01.jpg
<img src="file02.jpg" / >
<img src="file03.jpg" / >

并在其余行上按如下方式播放:

:+,$norm @q

现在,录制宏非常强大且有用,但我认为它需要太多的规划。多年来,我几乎完全转向直接编写和执行宏:

:%norm f"yi"A ^R"

我发现这更容易在现场即兴发挥。^R是通过按 获得的<C-v><C-r>

相关内容