在 Vim 中開啟 smartindent 或 autoindent 時,貼上程式碼常會導致縮排混亂、重複縮排。本文介紹最簡單的解決方案:使用 paste 模式。
複製一段 C 代碼到剪貼簿,在 Vim 中進入插入模式後貼上(Ctrl+Shift+V 或中鍵貼上),結果每行縮排疊加,代碼結構全亂。
:set paste
此時狀態列會顯示 -- INSERT (paste) --,表示自動縮排已暫時關閉。
進入插入模式(i、a、o 等),貼上內容,縮排將保持原樣。
:set nopaste
狀態列回到 -- INSERT --,自動縮排恢復生效。
在 ~/.vimrc 加入:
" F2 切換 paste 模式
set pastetoggle=<F2>
之後按 F2 即可快速切換,無需輸入指令。
"+p 直接從系統剪貼板貼上(需 Vim 支援 +clipboard):set noautoindent 貼上後 :set autoindent]p 自動調整縮排(適合已縮排良好的代碼):set paste 是最標準、最通用的解決方案,配合 pastetoggle 效率最高。建議養成「貼上前 F2,貼上後 F2」的習慣。