我可以加快粘贴到 vim 吗?

Ant*_*hon 17 vim clipboard

我从网页中复制了一部分 HTML 并希望将其保存在一个文件中。为此,我vim 在终端窗口中启动了一个新会话,在命令行上指定了一个(新)文件名,点击i进入插入模式,然后CtrlShift+V并等待,同时[-- INSERT --]显示在底部并等待...

由于vim几秒钟后没有响应,我从“应用程序”→“附件”菜单中打开“文本编辑器”粘贴文本(在几分之一秒内出现,以新名称保存,关闭并终止了 Vim 会话) 1.5分钟后还是没写完,3200行186K的文字量,不算多,也不算过长。

有没有办法加快此类插入vim和/或有没有解释为什么与使用文本编辑器相比,速度如此之慢,否则会很糟糕?

(根据 %CPUtop不超过 5%,虽然我在系统中有一些空闲的处理器,所以它可能是一些 I/O 绑定问题,从文件中读取相同的文本时不存在)

版本信息:
Ubuntu 12.04
Vim:7.3,带有由 Ubuntu 12.04 提供的补丁
bash:4.2.25
gnome-terminal:3.4.1.1

l0b*_*0b0 19

要将大量剪贴板文本快速保存到文件中,您可以运行cat > file.txt,粘贴内容,然后按Ctrl- d

如果您安装了xsel,您可以:r !xsel在 Vim 中插入“主要”(又名“鼠标”)选择,或:r !xsel -b插入“剪贴板”(Ctrl- c)缓冲区。您还可以使用xsel >file.txt或将选择直接保存到文件中xsel -b >file.txt。这消除了单独粘贴 + EOF 操作的需要,并避免在终端中打印整个复制缓冲区。

如果没有 xsel 而是 xclip,则对应的命令是xclip -out用于主选择的,或者xclip -out -selection clipboard用于剪贴板缓冲区的。


小智 6

这是缓冲区刷新到磁盘的问题。Vim 试图保证您的工作安全,并且不假设您每秒可以输入数千个字符。请阅读:help swap-file有关缓冲的一些详细信息。您的问题的解决方案是这样的:

关闭 vim 的交换文件:

vim -n <your file>
Run Code Online (Sandbox Code Playgroud)

或者在粘贴之前从 vim 中:

:set noswapfile
Run Code Online (Sandbox Code Playgroud)

请参阅:help swapfile了解更多详情。

另一种选择是简单地关闭交换文件与磁盘的同步,:set swapsync=但此选项需要更多的击键才能撤消,而且我很懒。:)

关闭交换对于正常操作来说并不安全!粘贴后,立即使用:set swapfile:set swapsync=fsync恢复到正常行为(尽管从技术上讲,正常行为可能是sync而不是fsync:set swapsync? ,如果您想走这条路,请提前检查)。

  • 这对我来说并没有加快速度...... (5认同)