โปรแกรมแก้ไฟล์ที่หน้าตาน่ากลัวที่สุดในโลก Linux — แต่พอเข้าใจ “โหมด” ของมันแล้ว คุณจะแก้ไฟล์ตั้งค่าได้ทุกเครื่องโดยไม่ต้องพึ่ง Notepad อีกเลย
🌱 บทนี้เขียนเพื่อคนที่ไม่เคยแตะ Linux มาก่อนเลยคำถามนี้ดีมาก และคำตอบสั้นๆ คือ — เพราะคุณไม่มีทางเลือกอื่น เวลาทำงานจริงบนเซิร์ฟเวอร์
บนเครื่อง Windows คุณมี Notepad บนมือถือมี Notes แต่บนเซิร์ฟเวอร์ Linux ส่วนใหญ่ ไม่มีหน้าจอสวยๆ ไม่มีโปรแกรมแก้ข้อความแบบคลิกได้ สิ่งที่ ติดมากับทุกเครื่องเสมอ มีตัวเดียวคือ vi (และรุ่นใหม่กว่าชื่อ vim)
vi เหมือน ยางอะไหล่ในรถ — มันอาจจะไม่สวย ไม่นุ่มเท่าล้อจริง แต่มันมีติดรถทุกคันเสมอ และเมื่อยางแตกกลางทาง มันคือตัวเดียวที่พาคุณกลับบ้านได้
วันที่เซิร์ฟเวอร์มีปัญหาตอนตี 3 ไม่มีใครมาลงโปรแกรมสวยๆ ให้คุณ — มีแต่ vi ที่รออยู่
ข้อสอบหลายข้อต้องแก้ไฟล์ตั้งค่า เช่น แก้ค่าใน /etc/... หรือสร้างไฟล์ใหม่แล้วใส่ข้อความตามโจทย์ ทั้งหมดต้องทำผ่าน vi/vim ถ้าใช้ไม่เป็น คุณจะแก้ไฟล์ไม่ได้เลย และเสียคะแนนข้อนั้นไปเต็มๆ
ต่างกันนิดเดียว — vim ย่อมาจาก “Vi IMproved” คือ vi รุ่นอัปเกรด (มีสี มีฟีเจอร์เยอะกว่า) บน RHEL พิมพ์ vi ส่วนใหญ่ก็จะเปิด vim ให้อยู่ดี คำสั่งพื้นฐานที่เรียนในบทนี้ ใช้ได้เหมือนกันทั้งคู่ ไม่ต้องกังวล
นี่คือสิ่งที่ทำให้มือใหม่ทุกคน งงและหงุดหงิด กับ vim ในนาทีแรก ถ้าเข้าใจเรื่องนี้ได้ ที่เหลือจะง่ายขึ้นทันที
โปรแกรมแก้ข้อความที่คุณคุ้น (Notepad, Word) มัน มีโหมดเดียว — เปิดมาก็พิมพ์ได้เลย กดตัวอักษร A ก็ขึ้น A แต่ vim ไม่ใช่แบบนั้น มันมีหลาย “โหมด” และในแต่ละโหมด ปุ่มเดียวกันทำงานคนละอย่าง
นึกถึง ปากกาวิเศษด้ามหนึ่งที่สลับได้ 2 โหมด:
• โหมดเขียน — แตะกระดาษแล้วเขียนตัวอักษรได้ตามปกติ
• โหมดสั่งงาน — แตะกระดาษแล้วไม่เขียน แต่ปากกาจะ “ทำตามคำสั่ง” แทน เช่น แตะที่บรรทัดแล้วบรรทัดนั้นหายไป (ลบ) หรือกระโดดไปหน้าสุดท้าย
ปัญหาของมือใหม่คือ เปิด vim ขึ้นมาแล้ว มันอยู่ใน “โหมดสั่งงาน” พอพยายามพิมพ์ข้อความ ตัวอักษรเลยไม่ขึ้น หรือขึ้นมั่วๆ เพราะปุ่มที่กดถูกตีความเป็น “คำสั่ง” ไม่ใช่ “ตัวอักษร”
“เปิด vim มาแล้วพิมพ์ hello ทำไมตัวอักษรหายไปบ้าง เคอร์เซอร์กระโดดไปมา หน้าจอเละหมด!” — นั่นแหละ คุณกำลังอยู่ผิดโหมด คุณยังไม่ได้สั่งให้มันเข้า “โหมดพิมพ์” ก่อน แล้วทุกตัวที่กดเลยกลายเป็นคำสั่ง
ดังนั้นกฎข้อแรกของ vim คือ: ก่อนจะพิมพ์ข้อความ ต้องสั่งเข้า “โหมดพิมพ์” ก่อนเสมอ ส่วนวิธีทำ เดี๋ยวเราจะค่อยๆ ดูในข้อถัดไป
vim มีหลายโหมด แต่มือใหม่จำแค่ 3 อันนี้พอ — ครบทุกอย่างที่ต้องใช้แล้ว
i / a / o: (โคลอน) แล้วพิมพ์คำสั่ง เช่น :wq เพื่อบันทึกและออก คำสั่งจะไปโผล่ที่มุมล่างซ้ายของจอนึกภาพการ เขียนรายงานบนกระดาษ:
• Normal = ถือปากกาไว้เฉยๆ มองดูกระดาษ คิดว่าจะแก้ตรงไหน (ยังไม่ได้เขียน)
• Insert = วางปากกาลงกระดาษแล้วเขียนข้อความจริง
• Command-line = เดินไปบอกเลขาว่า “ช่วยถ่ายเอกสารแล้วเก็บเข้าแฟ้ม” (สั่งบันทึก/จัดการไฟล์)
เปิดไฟล์ (อยู่ Normal) → กด i เข้า Insert → พิมพ์ข้อความ → กด Esc กลับ Normal → พิมพ์ :wq บันทึก+ออก จำวงจรนี้ไว้ แล้วคุณจะรอดทุกสถานการณ์
การเปิดไฟล์ง่ายมาก — พิมพ์ vim ตามด้วยชื่อไฟล์ ถ้าไฟล์ยังไม่มี vim จะสร้างให้ใหม่ตอนที่คุณบันทึก
[student@server1 ~]$ vim notes.txt
พอกด Enter หน้าจอจะเปลี่ยนเป็นพื้นที่แก้ไฟล์เต็มจอ ตอนนี้คุณอยู่ใน Normal mode (โหมดสั่งงาน) ยัง พิมพ์ข้อความไม่ได้ นะ — ต้องสั่งเข้า Insert mode ก่อน (ข้อถัดไป)
หน้าจอที่เห็นจะหน้าตาประมาณนี้ บรรทัดที่ขึ้นต้นด้วย ~ หมายถึง “บรรทัดว่าง” (ยังไม่มีเนื้อหา) และมุมล่างจะบอกชื่อไฟล์:
_ ~ ~ ~ ~ "notes.txt" [New File]
มี 3 ปุ่มยอดนิยมที่พา Normal mode เข้าสู่ Insert mode — ต่างกันแค่ว่า “จะเริ่มพิมพ์ตรงไหน” พอเข้า Insert แล้วก็พิมพ์ข้อความได้ตามปกติเลย
| กด | เริ่มพิมพ์ที่ไหน |
|---|---|
i | insert — แทรกข้อความ ตรงหน้า เคอร์เซอร์ (ใช้บ่อยสุด) |
a | append — ต่อท้าย หลัง เคอร์เซอร์ทีละตัว |
o | open — เปิด บรรทัดใหม่ข้างล่าง แล้วเข้าโหมดพิมพ์ทันที |
ถ้ายังจำไม่ไหวทั้ง 3 ตัว จำแค่ i ตัวเดียวก็พอ — กด i แล้วพิมพ์ได้เลย ที่เหลือเป็นแค่ลูกเล่นเพิ่มความสะดวก ค่อยๆ เก็บทีหลังได้
(เปิด vim มาแล้วอยู่ Normal mode) กดปุ่ม i หนึ่งครั้ง มุมล่างซ้ายจะขึ้นคำว่า -- INSERT -- ตอนนี้พิมพ์ได้แล้ว: สวัสดี นี่คือบรรทัดแรกของผม
สังเกตคำว่า -- INSERT -- ที่มุมล่างซ้าย — นั่นคือป้ายบอกว่าตอนนี้อยู่โหมดพิมพ์แล้ว เห็นเมื่อไหร่ แปลว่าพิมพ์ได้ปลอดภัย ไม่เห็นเมื่อไหร่ แปลว่ายังอยู่ Normal mode
พิมพ์ข้อความเสร็จแล้ว จะบันทึก จะลบ จะค้นหา หรือจะออก — ทุกอย่างต้องกลับไปที่ Normal mode ก่อน และวิธีกลับมีปุ่มเดียวคือ Esc (ปุ่มมุมซ้ายบนสุดของคีย์บอร์ด)
จำประโยคนี้ให้ขึ้นใจ: “งงเมื่อไหร่ กด Esc ก่อน” — ไม่ว่าจะหลงอยู่โหมดไหน พิมพ์อะไรมั่วไปแล้ว การกด Esc จะพากลับมาที่ Normal mode ซึ่งเป็นจุดตั้งต้นที่ปลอดภัยเสมอ
Esc เหมือน ปุ่ม “หยุด” หรือ “กลับหน้าหลัก” — ไม่ว่าจะหลงไปลึกแค่ไหน กดแล้วเด้งกลับมาที่จุดเริ่ม ทำให้คุณตั้งหลักใหม่ได้
หลังกด Esc คำว่า -- INSERT -- ที่มุมล่างจะ หายไป นั่นแปลว่าคุณกลับมาอยู่ Normal mode เรียบร้อย พร้อมสั่งบันทึกหรือทำอย่างอื่นต่อได้
คำสั่งบันทึกและออกอยู่ใน Command-line mode วิธีใช้คือ: อยู่ Normal mode (กด Esc ให้ชัวร์ก่อน) แล้วพิมพ์ : ตามด้วยคำสั่ง แล้วกด Enter
| พิมพ์ | ทำอะไร |
|---|---|
:w | write = บันทึกไฟล์ แต่ ยังไม่ออก (ยังแก้ต่อได้) |
:q | quit = ออกจาก 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 = ไม่เซฟ
พลังที่แท้จริงของ 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 ← ซ่อนเลขบรรทัดกลับ
นี่คือสถานการณ์ที่มือใหม่ ทุกคน ต้องเจอ: หน้าจอเละไปหมด ไม่รู้อยู่โหมดไหน พิมพ์อะไรลงไปก็ไม่รู้ตัว — ใจเย็นๆ มีทางหนีที่ปลอดภัยเสมอ
1. กด Esc สัก 2–3 ครั้ง (ให้แน่ใจว่าหลุดออกจากทุกโหมด กลับมา Normal)
2. พิมพ์ :q! แล้วกด Enter (ออกแบบ ไม่บันทึกอะไรเลย ทิ้งความเละทั้งหมด)
3. เปิดไฟล์ใหม่ด้วย vim ชื่อไฟล์ แล้วเริ่มใหม่อย่างใจเย็น
เหมือน เกมที่เล่นพลาดจนตัวละครจะตาย — แทนที่จะฝืนแก้ ก็กด “ออกโดยไม่เซฟ” แล้วโหลดเซฟเดิมมาเล่นใหม่ ไฟล์ของจริงไม่เสียหายเพราะเรายังไม่ได้บันทึกทับ
ถ้า vim ขึ้นเตือนว่า E37: No write since last change แปลว่าคุณแก้ไฟล์ไว้แต่ยังไม่บันทึก vim เลยไม่ยอมให้ออกเฉยๆ — ถ้า อยากเก็บงาน ใช้ :wq ถ้า อยากทิ้ง ใช้ :q!
i ก่อน: เปิด vim มาคุณอยู่ Normal mode ตัวอักษรที่พิมพ์จะถูกตีความเป็นคำสั่ง ทำให้เนื้อหากระโดด/หายมั่วไปหมด — จำไว้ว่า กด i ก่อนพิมพ์เสมอ:wq: ถ้ายังอยู่ Insert mode แล้วพิมพ์ :wq มันจะกลายเป็นข้อความ :wq ที่ถูกเขียนลงไฟล์จริงๆ ไม่ใช่คำสั่ง — ต้อง กด Esc ก่อนเสมอ แล้วค่อยพิมพ์ ::wq! ทั้งที่ไม่ตั้งใจ: โดยเฉพาะเวลาแก้ไฟล์ตั้งค่าระบบ การเซฟทับโดยไม่ตั้งใจอาจทำระบบพัง ถ้าไม่แน่ใจว่าแก้ถูกไหม ให้ :q! ออกแบบไม่บันทึกไว้ก่อน แล้วค่อยกลับมาดูใหม่:q! (ทิ้ง) กับ :wq! (เซฟทับ): ดูตัว w ให้ดี มี w = เขียนทับ, ไม่มี w = ไม่เขียนg กับ G ทำคนละอย่าง ถ้าคำสั่งทำงานเพี้ยน เช็ก Caps Lock ด้วย| คำสั่ง | ทำอะไร |
|---|---|
vim ไฟล์ | เปิด (หรือสร้าง) ไฟล์ |
i | เข้า Insert mode แทรกตรงเคอร์เซอร์ |
a | เข้า Insert mode ต่อท้ายเคอร์เซอร์ |
o | เปิดบรรทัดใหม่ข้างล่างแล้วเข้า Insert mode |
Esc | กลับ Normal mode (งงเมื่อไหร่กดตัวนี้) |
| คำสั่ง | ทำอะไร |
|---|---|
:w | บันทึก (ยังไม่ออก) |
:q | ออก (เมื่อไม่มีอะไรค้าง) |
:wq | บันทึก + ออก (ใช้บ่อยสุด) |
:q! | ออกโดยทิ้งการแก้ไขทั้งหมด |
:wq! | บังคับบันทึกทับแล้วออก |
| คำสั่ง | ทำอะไร |
|---|---|
x | ลบตัวอักษร 1 ตัว |
dd | ลบทั้งบรรทัด |
yy | คัดลอกทั้งบรรทัด |
p | วางสิ่งที่ลบ/คัดลอก |
u | undo ย้อนกลับ |
gg / G | ไปต้นไฟล์ / ท้ายไฟล์ |
/คำ | ค้นหาคำ (กด n หาตัวถัดไป) |
:set number | โชว์เลขบรรทัด |
เปิดไฟล์ด้วย vim → กด i เพื่อพิมพ์ → กด Esc กลับ Normal → :wq บันทึกและออก และเมื่อหลงโหมดก็กด Esc แล้ว :q! ออกอย่างปลอดภัย เท่านี้คุณก็แก้ไฟล์บนเซิร์ฟเวอร์ไหนก็ได้ และเอาตัวรอดในห้องสอบ RHCSA ได้แล้ว!