http://vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste
สลับการเยื้องอัตโนมัติสำหรับการวางรหัส
พื้นหลัง
หากคุณใช้คำสั่งเป็นกลุ่มเพื่อวางข้อความ ปัญหาเกิดขึ้นเมื่อวางจากแอปพลิเคชันอื่นและเฉพาะเมื่อคุณไม่ได้ใช้ Vim เวอร์ชัน GUI ในคอนโซลหรือเวอร์ชันเทอร์มินัลของ Vim ไม่มีโพรซีเดอร์มาตรฐานเพื่อวางข้อความจากแอ็พพลิเคชันอื่น แต่เทอร์มินัลอาจเลียนแบบการวางโดยการแทรกข้อความลงในบัฟเฟอร์ของคีย์บอร์ดดังนั้น Vim จึงคิดว่าข้อความนั้นถูกพิมพ์โดยผู้ใช้ หลังจากสิ้นสุดแต่ละบรรทัด Vim อาจเลื่อนเคอร์เซอร์เพื่อให้บรรทัดถัดไปเริ่มต้นด้วยการเยื้องเป็นบรรทัดสุดท้าย อย่างไรก็ตามนั่นจะเปลี่ยนการเยื้องในข้อความที่วางอยู่แล้ว
วางสลับ
ใส่สิ่งต่อไปนี้ใน vimrc ของคุณ (เปลี่ยนเป็นรหัสที่คุณต้องการ):
set pastetoggle=<F2>
วิธีวางจากแอปพลิเคชันอื่น:
- เริ่มโหมดแทรก
- กด F2 (สลับเป็นตัวเลือก 'วาง' บน)
- ใช้เทอร์มินัลของคุณเพื่อวางข้อความจากคลิปบอร์ด
- กด F2 (สลับเป็นปิดตัวเลือก 'วาง')
จากนั้นการเยื้องที่มีอยู่ของข้อความที่วางจะถูกเก็บไว้
คุณไม่จำเป็นต้องเริ่มโหมดแทรกก่อน แต่ถ้าคุณอยู่ในโหมดปกติและมีการแมปสำหรับ F2 การทำแผนที่นั้นจะใช้และฟังก์ชั่น 'Pastetoggle' จะไม่ทำงาน
บางคนชอบผลตอบรับทางสายตาที่แสดงในบรรทัดสถานะโดยทางเลือกต่อไปนี้สำหรับ vimrc ของคุณ:
nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode
บรรทัดแรกตั้งค่าการจับคู่เพื่อให้การกด F2 ในโหมดปกติจะกลับตัวเลือก 'วาง' และจะแสดงค่าของตัวเลือกนั้น บรรทัดที่สองอนุญาตให้คุณกด F2 เมื่ออยู่ในโหมดแทรกเพื่อสลับการเปิดและปิด 'วาง' บรรทัดที่สามเปิดใช้งานการแสดงว่า 'วาง' เปิดอยู่ในโหมดแทรกหรือไม่