Skip to content
Fix Copy Paste in Nvim

Fix Copy Paste in Nvim

วิธี Copy-Paste ใน Nvim (แก้ปัญหาที่ค้างมานาน)

ทำไมเรื่องนี้ถึงงง

Nvim มีระบบ “clipboard” 2 ระบบแยกกัน คนละเรื่องกัน:

  1. Register ภายใน Nvim เอง — คัดลอก/วางแค่ในโปรแกรม nvim ไม่ออกไปไหน
  2. 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) → วางเข้า nvimi (เข้า insert mode ก่อน) → Ctrl+Shift+V
คัดลอกจาก nvim → วางไปข้างนอกEscv เลือกข้อความ → "+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 ระหว่างสองไฟล์