有人告诉我以前如何做到这一点,但我无法弄清楚它现在是什么。
我知道:set paste
,但这不是问题。
答案 0 :(得分:50)
答案 1 :(得分:15)
这是缓冲区清除磁盘问题。 Vim试图保证您的工作安全,并且不会假设您每秒可以键入数千个字符。请阅读:help swap-file
以获取有关缓冲的一些详细信息。您的问题的解决方案是:
使用以下命令关闭vim的交换文件:
vim -n <your file>
或在粘贴前的vim内:
:set noswapfile
有关详细信息,请参阅:help swapfile
。
另一种选择是简单地使用:set swapsync=
关闭交换文件的磁盘同步,但是此选项需要更多按键才能撤消,而且我懒惰。 :)
关闭交换对于正常操作来说并不安全!粘贴后,立即使用:set swapfile
或:set swapsync=fsync
恢复正常行为(尽管从技术上讲,正常行为可能是同步而不是 fsync ,如果你想要这条路线,请事先与:set swapsync?
核实。)
答案 2 :(得分:5)
根据我的经验:set syntax=off
在粘贴之前有所帮助,请参阅https://askubuntu.com/a/223061/240577我看到'缓慢'行为/使用osx,ubuntu,redhat和windows时vim / gvim / mvim的高CPU使用率内容块和语法高亮显示已启用。
答案 3 :(得分:0)
对于某些文件类型,:set syntax=off
没什么区别,因为减速是由foldexpr
引起的。设置为空的foldexpr
可以使粘贴速度更快。
手动执行是愚蠢的(而且很慢!)。幸运的是,vim在许多终端中都支持bracketed paste并自动启用paste
,因此可以挂接到其中并暂时禁用foldexpr
:
function! s:paste_toggled(new, old) abort
if a:new && !a:old
let b:saved_foldexpr = &foldexpr
let &l:foldexpr = ''
elseif !a:new && a:old && exists('b:saved_foldexpr')
let &l:foldexpr = b:saved_foldexpr
unlet b:saved_foldexpr
endif
endfunc
augroup FastPaste
autocmd OptionSet paste call s:paste_toggled(v:option_new, v:option_old)
augroup END