以前有人向我展示了如何做到这一点,但我不知道现在是什么。
我知道,:set paste
但这不是问题。
这是缓冲区刷新到磁盘的问题。Vim 试图保证您的工作安全,并且不会假设您每秒可以输入数千个字符。阅读:help swap-file
有关缓冲的一些详细信息。您的问题的解决方案是这样的:
使用以下命令关闭 vim 的交换文件:
vim -n <your file>
或者在粘贴之前从 vim 内部:
:set noswapfile
有关:help swapfile
更多详细信息,请参阅。
另一种选择是简单地关闭交换文件与磁盘的同步,:set swapsync=
但是这个选项需要更多的击键才能撤消,我很懒。:)
关闭交换对于正常操作是不安全的!粘贴后立即使用:set swapfile
或:set swapsync=fsync
恢复正常行为(尽管从技术上讲,正常行为可能是sync而不是fsync:set swapsync?
,如果你想走这条路,请事先检查)。
根据我:set syntax=off
在粘贴前的经验,请参阅https://askubuntu.com/a/223061/240577在粘贴大文件时,我在 osx、ubuntu、redhat 和 windows 上看到 vim/gvim/mvim 的“慢”行为/高 CPU 使用率内容块和语法突出显示已打开。
:read !xclip -o
在我定位光标粘贴复制的文本后,我在我的 vim 文档中使用。
也可以是:
:read !xsel -b # X11
:read !pbpaste # On macos
:r !@xclip -o # :r as :read alias
对于某些文件类型:set syntax=off
没有区别,因为减速是由foldexpr
. 设置为空foldexpr
可以再次快速粘贴。
手动操作是愚蠢的(而且很慢!)。幸运的是,vim在许多终端中支持括号粘贴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 )