vim or vi

VIM หรือ Vi

VIM หรือเรียกว่า Vi (อ่านว่า วี-ไอ) เป็นโปรแกรมประเภท Text editor ชนิดหนึ่ง คล้ายกับโปรแกรม Notepad บนระบบปฏิบัติการ Windows ซึ่งโปรแกรม VIM/Vi (ขอเรียกว่า vi แล้วกัน) จะถูกติดตั้งมากับระบบปฏิบัติการ UNIX / Linux ทุกตัวอยู่แล้ว หากต้องการใช้ Text editor ตัวอื่นๆ เช่น Nano, Pico ต้องติดตั้งเพิ่มเติมเอง

ผู้เริ่มต้นหรือมือใหม่มักจะคิดว่า vi ใช้งานยาก (เพราะคนไทยส่วนมากคุ้นเคยกับ Word, Notepad) โดยเฉพาะการบอกต่อกันมาจากรุ่นพี่ แต่แท้จริงแล้ว เมื่อใช้ vi เป็นจะสะดวก และไม่ต้องพึงพาเมาส์ (Mouse) มาช่วยคลิกเหมือน Word, Notepad เพราะ vi สามารถเปลี่ยนโหมด (Mode) จากการแก้ไขข้อความ เป็นเลื่อนเคอร์เซอร์ (cursor) ไปตำแหน่งที่ต้องการได้   

คุณสมบัติ : จัดการไฟล์ข้อมูล เช่น สร้างไฟล์ เพิ่ม,แก้ไขและลบข้อมูลในไฟล์

พาทัวร์ (Tutor)

เข้าโปรแกรม vi ครั้งแรก ดูการสอนวิธีใช้โปรแกรม vi โดยพิมพ์คำสั่ง vimtutor ที่ prompt แล้วกด enter เช่น [root@aday ~]# vimtutor 

vimtutor

หน้าสอนการใช้ VIM ปรากฏขึ้น และให้ลองเลื่อน cursor ด้วยการกดตัวอักษร h, j, k และ l  (ลองดูครับ ขึ้นๆ ลงๆ ซ้าย ขวา ซ้าย ขวา… สูตรเกมส์อะไรคุ้นๆ) ลองอ่านหัวข้อต่างๆ สร้างความเคยชินไปก่อน 

  • h = เลื่อนไปด้านซ้าย
  • j = เลื่อนไปด้านล่าง
  • k = เลื่อนไปด้านบน
  • l = เลื่อนไปด้านขวา
vim tutor

การออกจากไฟล์ ให้กด Esc (กี่ครั้งก็ได้) และกด :q (ดังภาพด้านล่าง) หากใครพิมพ์อะไรลงไป แล้วไม่ต้องการบันทึกไฟล์ (save) ให้พิมพ์ :q! แล้วกด enter ซึ่งจะกลับสู่ prompt

vim exit

โหมด (Mode)

เมื่อเข้าโปรแกรม vi แล้ว การทำงานจะมี 3 โหมด (mode) ดังนี้

  1.  Command mode :
    เมื่อเข้ามาใน vi แล้ว โหมดแรกที่เจอคือโหมดนี้ โหมดนี้จะรอรับ “คำสั่ง” ที่พิมพ์ลงไป และคำสั่งที่พิมพ์ลงไปจะไม่แสดงบนหน้าจอ เช่น การกดตัวอักษร h, j, k และ i  เป็นการเลื่อน cursor ทันที หรือ การกดอักษร dd เป็นการลบข้อความทั้งบรรทัด (กดตัว d ติดกัน 2 ครั้ง เหมือนการ double click mouse) และขณะที่อยู่ใน Insert mode การกลับมา Command mode ให้กด Esc (กดกี่ครั้งก็ได้)
  2. Insert mode :
    โหมดการเพิ่มตัวอักษร แก้ไข ลบ และสำเนาข้อความ การเข้าโหมดนี้ทำได้โดยการกดตัวอักษร เช่น i, I, o, O, a และ A ตัวใดตัวหนึ่ง เมื่อต้องการออกจากโหมดนี้ ให้กด Esc (กดกี่ครั้งก็ได้) จะกลับไปโหมด Command mode
  3. Last line mode หรือ Escape mode :
    ขณะที่อยู่ใน Command mode ให้กดตัวอักษร (Colon) : จากนั้น cursor จะกระพริบที่บรรทัดสุดท้ายของหน้า เพื่อรอให้พิมพ์คำสั่ง เช่น :q (ออกจากไฟล์) :q! (ออกจากไฟล์ทันที) :w (บันทึกไฟล์) :wq (บันทึกและออกจากไฟล์) :wq! (บันทักลแออกจากไฟล์ทันที) เป็นต้น หากต้องการกลับ Command mode ให้กด Esc เช่นเคย

การสร้าง/เปิด ไฟล์ (New/Open)

การสร้างไฟล์บนระบบ Unix / Linux นั้น ไฟล์ที่สร้างจะมีนามสกุลหรือไม่มีก็ได้ (ไม่ต้องแปลกใจ) เช่น vi example01 หรือ example01.txt หรือ example01.php เป็นต้น (ไฟล์ example01 และ example01.txt เป็นคนละไฟล์กัน) ผู้ที่คุ้นเคยกับระบบปฏิบัติการ Windows เมื่อบันทักไฟล์และมีนามสกุลไฟล์ต่อท้ายตามประเภทโปรแกรมที่ใช้งาน เช่น example01.docx หรือ example01.exe หรือ example01.txt เป็นต้น

คำสั่ง ตัวอย่าง คำอธิบาย
vi filename
vi example01
เปิดไฟล์ / สร้างไฟล์ใหม่ (ถ้าไฟล์นี้ไม่มีอยู่) โดยไม่มีการระบุนามสกุล
vi filename.txt
vi example01.txt
เปิดไฟล์ / สร้างไฟล์ใหม่ โดยมีการระบุนามสกุล .txt
vi +10 filename
vi +10 example01
เปิดไฟล์ และไปบรรทัดที่ 10
vi + filename
vi + example01
เปิดไฟล์ และไปบรรทัดสุดท้าย

การเปิดไฟล์แบบระบุพาร์ท (Path) ของไฟล์ สามารถทำได้ โดยไม่ต้อง cd เข้าไปถึง directory ที่ไฟล์อยู่ เช่น

# vi /var/log/messages
# vi /etc/ssh/sshd_config
# vi /etc/php.ini

โหมด Command mode

การย้ายหรือเปลี่ยน (move) ตำแหน่งของ cursor

การย้ายหรือเปลี่ยนตำแหน่งสามารถระบุตัวเลขหน้าคำสั่งได้ เช่น 5h, 3j, 8k และ 3l เป็นต้น (ต้องลองแล้วจะรู้)

คำสั่ง คำอธิบาย
h
เลื่อนไปด้านซ้าย ทีละตัวอักษร
j
เลื่อนไปด้านล่าง ทีละตัวอักษร
k
เลื่อนไปด้านบน ทีละตัวอักษร
l (ตัวแอลเล็ก), spacebar
เลื่อนไปด้านขวา ทีละตัวอักษร
w
เลื่อนไปด้านขวา ทีละคำ (cursor อยู่ที่ตัวอักษรแรกของคำ)
b
เลื่อนไปด้านซ้าย ทีละคำ
0 (ตัวเลขศูนย์)
เลื่อนไปตัวอักษรแรกของบรรทัด
$
เลื่อนไปตัวอักษรสุดท้ายของบรรทัด
e
เลื่อนไปด้านขวา ทีละคำ (cursor อยู่ที่ตัวอักษรสุดท้ายของคำ)
[
เลื่อนไปด้านบน ทีละย่อหน้า
]
เลื่อนไปด้านล่าง ทีละย่อหน้า
nG
เลื่อนต้นบรรทัดตามตัวเลขที่ระบุ เช่น 5G คือเลื่อนไปบรรทัดที่ 5
G
เลื่อนไปบรรทัดสุดท้ายของไฟล์
[[
เลื่อนไปบรรทัดแรกของไฟล์
]]
เลื่อนไปบรรทัดสุดท้ายของไฟล์ (คล้าย G)
Ctrl+f
เลื่อนลงทีละหน้า
Ctrl+b
เลื่อนขึ้นทีละหน้า
Ctrl+d
เลื่อนลงทีละครึ่งหน้า
Ctrl+u
เลื่อนขึ้นทีละครึ่งหน้า
Ctrl+e
เลื่อนขึ้นทีละหนึ่งบรรทัด
Ctrl+y
เลื่อนลงทีละหนึ่งบรรทัด
H
เลื่อนไปบรรทัดบนหน้าจอ
M
เลื่อนไปบรรทัดกลางหน้าจอ
L
เลื่อนไปบรรทัดล่างหน้าจอ

การลบข้อความ (delete)

หากแก้ไขหรือลบผิดพลาดไป สามารถยกเลิกได้คล้าย MS Word ด้วยโหมดคำสั่ง u (ตัวอักษร u)  

คำสั่ง คำอธิบาย
d0 (ตัวเลขศูนย์)
ลบข้อความตั้งแต่ตัวอักษรแรกของบรรทัดจนถึงตำแหน่ง cursor อยู่
dw
ลบคำด้านขวา 1 คำ
d5w
ลบคำด้านขวา 5 คำ
db
ลบคำด้านซ้ายมือ 1 คำ
d5b
ลบคำด้านซ้าย 5 คำ
dd
ลบบรรทัดที่ cursor อยู่
5dd
ลบบรรทัดลงไป 5 บรรทัด ที่ cursor อยู่
dL
ลบตั้งแต่บรรทัดที่ cursor อยู่ ลงไปสุดหน้าจอ
x
ลบตัวอักษรที่ cursor อยู่ ไปด้านขวา
X
ลบตัวอักษรด้านหลัง cursor อยู่ ไปด้านซ้าย
5x
ลบตัวอักษรด้านขวา 5 ตัว
5X
ลบตัวอักษรด้านซ้าย 5 ตัว

การคัดลอกและวาง (copy & paste)

หากแก้ไขหรือลบผิดพลาดไป สามารถยกเลิกได้คล้าย MS Word ด้วยโหมดคำสั่ง u (ตัวอักษร u)  

คำสั่ง คำอธิบาย
Y (ตัวใหญ่)
คัดลอกข้อความทั้งบรรทัดที่ cursor อยู่
P (ตัวใหญ่)
แทรกข้อความ (ที่คัดลอกไว้) บรรทัดก่อน cursor อยู่
p (ตัวเล็ก)
แทรกข้อความ (ที่คัดลอกไว้) บรรทัดถัดไป cursor อยู่
4yy
คัดลอกข้อความ 4 บรรทัด จากบรรทัดที่ cursor อยู่
y3w
คัดลอกข้อความ 3 คำ ที่ cursor อยู่

โหมด Insert mode

คำสั่ง คำอธิบาย
i
เพิ่มข้อความที่ cursor อยู่
I (ตัวไอใหญ่)
เพิ่มข้อความต้นบรรทัดที่ cursor อยู่
a
เพิ่มข้อความถัดจาก cursor อยู่
A
เพิ่มข้อความท้ายบรรทัดที่ cursor อยู่
o (ตัวโอเล็ก)
แทรกบรรทัดถัดไปที่ cursor อยู่
O (ตัวโอใหญ่)
แทรกบรรทัดก่อนหน้าที่ cursor อยู่
r
แทนที่ตัวอักษรตัวเดียวที่ cursor อยู่ เช่น กดตัว r และ c (เมื่อกดเสร็จก็อยู่ในโหมด command อยู่)
R
แทนที่ตัวอักษรที่ cursor อยู่ เช่น กดตัว R และ copy (เมื่อพิมพ์เสร็จ ต้องกด Esc ออกจากโหมดนี้)

โหมด Last line mode หรือ Escape mode

คำสั่ง คำอธิบาย
:w หรือ :w file2
บันทึกไฟล์ปัจจุบัน หรือใส่ชื่อไฟล์ใหม่ต่อท้าย จะเป็นการสร้างไฟล์ใหม่ (เหมือน Save as)
:q
ออกจากโปรแกรม
:wq
บันทึกไฟล์และออกจากโปรแกรม
:q!
ออกจากโปรแกรม โดยไม่บันทึกผลที่แก้ไขไปก่อนหน้า
:/ข้อความ หรือ /ข้อความ
ค้นหาข้อความที่สนใจ และสามารถกดตัวอักษร n เพื่อหาต่อไปเรื่อยๆ
:set number หรือ :set nu
ให้แสดงหมายเลขบรรทัด
:set nonumber หรือ :set nonu
ปิดแสดงหมายเลขบรรทัด

คำสั่งทั้งหมดข้างต้นนี้ เมื่อฝึกให้คุ้นเคยแล้ว ไม่ว่าคุณไปสัมผัสกับ Unix / Linux เครื่องไหน ก็สามารถแก้ไขไฟล์ต่างๆ ได้ โดยไม่ต้องดาวน์โหลดโปรแกรมใดๆ เพิ่มเติมอีกแล้ว ขอย้ำว่าโปรแกรม vi ไม่ยาก เพียงแต่ไม่คุ้นเคยเท่านั้นเอง