最近几天,我经常需要将大段文本粘贴到 VIM 编辑器中,我注意到这个操作似乎是逐行执行的。也就是说,如果我在粘贴过程中按下 ESC 键或输入任何内容,粘贴就会立即中断。
我想知道是否有办法使粘贴变得“原子化”——确保一次性粘贴全部内容,而忽略任何中间的击键?
可在 Linux RHEL 和 macOS 中重现。
最近几天,我经常需要将大段文本粘贴到 VIM 编辑器中,我注意到这个操作似乎是逐行执行的。也就是说,如果我在粘贴过程中按下 ESC 键或输入任何内容,粘贴就会立即中断。
我想知道是否有办法使粘贴变得“原子化”——确保一次性粘贴全部内容,而忽略任何中间的击键?
可在 Linux RHEL 和 macOS 中重现。
只能使用 Vim 自身的“粘贴”命令。
"+
如果 Vim 支持操作系统剪贴板,则该寄存器对应操作系统剪贴板,这样"+p
可以自动粘贴其内容。如果您的 Vim 版本不是使用 X11 或 macOS 剪贴板构建的,
:r !some_command
请使用外部工具(例如 Linux 上的 xclip)读取剪贴板。基于终端的粘贴操作很难实现完全原子化——理论上可以,但怀疑需要修改代码。它是否可中断取决于你使用的终端仿真器;终端应用可能会强制你等到所有“粘贴”的文本都写入 tty,而不是中断粘贴,尽管 Vim 仍然会将其视为增量文本输入。
许多终端仿真器会通过将文本括在“粘贴括号”序列中来告知 Vim 文本是粘贴的,而不是手动输入的(以避免不必要的自动缩进等)。因此,您的终端必须支持粘贴不可中断;必须支持带括号的粘贴;并且 Vim 必须将括号序列之间的所有输入视为一个单元以便进行“撤消”。我不知道这些是否容易实现,而且无论如何,它仍然比 Vim 从 粘贴慢
"+
。