我从网页中复制了 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。