我从网页中复制了一部分 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?
,如果您想走这条路,请提前检查)。