Sitemap
Sitdh[ibong]

Software Development and Software Engineering

Vim: Multi-Buffers

Working with Multi-Buffers

2 min readMay 14, 2018

--

NVIM v0.2.2

Get Sitdhibong’s stories in your inbox

Join Medium for free to get updates from this writer.

การทำงานโดยต้องเปิดหลายๆ ไฟล์เพื่อทำงานควบคู่กันไปนั้นไม่ใช่เรื่องแปลกอะไร editor หลายโปรแกรมต่างก็มีวิธีการช่วยให้โปรแกรมเมอร์เข้าถึงไฟล์ที่เปิดไว้เหล่านั้น ใน Vim เองก็มีเหมือนกัน

เปิดไฟล์พร้อมกันหลายแท็บ

Press enter or click to view image in full size
Project files

จากโฟลเดอร์ด้านบนมี 3 ไฟล์ คือ index.html, style.css และ script.js ถ้าลองเปิดไฟล์ index.html ก่อนด้วยการพิมพ์ $ vi index.html ก่อน จากนั้นค่อยพิพม์ :tabe script.js เพื่อเปิดไฟล์ script.js ในแท็บใหม่

Press enter or click to view image in full size

รวมคำสั่งสำหรับแท็บที่ใช้บ่อยๆ คือ

  • :tabnew เปิดแท็บใหม่
  • :tabs แสดงรายการ แท็บที่เปิดอยู่ทั้งหมด
  • :tabm 0 ย้ายแท็บที่ทำงานอยู่ตอนนี้ไปอยู่ที่แท็บแรกสุด
  • :tabm ย้ายแท็บที่ทำงานอยู่ตอนนี้ไปแท็บสุดท้าย
  • gt เปลี่ยนไปทำงานที่แท็บถัดไป (ทางด้านซ้าย)
  • gT เปลี่ยนไปทำงานที่แท็บก่อนหน้า (ทางด้านซ้าย)
  • {i}gt เปลี่ยนแท็บไปทางด้านซ้ายตามจำนวน i ที่ต้องการ

เปิดไฟล์พร้อมกันด้วยการแบ่งหน้าจอ

ซึ่งแต่นอนว่าเราแบ่งได้ 2 แบบ คือ แนวตั้งและแนวนอน โดยใช้ :vsp และ :sp ตามลำดับ

Press enter or click to view image in full size
Horizontal split

ซึ่งการแบ่งนั้นจะนับจาก buffer ปัจจุบันที่กำลังทำงานอยู่ หากแบ่งตามแนวนอน ไฟล์ใหม่จะถูกเปิดขึ้นทางด้านบน ส่วนถ้าเป็นการแบ่งตามแนวตั้งไฟล์ ไฟล์ใหม่จะเปิดขึ้นมาทางด้านซ้ายมือ

Press enter or click to view image in full size
Splited panel

เมื่ออยากจะสลับไฟล์ที่ทำงานให้กด Ctrl-w w (w 2 ตัว) กดแล้ว Cursor จะสลับ panel ทวนเข็มนาฬิกาไปเรื่อยๆ แต่ถ้าอยากระบุทิศทางให้กด h, j, k, หรือ l หลังจากกด Ctrl-w ไปแล้ว แต่ถ้าหากกด Ctrl-w T จะเปลี่ยนจากการแบ่งไฟล์แบบ Panel นี้เป็นแท็บ แต่การเปิดไฟล์แบบแบ่งหน้าจอนี้จะมีข้อเสียคือ ถ้าเกิดการเปลี่ยนขนาดของหน้าจอ (ผมใช้ iTerm) บาง panel จะมีขนาดต่างออกไป เล็กเกินไปบ้าง ไม่ก็ใหญ่เกินไปบ้าง ตามภาพด้านล่าง

Press enter or click to view image in full size
Wrong size

ซึ่ง Panel ที่ขนาดเปลี่ยนไปนี้ก็ปรับได้ด้วย :resize {+/-}[number|percentage] ที่เป็นการปรับขนาดหน้าจอตามแนวตั้ง (ตามแกน Y) และ :vertical resize {+/-}[number|percentage] จะเป็นการปรับขนาดตามแนวนอน (ตามแกน X)

รวมคำสั่ง

  • :resize -10 ปรับขนาด Panel ตามแกน Y โดยลดขนาดลงมา 10 หน่วย
  • :vertical resize +10% ปรับขนาดตามแกน X โดยเพิ่มขนาดเข้าไป 10%
  • Ctrl-w = กระจายขนาดของทุก Panel ให้เท่ากัน
  • Ctrl-w < ลดขนาดตามแนวแกน X เข้ามา 1 หน่วย
  • Ctrl-w > เพิ่มขนาดตามแนวแกน X ออกไป 1 หน่วย
  • Ctrl-w +ลดขนาดตามแนวแกน Y ออกไป 1 หน่วย
  • Ctrl-w - เพิ่มขนาดตามแนวแกน Y เข้ามา 1 หน่วย
  • Ctrl-w _ ปัดให้ Panel อื่นๆ ลดขนาดจนชิดขอบด้านล่างหรือด้านบน
  • Ctrl-w | ปัดให้ Panel อื่นๆ ลดขนาดจนชิดขอบด้านซ้ายหรือด้านขวา

และสุดท้าย ถ้ามีการแก้ไขไฟล์อยู่พร้อมกันหลายไฟล์ (สังเกตเครื่องหมาย [+] ด้านหลังชื่อไฟล์) ไม่จำเป็นต้องไล่บันทึกทีละ Panel ให้กดที่ :wa ที่ Panel ไหนก็ได้ จะสั่งให้ Vim บันทึกทุกๆ ไฟล์ที่มีการแก้ไขอยู่ใน Buffer ทั้งหมด

--

--

Sitdhibong
Sitdhibong
Sitdh[ibong]
Sitdh[ibong]