我在同一个 vim 会话中有两个文件,比如说a.txt
和,我将屏幕分割,这样我就在上面窗口和下面窗口中分别有一个文件。b.txt
a.txt
b.txt
我想将行从 移动到a.txt
:我用+b.txt
选择一行,然后我用+移动到下方窗口,用 粘贴,用+返回,当我到达想要移动的另一行时,我可以重复该操作。Shiftvb.txt
Ctrlw ↓pa.txt
Ctrlw ↑
我的问题:有没有更快的方式来表达 vim“将我所在的线路(或我选择的测试)发送到另一个窗口”?
答案1
这听起来像是宏的一个很好的用例。宏是可以记录并存储在 Vim 寄存器中的命令。每个寄存器都由从 a 到 z 的字母标识。
记录
要开始录制,请q在普通模式下按下,然后按字母(a 到 z)。这将开始将击键记录到指定的寄存器中。Vim 将显示“记录”在状态行中。输入任何普通模式命令,或进入插入模式并输入文本。要停止录制,请q在普通模式下再次按下。
对于这个特定的宏,我选择m
(用于移动)寄存器来存储它。
我按下了qm记录以下命令:
- dd删除当前行(并保存到默认寄存器)
- CtrlWj移至下面的窗口
- p粘贴默认寄存器的内容
- 并CtrlWk返回上面的窗口。
当我输入q完成录制宏时,寄存器的内容m
是:
dd^Wjp^Wk
用法
- 要移动当前行,只需@m在普通模式下输入。
- 要在不同的行上重复宏,@@可用于执行最近使用的宏。
- 要执行宏 5 次(即将当前行及其下方的以下四行移动),请使用5@m或5@@。
答案2
您可以直接:set clipboard+=unnamed
使用系统剪贴板,它涵盖所有 vim 分割。
我在这个问题上发现了这一点 共享 Vim Yank 注册