為什麼 vim 在 insert 模式下粘貼大量文本時會崩潰?
vim 在 insert 模式下粘貼大量文本,比如十萬個字元,編輯器會出現異常情況,粘貼不會結束,一直在滾動。經查,原來這是 vim 的老問題了,請問大牛,這是為什麼?有什麼解決辦法?
在某些情況下,vim並不能識別你的粘貼行為,無法自動切換到粘貼模式,導致粘貼卡死。例如windows系統下的系統粘貼,例如linux下對於沒有編譯X支持的vim都會導致圖形系統的粘貼無法正常識別。
使用vim內置的p命令永遠可以正常粘貼。
對於不能識別的情況,建議粘貼大段文本時先手動設置為粘貼模式然後再粘貼。
:set paste然後粘貼然後:set nopaste
恢復正常模式。當然直接使用p去粘貼系統剪貼板也是可以的,但那個命令有些人可能記不住。當你使用 Ctrl_v 的時候,Vim無法識別你是自己輸入還是粘貼, 當未 『set paste『 的時候,vim誤以為你是自行輸入這麼多字元,自然會非常卡, 特別是當有些插件還監控文本變化的時候。 建議使用一下配置:
nnoremap &
vnoremap &
" 或者
nnoremap &
vnoremap &
原因是 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 |