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


12

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

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

有没有一种方法可以加快此类插入的速度,vim和/或有没有解释为什么与使用文本编辑器相比,这种方法这么慢?

top虽然我在系统中有一些空闲的处理器,但根据的%CPU 不会超过5%,因此这可能是一些I / O绑定问题,当从文件中读取相同文本时不存在此问题)

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


1
我认为这很慢,因为它必须解析输入并尝试对其进行格式化等。我不确定执行此操作的选项,但会假设您可以暂时禁用该功能vim,进行粘贴,然后重新启用它。另外,请尝试使用该:set paste功能以查看它是否有所改善。看到:help paste它描述了如何vim区分黑白打字和粘贴。
slm

我也希望vi在读入时尝试解析该文件(保存建议的方式@ l0b0之后)。但这很快。
Anthon 2014年

没错,但是我在想它必须重新解析已经解析的所有内容以及粘贴新字符时的情况。这似乎也是您在一定程度上编辑文件时发生的情况。
slm

:set paste似乎并没有真正发挥作用(我不使用秒表,只是挂钟)。
Anthon 2014年

好吧,只是个想法……
slm

Answers:


14

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

如果安装了xsel,则可以:r !xsel在Vim中插入“ primary”(又名“ mouse”)选项,或:r !xsel -b插入“ clipboard”(Ctrl- c)缓冲区。您也可以使用xsel >file.txt或将选择内容直接保存到文件中xsel -b >file.txt。这样就不需要单独的粘贴+ EOF操作,并且避免在终端中打印整个副本缓冲区。

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


1
谢谢,至少在不必恢复鼠标的情况下就可以了,并且将文件插入到vim中(例如,当我不以空文件开头时)足够快。
Anthon 2014年

我不明白为什么不能将其绑定到ctrl + shift + v,这完全没有意义。
mchid '16

2

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

通过以下方式关闭vim的swapfile:

vim -n <your file>

或从vim内部粘贴之前:

:set noswapfile

请参阅:help swapfile以获取更多详细信息。

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

关闭交换对正常操作而言并不安全!粘贴之后,立即使用:set swapfile:set swapsync=fsync恢复为正常行为(尽管从技术上讲,正常行为可能已经同步,而不是fsync:set swapsync?如果要使用此方法,请事先检查)。


1
这并没有加快我的速度...
elig

1

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

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

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

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

 

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


我没有那个功能。即使vim不在xterm下运行,重新编译也会有所帮助吗?(我正在使用gnome-terminal)。
Anthon 2014年

@Anthon如果您使用的是GUI VIM,那么我相信寄存器也会启用。xterm_clipboard仅当从终端运行vim时。
帕特里克

这仅是文本,没有GUI VIM,但不能从运行xterm
Anthon 2014年

哦,对不起,我读错了。是xterm_clipboard适用于任何终端仿真器,而不仅限于xterm。我自己使用urxvt。
帕特里克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.