是否可以在VIM中重用ex命令的范围?
例如,我可以使用以下命令将当前文件中的第4行(第10行)写入(复制)到新文件:
:4,10w foo/bar.txt
Run Code Online (Sandbox Code Playgroud)
但我真正想做的是将线移到一个新文件.我可以这样做:
:4,10w foo/bar.txt
:4,10d
Run Code Online (Sandbox Code Playgroud)
但是两次输入4,10都有点烦人.
所以我有两个问题:
小智 5
我通常用猫来做这件事:
:4,10!cat > foo/bar.txt
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为你通过cat管道线并用结果输出替换它们,这没什么.当然,您可以通过>>而不是>追加到现有文件的末尾.
一般来说,我所做的就是从一个文件中删除行,切换到另一个文件,然后粘贴。
另外,我通常使用标记。我没有输入实际数字,而是点击mb以标记起始行,然后转到结束行并点击d'b以删除回到标记为 的行b。但是您可以使用mb来标记开始行,并me标记结束行,然后运行 ex 命令:
:'b,'e w somefile.txt<Enter>
Run Code Online (Sandbox Code Playgroud)
当然,您可以使用从a到 的任何字母z作为分数;我通常使用bande但你可以使用你喜欢的。
我将如何移动线条:
m'b
<navigate to end line>
d'b
:n somefile.txt<Enter>
p
Ctrl+^
Run Code Online (Sandbox Code Playgroud)
Ctrl+^ 从当前打开的文件切换到上一个打开的文件。(如果您愿意,您也可以只打开一个窗格并切换窗格。窗格在普通 vi 中不起作用,但在 vim 中起作用。)
以上假设您已设置该autowrite选项。使用 时autowrite,:n命令和 Ctrl+^ 都只是写入当前文件,然后切换文件,而不是抱怨文件已更改而没有保存。您也可以执行上述操作,并在使用 或 Ctrl+^ 之前显式写入文件:n。
顺便说一下,我经常使用 Ctrl+^,以至于我将其映射到K. 打字更容易,但我很久以前就养成了这个习惯,当时我有时不得不使用无法输入 Ctrl+^ 的哑终端。
顺便说一句,当您删除行时,它们会进入“未命名缓冲区”。在 vim 中,切换文件时会保留未命名的缓冲区。在原来的 vi 中,未命名的缓冲区被清除。所以上面的内容不适用于旧的 vi。您可以通过删除到命名缓冲区,然后从命名缓冲区粘贴来使其工作;适用于任何版本的 vi。
m'b
<navigate to end line>
"ad'b
:n somefile.txt<Enter>
"ap
Ctrl+^
Run Code Online (Sandbox Code Playgroud)
上面的内容删除到名为 的缓冲区中,然后从另一个文件中a粘贴。a这当然在 vim 中有效;只是你不需要它。