標籤:

為什麼 vim 在 insert 模式下粘貼大量文本時會崩潰?

vim 在 insert 模式下粘貼大量文本,比如十萬個字元,編輯器會出現異常情況,粘貼不會結束,一直在滾動。經查,原來這是 vim 的老問題了,請問大牛,這是為什麼?有什麼解決辦法?


在某些情況下,vim並不能識別你的粘貼行為,無法自動切換到粘貼模式,導致粘貼卡死。例如windows系統下的系統粘貼,例如linux下對於沒有編譯X支持的vim都會導致圖形系統的粘貼無法正常識別。

使用vim內置的p命令永遠可以正常粘貼。

對於不能識別的情況,建議粘貼大段文本時先手動設置為粘貼模式然後再粘貼。

:set paste

然後粘貼

然後

:set nopaste

恢復正常模式。

當然直接使用p去粘貼系統剪貼板也是可以的,但那個命令有些人可能記不住。


當你使用 Ctrl_v 的時候,Vim無法識別你是自己輸入還是粘貼, 當未 『set paste『 的時候,vim誤以為你是自行輸入這麼多字元,自然會非常卡, 特別是當有些插件還監控文本變化的時候。 建議使用一下配置:

nnoremap & "+p
vnoremap & "+y
" 或者
nnoremap &p "+p
vnoremap &y "+y


原因是 vim 錯把粘貼的文本識別為命令了,於是就兢兢業業地把你的十萬個字元「命令」順序執行了一遍 …… 不卡死可就怪了 (&>﹏&<)

該問題只會在終端環境下出現,估計多數 vim 用戶都掉進這坑裡過。解決方法也有:粘貼前先 `:set paste!` 進入粘貼模式,粘完後再 `:set paste!` 切回來。

或者使用 GUI 版的 vim ,或者換用 neovim。

剛才順手在自個電腦上試了一下,發現 vim 8 上已經不存在這問題了,毋需任何設置。

所以有空還是把手裡 vim 升級一下吧。

# End


terminal把你對copy操作轉換為了一組鍵盤輸入,扔進vim裡面,然後vim在每個鍵盤輸入的時候都會進行一系列非常慢的操作(比如自動補全,比如基於語法的摺疊,比如indent)。

你需要做的,set paste。。。正如其他答主所說的那樣


用p鍵粘貼,如果在系統剪貼板用 `"+p`


:set paste


:set paste試試


請用p鍵好吧


推薦閱讀:

你對 Neovim 怎麼看?
如何用 vim 的插件開發?有什麼實際中的技巧?
如何使用 Vim ?
如何在 Windows 下使用 Vim 的 YouCompleteMe 插件?
如何將 Vim 剪貼板裡面的東西粘貼到 Vim 之外的地方?

TAG:Vim |