将大量文本粘贴到vim中的速度很慢?

时间:2013-08-15 17:47:27

标签: vim

有人告诉我以前如何做到这一点,但我无法弄清楚它现在是什么。

我知道:set paste,但这不是问题。

4 个答案:

答案 0 :(得分:50)

立即使用"*p"*P从系统剪贴板粘贴。

Vim必须使用+clipboard进行编译才能生效。

有关详细信息,请参阅:help clipboard

答案 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

(来源:https://github.com/liskin/dotfiles/blob/69ab04e64e001da90232eaf2c5856337d58c785f/.vim/plugin/fastpaste.vim