Fix Copy Paste in Nvim
วิธี Copy-Paste ใน Nvim (แก้ปัญหาที่ค้างมานาน)
ทำไมเรื่องนี้ถึงงง
Nvim มีระบบ “clipboard” 2 ระบบแยกกัน คนละเรื่องกัน:
- Register ภายใน Nvim เอง — คัดลอก/วางแค่ในโปรแกรม nvim ไม่ออกไปไหน
- System Clipboard — clipboard ของทั้งเครื่อง (อันเดียวกับที่ Ctrl+C/Ctrl+V ใช้ในโปรแกรมทั่วไป)
ปัญหาที่คนงงบ่อยที่สุด: Nvim ไม่ได้เชื่อม 2 ระบบนี้เข้าด้วยกันอัตโนมัติ ต้องสั่งเฉพาะเจาะจงว่าจะใช้ระบบไหน
Setup ที่ต้องมีก่อน (เช็คครั้งเดียว)
เช็คว่า nvim รองรับ clipboard ไหม
เปิด nvim แล้วพิมพ์ (กด : ก่อน):
:echo has('clipboard')ต้องได้ 1 (ถ้าได้ 0 แปลว่า nvim build ที่ใช้ไม่รองรับ ต้องเปลี่ยนวิธีติดตั้ง)
เช็คว่ามีโปรแกรมเชื่อม clipboard ของระบบไหม (Linux + X11)
:echo executable('xclip')ต้องได้ 1 ถ้าได้ 0 ต้องติดตั้ง:
sudo pacman -S xclip # Archหมายเหตุ: :checkhealth clipboard หรือ :checkhealth vim.clipboard อาจขึ้น error “No healthcheck found” ในบาง Neovim เวอร์ชัน — ไม่ต้องสนใจ ใช้วิธี :echo has('clipboard') แทนซึ่งแม่นกว่า
ตารางสรุป — ใช้ปุ่มไหนตอนไหน
| สถานการณ์ | ทำยังไง |
|---|---|
| คัดลอกจากข้างนอก (browser, chat) → วางเข้า nvim | i (เข้า insert mode ก่อน) → Ctrl+Shift+V |
| คัดลอกจาก nvim → วางไปข้างนอก | Esc → v เลือกข้อความ → "+y |
| คัดลอกภายใน nvim เอง (ไม่ออกนอกโปรแกรม) | v เลือกข้อความ → y (วางด้วย p) |
| คัดลอกทั้งบรรทัด ภายใน nvim เอง | yy (วางด้วย p) |
| คัดลอกทั้งไฟล์ → ออกไปข้างนอก | :%y+ |
อธิบายละเอียดทีละสถานการณ์
1. คัดลอกจากข้างนอก (เช่น หน้าเว็บ, แชท) → วางเข้า nvim
ขั้นตอน:
1. ไปที่ browser/แหล่งอื่น เลือกข้อความ กด Ctrl+C ตามปกติ
2. กลับมาที่ nvim
3. กด i (เข้าโหมด insert — ห้ามลืมขั้นนี้ ไม่งั้นวางไม่ได้)
4. กด Ctrl+Shift+V (ปุ่มวางมาตรฐานของ Kitty terminal)จุดที่พลาดบ่อย: ลืมกด i ก่อน — ถ้ายังอยู่ใน normal mode (โหมดปกติที่เปิด nvim มา) การกด Ctrl+Shift+V จะไม่ทำงานหรือทำงานผิดแบบ
2. คัดลอกจาก nvim → วางไปข้างนอก (browser, terminal อื่น)
ขั้นตอน:
1. กด Esc (ออกจาก insert mode ให้แน่ใจว่าอยู่ normal mode)
2. กด v (เข้า visual mode เพื่อเริ่มเลือกข้อความ)
3. เลื่อน cursor ด้วยลูกศร (หรือ h j k l) เพื่อเลือกข้อความที่ต้องการ
4. กด "+y (พิมพ์ 3 ตัวติดกัน: เครื่องหมายคำพูด " ตามด้วย + ตามด้วย y)
5. ไปที่ browser/ที่อื่น กด Ctrl+V วางตามปกติทำไมต้องมี "+: เครื่องหมาย " บอกว่า “จะใช้ register ไหน” ตามด้วยชื่อ register + ซึ่งคือ system clipboard โดยเฉพาะ ถ้ากด y เฉยๆ (ไม่มี "+) จะเป็นการคัดลอกเข้า register ธรรมดาของ nvim เอง ซึ่งออกไปข้างนอกไม่ได้
3. คัดลอก-วาง ภายใน nvim เอง (ไม่ต้องออกนอกโปรแกรมเลย)
ใช้ตอนย้ายข้อความในไฟล์เดียวกัน หรือระหว่างหลายไฟล์ที่เปิดใน nvim พร้อมกัน:
คัดลอก:
- v แล้วเลือกข้อความ แล้ว y (คัดลอกส่วนที่เลือก)
- yy (คัดลอกทั้งบรรทัดที่ cursor อยู่)
- yyy หรือ 3yy (คัดลอก 3 บรรทัดจากตำแหน่ง cursor)
วาง:
- p (วางหลัง cursor/บรรทัดถัดไป)
- P (วางก่อน cursor/บรรทัดก่อนหน้า)4. คัดลอกทั้งไฟล์ทีเดียว → ออกไปข้างนอก
:%y+คำสั่งนี้แปลว่า “เลือกทั้งไฟล์ (%) แล้วคัดลอก (y) เข้า system clipboard (+)”
Cheat Sheet ย่อ (จำแค่นี้พอในชีวิตประจำวัน)
เข้า: จากข้างนอก → nvim = i → Ctrl+Shift+V
ออก: จาก nvim → ข้างนอก = Esc → v เลือก → "+y
ในตัว: ในไฟล์เดียวกัน = v เลือก → y → pปัญหาที่เจอตอนตั้งค่าจริง (เก็บไว้กันลืม)
ปัญหา: :checkhealth clipboard และ :checkhealth vim.clipboard ขึ้น error “No healthcheck found for plugin”
สาเหตุ: ชื่อ module เปลี่ยนไปใน Neovim บางเวอร์ชัน หรือไม่มี dedicated healthcheck สำหรับ clipboard แยกต่างหาก
วิธีแก้/ทางเลือก: ใช้ :echo has('clipboard') และ :echo executable('xclip') แทน ได้ผลลัพธ์แม่นกว่าและตรงประเด็นกว่า
เชื่อมกับ Obsidian workflow
ถ้าเขียนบทความใน second-brain vault (Obsidian) ผ่าน obsidian.nvim แล้วต้องการย้ายเนื้อหาไปไฟล์ blog:
1. เปิดไฟล์ต้นทางใน nvim (จาก vault)
2. Esc → v เลือกเนื้อหาที่ต้องการ → "+y
3. เปิดไฟล์ปลายทาง (content/หมวด/ไฟล์.md ของ Hugo)
4. i → Ctrl+Shift+Vไม่ต้องออกไปที่ browser หรือโปรแกรมอื่นเลย ทำได้ทั้งหมดภายใน nvim ระหว่างสองไฟล์