← สารบัญบทเรียน M3 · vi / vim ให้รอด
M3 · ปูพื้น

vi / vim ให้รอด

โปรแกรมแก้ไฟล์ที่หน้าตาน่ากลัวที่สุดในโลก Linux — แต่พอเข้าใจ “โหมด” ของมันแล้ว คุณจะแก้ไฟล์ตั้งค่าได้ทุกเครื่องโดยไม่ต้องพึ่ง Notepad อีกเลย

🌱 บทนี้เขียนเพื่อคนที่ไม่เคยแตะ Linux มาก่อนเลย

1ทำไมต้องเรียน vi/vim ในเมื่อมันยากจัง?

คำถามนี้ดีมาก และคำตอบสั้นๆ คือ — เพราะคุณไม่มีทางเลือกอื่น เวลาทำงานจริงบนเซิร์ฟเวอร์

บนเครื่อง Windows คุณมี Notepad บนมือถือมี Notes แต่บนเซิร์ฟเวอร์ Linux ส่วนใหญ่ ไม่มีหน้าจอสวยๆ ไม่มีโปรแกรมแก้ข้อความแบบคลิกได้ สิ่งที่ ติดมากับทุกเครื่องเสมอ มีตัวเดียวคือ vi (และรุ่นใหม่กว่าชื่อ vim)

💡 เปรียบเทียบให้เห็นภาพ

vi เหมือน ยางอะไหล่ในรถ — มันอาจจะไม่สวย ไม่นุ่มเท่าล้อจริง แต่มันมีติดรถทุกคันเสมอ และเมื่อยางแตกกลางทาง มันคือตัวเดียวที่พาคุณกลับบ้านได้

วันที่เซิร์ฟเวอร์มีปัญหาตอนตี 3 ไม่มีใครมาลงโปรแกรมสวยๆ ให้คุณ — มีแต่ vi ที่รออยู่

🎯 ในข้อสอบ RHCSA ก็มีแต่ vi/vim เช่นกัน

ข้อสอบหลายข้อต้องแก้ไฟล์ตั้งค่า เช่น แก้ค่าใน /etc/... หรือสร้างไฟล์ใหม่แล้วใส่ข้อความตามโจทย์ ทั้งหมดต้องทำผ่าน vi/vim ถ้าใช้ไม่เป็น คุณจะแก้ไฟล์ไม่ได้เลย และเสียคะแนนข้อนั้นไปเต็มๆ

📌 vi กับ vim ต่างกันไหม

ต่างกันนิดเดียว — vim ย่อมาจาก “Vi IMproved” คือ vi รุ่นอัปเกรด (มีสี มีฟีเจอร์เยอะกว่า) บน RHEL พิมพ์ vi ส่วนใหญ่ก็จะเปิด vim ให้อยู่ดี คำสั่งพื้นฐานที่เรียนในบทนี้ ใช้ได้เหมือนกันทั้งคู่ ไม่ต้องกังวล

2หัวใจของ vim: เรื่อง “โหมด”

นี่คือสิ่งที่ทำให้มือใหม่ทุกคน งงและหงุดหงิด กับ vim ในนาทีแรก ถ้าเข้าใจเรื่องนี้ได้ ที่เหลือจะง่ายขึ้นทันที

โปรแกรมแก้ข้อความที่คุณคุ้น (Notepad, Word) มัน มีโหมดเดียว — เปิดมาก็พิมพ์ได้เลย กดตัวอักษร A ก็ขึ้น A แต่ vim ไม่ใช่แบบนั้น มันมีหลาย “โหมด” และในแต่ละโหมด ปุ่มเดียวกันทำงานคนละอย่าง

💡 เปรียบเทียบให้เห็นภาพ

นึกถึง ปากกาวิเศษด้ามหนึ่งที่สลับได้ 2 โหมด:

โหมดเขียน — แตะกระดาษแล้วเขียนตัวอักษรได้ตามปกติ
โหมดสั่งงาน — แตะกระดาษแล้วไม่เขียน แต่ปากกาจะ “ทำตามคำสั่ง” แทน เช่น แตะที่บรรทัดแล้วบรรทัดนั้นหายไป (ลบ) หรือกระโดดไปหน้าสุดท้าย

ปัญหาของมือใหม่คือ เปิด vim ขึ้นมาแล้ว มันอยู่ใน “โหมดสั่งงาน” พอพยายามพิมพ์ข้อความ ตัวอักษรเลยไม่ขึ้น หรือขึ้นมั่วๆ เพราะปุ่มที่กดถูกตีความเป็น “คำสั่ง” ไม่ใช่ “ตัวอักษร”

😅 อาการคลาสสิกของมือใหม่

“เปิด vim มาแล้วพิมพ์ hello ทำไมตัวอักษรหายไปบ้าง เคอร์เซอร์กระโดดไปมา หน้าจอเละหมด!” — นั่นแหละ คุณกำลังอยู่ผิดโหมด คุณยังไม่ได้สั่งให้มันเข้า “โหมดพิมพ์” ก่อน แล้วทุกตัวที่กดเลยกลายเป็นคำสั่ง

ดังนั้นกฎข้อแรกของ vim คือ: ก่อนจะพิมพ์ข้อความ ต้องสั่งเข้า “โหมดพิมพ์” ก่อนเสมอ ส่วนวิธีทำ เดี๋ยวเราจะค่อยๆ ดูในข้อถัดไป

33 โหมดหลักที่ต้องรู้จัก

vim มีหลายโหมด แต่มือใหม่จำแค่ 3 อันนี้พอ — ครบทุกอย่างที่ต้องใช้แล้ว

Normal mode
โหมดสั่งงาน — เปิด vim ขึ้นมาจะเจออันนี้ก่อนเสมอ ใช้เลื่อนเคอร์เซอร์ ลบ คัดลอก ค้นหา พิมพ์ข้อความไม่ได้ เป็นโหมด “ตั้งต้น” ที่เราจะกลับมาบ่อยที่สุด
Insert mode
โหมดพิมพ์ข้อความจริง — โหมดนี้แหละที่กดตัวอักษรแล้วขึ้นตามปกติเหมือน Notepad ต้องสั่งเข้าเองด้วยปุ่ม i / a / o
Command-line mode
โหมดสั่งบันทึก/ออก — เริ่มด้วยการพิมพ์ : (โคลอน) แล้วพิมพ์คำสั่ง เช่น :wq เพื่อบันทึกและออก คำสั่งจะไปโผล่ที่มุมล่างซ้ายของจอ
💡 เปรียบเทียบให้เห็นภาพ

นึกภาพการ เขียนรายงานบนกระดาษ:

Normal = ถือปากกาไว้เฉยๆ มองดูกระดาษ คิดว่าจะแก้ตรงไหน (ยังไม่ได้เขียน)
Insert = วางปากกาลงกระดาษแล้วเขียนข้อความจริง
Command-line = เดินไปบอกเลขาว่า “ช่วยถ่ายเอกสารแล้วเก็บเข้าแฟ้ม” (สั่งบันทึก/จัดการไฟล์)

💡 วงจรที่ใช้จริงทุกครั้ง

เปิดไฟล์ (อยู่ Normal) → กด i เข้า Insert → พิมพ์ข้อความ → กด Esc กลับ Normal → พิมพ์ :wq บันทึก+ออก จำวงจรนี้ไว้ แล้วคุณจะรอดทุกสถานการณ์

4เปิดไฟล์ด้วย vim

การเปิดไฟล์ง่ายมาก — พิมพ์ vim ตามด้วยชื่อไฟล์ ถ้าไฟล์ยังไม่มี vim จะสร้างให้ใหม่ตอนที่คุณบันทึก

⌨️ ลองดู
[student@server1 ~]$ vim notes.txt

พอกด Enter หน้าจอจะเปลี่ยนเป็นพื้นที่แก้ไฟล์เต็มจอ ตอนนี้คุณอยู่ใน Normal mode (โหมดสั่งงาน) ยัง พิมพ์ข้อความไม่ได้ นะ — ต้องสั่งเข้า Insert mode ก่อน (ข้อถัดไป)

หน้าจอที่เห็นจะหน้าตาประมาณนี้ บรรทัดที่ขึ้นต้นด้วย ~ หมายถึง “บรรทัดว่าง” (ยังไม่มีเนื้อหา) และมุมล่างจะบอกชื่อไฟล์:

🖥️ หน้าจอ vim ตอนเปิดไฟล์ใหม่
_
~
~
~
~
"notes.txt" [New File]

5เข้าโหมดพิมพ์: i / a / o

มี 3 ปุ่มยอดนิยมที่พา Normal mode เข้าสู่ Insert mode — ต่างกันแค่ว่า “จะเริ่มพิมพ์ตรงไหน” พอเข้า Insert แล้วก็พิมพ์ข้อความได้ตามปกติเลย

กดเริ่มพิมพ์ที่ไหน
iinsert — แทรกข้อความ ตรงหน้า เคอร์เซอร์ (ใช้บ่อยสุด)
aappend — ต่อท้าย หลัง เคอร์เซอร์ทีละตัว
oopen — เปิด บรรทัดใหม่ข้างล่าง แล้วเข้าโหมดพิมพ์ทันที
💡 จำง่ายๆ

ถ้ายังจำไม่ไหวทั้ง 3 ตัว จำแค่ i ตัวเดียวก็พอ — กด i แล้วพิมพ์ได้เลย ที่เหลือเป็นแค่ลูกเล่นเพิ่มความสะดวก ค่อยๆ เก็บทีหลังได้

⌨️ เปิดไฟล์ → กด i → พิมพ์
(เปิด vim มาแล้วอยู่ Normal mode)
กดปุ่ม  i  หนึ่งครั้ง
มุมล่างซ้ายจะขึ้นคำว่า  -- INSERT --
ตอนนี้พิมพ์ได้แล้ว:
สวัสดี นี่คือบรรทัดแรกของผม

สังเกตคำว่า -- INSERT -- ที่มุมล่างซ้าย — นั่นคือป้ายบอกว่าตอนนี้อยู่โหมดพิมพ์แล้ว เห็นเมื่อไหร่ แปลว่าพิมพ์ได้ปลอดภัย ไม่เห็นเมื่อไหร่ แปลว่ายังอยู่ Normal mode

6ออกจากโหมดพิมพ์: ปุ่ม Esc

พิมพ์ข้อความเสร็จแล้ว จะบันทึก จะลบ จะค้นหา หรือจะออก — ทุกอย่างต้องกลับไปที่ Normal mode ก่อน และวิธีกลับมีปุ่มเดียวคือ Esc (ปุ่มมุมซ้ายบนสุดของคีย์บอร์ด)

🎯 Esc คือปุ่มที่คุณจะใช้บ่อยที่สุดใน vim

จำประโยคนี้ให้ขึ้นใจ: “งงเมื่อไหร่ กด Esc ก่อน” — ไม่ว่าจะหลงอยู่โหมดไหน พิมพ์อะไรมั่วไปแล้ว การกด Esc จะพากลับมาที่ Normal mode ซึ่งเป็นจุดตั้งต้นที่ปลอดภัยเสมอ

💡 เปรียบเทียบ

Esc เหมือน ปุ่ม “หยุด” หรือ “กลับหน้าหลัก” — ไม่ว่าจะหลงไปลึกแค่ไหน กดแล้วเด้งกลับมาที่จุดเริ่ม ทำให้คุณตั้งหลักใหม่ได้

หลังกด Esc คำว่า -- INSERT -- ที่มุมล่างจะ หายไป นั่นแปลว่าคุณกลับมาอยู่ Normal mode เรียบร้อย พร้อมสั่งบันทึกหรือทำอย่างอื่นต่อได้

7บันทึกและออก: :w :q :wq :q!

คำสั่งบันทึกและออกอยู่ใน Command-line mode วิธีใช้คือ: อยู่ Normal mode (กด Esc ให้ชัวร์ก่อน) แล้วพิมพ์ : ตามด้วยคำสั่ง แล้วกด Enter

พิมพ์ทำอะไร
:wwrite = บันทึกไฟล์ แต่ ยังไม่ออก (ยังแก้ต่อได้)
:qquit = ออกจาก vim (ใช้ได้เมื่อไม่มีอะไรค้างต้องบันทึก)
:wqบันทึก แล้ว ออก — คำสั่งที่ใช้บ่อยที่สุด
:q!ออกแบบ ทิ้งการแก้ไขทั้งหมด ไม่บันทึกอะไรเลย (มี ! = บังคับ)
:wq!บังคับบันทึกแล้วออก (ใช้เมื่อไฟล์ตั้ง read-only แต่เราเป็น root)
⌨️ ตัวอย่างบันทึก+ออกแบบเต็มวงจร
(พิมพ์ข้อความเสร็จ อยู่ใน Insert mode)
กด Esc           ← กลับ Normal mode (-- INSERT -- หายไป)
:wq               ← พิมพ์คำสั่งนี้แล้วกด Enter
"notes.txt" 1L, 78B written   ← เครื่องยืนยันว่าบันทึกแล้ว ออกกลับมาที่ terminal
[student@server1 ~]$ _
Escกลับสู่ Normal mode ก่อนเสมอ — ถ้าไม่กด คำสั่ง :wq จะกลายเป็นข้อความที่ถูกพิมพ์ลงไฟล์แทน!
:wqบันทึกและออกในคำสั่งเดียว แล้วกด Enter
⚠️ ระวัง :q! กับ :wq! สับสนกัน

:q! = ทิ้งการแก้ไขทั้งหมด (เหมือนปิด Word โดยไม่เซฟ) ส่วน :wq! = เซฟทับของเดิม ทั้งคู่มี ! เหมือนกันแต่ผลตรงข้ามกันเลย ดูตัว w ให้ดี: มี w = เซฟ, ไม่มี w = ไม่เซฟ

8คำสั่งใน Normal mode ที่ควรรู้

พลังที่แท้จริงของ vim อยู่ที่ Normal mode คำสั่งพวกนี้กดตอนอยู่ Normal mode (กด Esc ก่อนนะ) ไม่ต้องพิมพ์ : นำหน้า — แค่กดปุ่มตรงๆ

เลื่อนและกระโดด

⌨️ การเดินทางในไฟล์
gg   ← กระโดดไปบรรทัดแรกสุดของไฟล์
G    ← กระโดดไปบรรทัดสุดท้ายของไฟล์ (G ตัวใหญ่)
/คำ  ← ค้นหา เช่น /error แล้ว Enter (กด n เพื่อหาตัวถัดไป)

ลบ คัดลอก วาง

⌨️ แก้ไขเนื้อหา
x    ← ลบตัวอักษร 1 ตัว ตรงเคอร์เซอร์
dd   ← ลบทั้งบรรทัด (กด d สองครั้งติดกัน)
yy   ← คัดลอกทั้งบรรทัด (yank)
p    ← วางสิ่งที่เพิ่งลบ/คัดลอก ไว้บรรทัดล่าง (paste)
u    ← undo ย้อนกลับการกระทำล่าสุด (กดซ้ำได้หลายครั้ง)
ddลบทั้งบรรทัด — ของที่ลบจะถูกจำไว้ในคลิปบอร์ด เอาไปวางด้วย p ได้
yy + pก๊อปบรรทัดด้วย yy เลื่อนไปบรรทัดที่ต้องการ แล้วกด p เพื่อวาง
uพระเอกของมือใหม่! ทำพังเมื่อไหร่ กด u ย้อนได้เรื่อยๆ จนกว่าจะพอใจ
💡 เปิดเลขบรรทัดให้ดูง่ายขึ้น

ในข้อสอบที่โจทย์บอกว่า “แก้บรรทัดที่ 5” การมีเลขบรรทัดช่วยได้มาก พิมพ์คำสั่งนี้ใน Command-line mode:

:set number   ← โชว์เลขบรรทัดทางซ้าย
:set nonumber ← ซ่อนเลขบรรทัดกลับ

9หลงโหมด / พิมพ์มั่ว ทำยังไง

นี่คือสถานการณ์ที่มือใหม่ ทุกคน ต้องเจอ: หน้าจอเละไปหมด ไม่รู้อยู่โหมดไหน พิมพ์อะไรลงไปก็ไม่รู้ตัว — ใจเย็นๆ มีทางหนีที่ปลอดภัยเสมอ

🆘 สูตรกู้ภัยฉุกเฉิน — ท่องไว้เลย

1. กด Esc สัก 2–3 ครั้ง (ให้แน่ใจว่าหลุดออกจากทุกโหมด กลับมา Normal)
2. พิมพ์ :q! แล้วกด Enter (ออกแบบ ไม่บันทึกอะไรเลย ทิ้งความเละทั้งหมด)
3. เปิดไฟล์ใหม่ด้วย vim ชื่อไฟล์ แล้วเริ่มใหม่อย่างใจเย็น

💡 เปรียบเทียบ

เหมือน เกมที่เล่นพลาดจนตัวละครจะตาย — แทนที่จะฝืนแก้ ก็กด “ออกโดยไม่เซฟ” แล้วโหลดเซฟเดิมมาเล่นใหม่ ไฟล์ของจริงไม่เสียหายเพราะเรายังไม่ได้บันทึกทับ

😅 เคส “พิมพ์ :q แล้วออกไม่ได้”

ถ้า vim ขึ้นเตือนว่า E37: No write since last change แปลว่าคุณแก้ไฟล์ไว้แต่ยังไม่บันทึก vim เลยไม่ยอมให้ออกเฉยๆ — ถ้า อยากเก็บงาน ใช้ :wq ถ้า อยากทิ้ง ใช้ :q!

10ข้อผิดพลาดที่มือใหม่เจอบ่อย

11สรุปคำสั่งบทนี้ (Cheat Sheet)

เปิด / เข้าโหมดพิมพ์

คำสั่งทำอะไร
vim ไฟล์เปิด (หรือสร้าง) ไฟล์
iเข้า Insert mode แทรกตรงเคอร์เซอร์
aเข้า Insert mode ต่อท้ายเคอร์เซอร์
oเปิดบรรทัดใหม่ข้างล่างแล้วเข้า Insert mode
Escกลับ Normal mode (งงเมื่อไหร่กดตัวนี้)

บันทึก / ออก (พิมพ์ตอนอยู่ Normal mode)

คำสั่งทำอะไร
:wบันทึก (ยังไม่ออก)
:qออก (เมื่อไม่มีอะไรค้าง)
:wqบันทึก + ออก (ใช้บ่อยสุด)
:q!ออกโดยทิ้งการแก้ไขทั้งหมด
:wq!บังคับบันทึกทับแล้วออก

แก้ไขใน Normal mode

คำสั่งทำอะไร
xลบตัวอักษร 1 ตัว
ddลบทั้งบรรทัด
yyคัดลอกทั้งบรรทัด
pวางสิ่งที่ลบ/คัดลอก
uundo ย้อนกลับ
gg / Gไปต้นไฟล์ / ท้ายไฟล์
/คำค้นหาคำ (กด n หาตัวถัดไป)
:set numberโชว์เลขบรรทัด
✅ จบบทนี้คุณควรทำได้

เปิดไฟล์ด้วย vim → กด i เพื่อพิมพ์ → กด Esc กลับ Normal → :wq บันทึกและออก และเมื่อหลงโหมดก็กด Esc แล้ว :q! ออกอย่างปลอดภัย เท่านี้คุณก็แก้ไฟล์บนเซิร์ฟเวอร์ไหนก็ได้ และเอาตัวรอดในห้องสอบ RHCSA ได้แล้ว!