首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Vim 貼上代碼時關閉自動縮排 :set paste 完整指南

     編輯:關於C語言

問題場景

開啟 smartindent / autoindent 時,Vim 會在插入模式下根據語法自動縮排。但從外部複製代碼貼上 (如 Shift+Insert 或 Cmd+V) 時,Vim 會逐字元「輸入」並觸發自動縮排,導致原本正確的縮排錯亂、產生多餘空白行。

解決方案:paste 選項

[vim]
" 貼上前:開啟 paste 模式
:set paste

" 此時狀態列顯示 -- INSERT (paste) --
" 自動縮排、展開 tab 等干擾行為全部暫停

" 貼上完成後:關閉 paste 模式恢復正常
:set nopaste

" 狀態列恢復 -- INSERT --

進階技巧:快捷鍵切換

在 .vimrc 加入映射,按 F2 (或自訂鍵) 一鍵切換:

[vim]
set pastetoggle=
" 或手動映射
nnoremap  :set invpaste paste?

按 F2 開啟 → 貼上 → 按 F2 關閉,流程極順暢。

原理補充

  • set paste 實際上將 'textwidth', 'wrapmargin', 'autoindent', 'smartindent', 'cindent', 'indentexpr' 等選項暫存並停用,同時設定 'paste' 旗標讓部分外掛知曉。
  • 不影響 normal 模式下的 p/P 貼上 (那些不經插入模式),僅針對插入模式下的逐字元輸入流 (如終端模擬器貼上、中鍵貼上)。
  • 圖形介面 (GVim/MacVim) 通常能偵測剪貼簿貼上事件自動處理,但啟用 pastetoggle 仍是好習慣。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved