我可以加快粘贴到 vim 的速度吗?

我可以加快粘贴到 vim 的速度吗?

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

由于vim几秒钟后没有响应,我从“应用程序”→“附件”菜单中打开“文本编辑器”,粘贴文本(在不到一秒的时间内显示出来,将其保存在新名称下,关闭并终止了 Vim 会话) 1.5 分钟后仍然没有完成。文本量为 186K,3200 行,我想说,不算太多,也没有太长的行。

有没有一种方法可以加快此类插入的速度vim和/或是否有解释为什么与使用可怕的面向鼠标的文本编辑器相比,速度如此之慢?

(虽然我的系统中有一些空闲的处理器,但%CPU 没有top超过 5%,所以这可能是一些 I/O 限制问题,从文件读取相同文本时不存在)

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

答案1

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

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

如果您没有 xsel,但有 xclip,则相应的命令xclip -out用于主要选择,或xclip -out -selection clipboard用于剪贴板缓冲区。

答案2

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

关闭 vim 的交换文件:

vim -n <your file>

或者在粘贴之前从 vim 中:

:set noswapfile

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

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

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

答案3

如果你有xterm_clipboard功能,你可以使用*+寄存器。这些寄存器分别与 X11 主选择缓冲区和剪贴板连接。

CTRL因此,如果您通过+复制了某些内容c,则可以使用 将其粘贴到 vim 中"+p

如果您只是突出显示它而不进行复制,则可以使用 粘贴它"*p
您还可以*通过执行以下操作使缓冲区成为默认缓冲区:set clipboard=unnamed。然后,任何未指定寄存器的复制 ( y)、粘贴 ( ) 等操作都将使用该寄存器。 Vim 7.3.74 还添加了,默认使用寄存器。p*clipboard=unnamedplus+

您还可以通过拉动将内容复制到主选择和剪贴板缓冲区中,例如:"+yy

 

请注意,如上所述,这些功能都需要该xterm_clipboard功能。您可以通过:version在 vim 内部或从 shell执行操作来查看是否具有此功能vim --version,然后查找+xterm_clipboard.如果它显示-xterm_clipboard,则说明您没有它,并且必须重新编译 vim。

相关内容