我在 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
并按q
3 次(注意:^[
以 control-V escape 形式输入)
您还可以file01.jpg
在每一行添加(A
file01.jpg
转义j
.
j
.
)并将 替换01
为02
等(: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>
。