### VI

ในระบบยูนิกซ์ทั่วไปจะต้องมีเครื่องมือสำหรับเอาไว้ตกแต่งแก้ไขไฟล์เอกสารประจำไว้อยู่ตัวหนึ่ง ซึ่งก็คือ vi (อ่านว่า วี-ไอ) ในตอนเริ่มแรกของการใช้งาน vi แทบทุกคนจะบอกว่า การใช้งานและการทำความเข้าใจนั้นยากกว่า เอดิเตอร์ที่เป็นพวก pulldown menu driven บนดอสเช่นพวก จุฬาเวิร์ด หรือ Q-Editor มาก (ในยูนิกซ์จะเป็นพวก Emacs หรือ pico)
แต่หากคุณพยายามฝึกฝนใช้งานไปสักพักหนึ่งแล้ว คุณจะรู้สึกว่า vi เป็นเอดิเตอร์ที่มีการใช้งานได้อย่างมีประสิทธิภาพมากที่สุดตัวหนึ่ง และคุณสมบัติต่างๆของ vi ที่มีมาให้ก็จะสามารถทำให้คุณใช้งาน vi ได้อย่างสะดวกสบายมากขึ้น นอกจากนี้การที่คุณใช้งาน vi เป็น จะทำให้คุณได้เปรียบกว่าการใช้งาน editor ตัว อื่นๆ เพราะ vi เป็น editor พื้นฐานที่จะต้องมีประจำไว้กับยูนิกซ์ทุกตัวอยู่แล้ว ในขณะที่ editor ตัวอื่นๆคุณอาจหาไม่พบใน ยูนิกซ์รุ่นอื่นๆก็ได้

### วิธีการใช้งานอย่างคร่าวๆ

vi จะมีรูปแบบการใช้งาน (mode) อยู่สามแบบคือ

- command mode
- insert mode
- last line mode

command mode จะเป็นโหมดปกติตอนเริ่มต้น vi ในโหมดนี้คุณสามารถจะทำการเคลื่อนย้ายเคอร์เซอร์ ลบข้อความ สำเนาข้อความ และทำงานอื่นๆได้
insert mode ในโหมดนี้เป็นโหมดที่ทำให้คุณสามารถทำการแก้ไขข้อความหรือพิมพ์ข้อความลงไปได้ คุณสามารถเปลี่ยนจาก command mode เข้ามาอยู่ใน insert mode ได้โดยการกดปุ่ม "i" เป็นต้น และคุณก็จะสามารถพิมพ์ข้อความต่างๆได้ และเมื่อคุณต้องการจะกลับไปยัง command mode อีกที คุณก็สามารถโดยทำการกดปุ่ม "Esc"
โหมดสุดท้ายคือ last line mode จะเป็นโหมดที่อนุญาตให้คุณสามารถ ใช้คำสั่งเพิ่มเติมของ vi ได้ โดยคุณจะต้องกดปุ่ม ":" ซึ่ง vi จะแสดงเป็นพร้อมต์รอรับคำสั่งอยู่ด้านล่างสุดของจอภาพ คุณสามารถทำการสั่งโดยการพิมพ์คำว่า "wq" แล้วกด Enter เพื่อทำการบันทึกข้อความลงไฟล์ แล้วออกจากโปรแกรม vi เป็นต้น

### การใช้งาน vi

คุณสามารถเริ่มต้นการใช้งาน vi ได้โดยใช้คำสั่ง

    vi (filename)

โดยที่ filename คือชื่อไฟล์ที่คุณต้องการจะบันทึกข้อความ ตัวอย่างเช่น

    vi myfirstfile

จะเป็นการสร้างไฟล์ที่ชื่อ myfirstfile ขึ้นมา แต่หากมีไฟล์นี้อยู่แล้วก็จะทำการอ่านข้อความที่มีอยู่ในไฟล์นี้ขึ้นมา ในตัวอย่างนี้เราจะถือว่าเป็นการสร้างไฟล์ใหม่ขึ้นมาและเมื่อ vi เริ่มต้นทำงานแล้ว คุณจะเห็นจอภาพในลักษณะต่อไปนี้
คุณจะเห็นว่าเคอร์เซอร์จะอยู่บรรทัดบนสุด แสดงว่ายังไม่มีข้อความใดๆอยู่ในไฟล์นี้ และบรรทัดถัดลงมาจะขึ้นต้นด้วยตัวอักษร "~" ซึ่งหมายความว่าเป็นตัวสิ้นสุดไฟล์ (End of file)
ให้คุณทดลองเริ่มพิมพ์ข้อความ โดยให้เปลี่ยนไปอยู่ใน insert mode โดยใช้กดปุ่ม "i" แล้วทดลองพิมพ์ข้อความดู
ในระหว่างการพิมพ์ข้อความ คุณสามารถจะใช้ปุ่มลูกศรทำการเลื่อนเคอร์เซอร์ไปมาระหว่างข้อความได้ และหากคุณพิมพ์ผิดพลาด ก็ให้ใช้ปุ่ม "Backspace" หรือ "Delete" ทำการแก้ไขข้อผิดพลาดเหล่านั้นได้ ให้คุณกลับคืนสู่ command mode โดยกดปุ่ม "Esc"
ในกรณีที่คุณต้องการจะแทรกต่อท้ายข้อความ (append) ให้คุณกดปุ่ม "a" โปรแกรม vi จะกลับไปอยู่ใน insert mode อีกครั้ง แต่จะมีการแทรกพิมพ์ข้อความในตำแหน่ง ที่ถัดจากเคอร์เซอร์ออกไป ซึ่งจะต่างกับ "i" ที่จะแทรกในตำแหน่งที่เคอร์เซอร์อยู่พอดี
และหากคุณต้องการจะแทรกข้อความในบรรทัดถัดไป คุณจะต้องกดปุ่ม "o" โปรแกรม vi จะทำการขึ้นบรรทัดใหม่ให้ คุณสามารถจะพิมพ์ข้อความในบรรทัดใหม่นั้นได้
จากรูปในตัวอย่างให้คุณทดลองแทรกข้อความ "1234" ระหว่างข้อความ "This is" กับ "the first line" และพิมพ์ข้อความ "end of line" ต่อท้ายบรรทัด
จะเห็นว่าคุณจะต้องอยู่ใน command mode และใช้ปุ่มลูกศรเลื่อนเคอร์เซอร์ไปตรงกับตัวอักษร "s" ของข้อความ "This is" และกดปุ่ม "i" เพื่อทำการแทรกข้อความ แล้วจึงพิมพ์ "1234" ตามลงไป ส่วนการพิมพ์ต่อท้ายบรรทัดนั้น ให้คุณกลับมาอยู่ในคอมมานด์โหมด แล้วเลื่อนเคอร์เซอร์ไปที่ท้ายบรรทัด จากนั้นก็กดปุ่ม "a" เพื่อเริ่มทำการ append และคุณก็สามารถพิมพ์ข้อความ "end of line" ลงไปได้
ในตอนแรกๆคุณอาจจะรู้สึกสับสนกับการสลับโหมดระหว่าง command mode และ insert mode แต่ขอให้คุณทดลองฝึกฝนไปสักพักหนึ่ง โดยอาจทดลองพิมพ์ข้อความลงไป และแก้ไขดู เมื่อคุณฝึกไปสักระยะหนึ่งแล้ว คุณจะพบว่าคุณสามารถทำการคุ้นเคยกับการสลับโหมดของ vi ได้อย่างไม่ยากนัก

### การลบข้อความ

หากคุณต้องการจะลบตัวอักษร (character delete) ให้คุณกลับคืนสู่ command mode โดยกดปุ่ม "Esc" แล้วเลื่อนเคอร์เซอร์โดยใช้ปุ่มลูกศรไปอยู่ในตำแหน่งของตัวอักษร ที่คุณต้องการจะลบออกนั้น แล้วกดปุ่ม "x" โปรแกรม vi จะทำการลบตัวอักษรให้หนึ่งตัวในตำแหน่งที่ตรงกับเคอร์เซอร์นั้น เมื่อลบตัวอักษรแล้ว vi ก็ยังอยู่ใน command mode อยู่เหมือนเดิม หากคุณต้องการจะลบตัวอักษรมากกว่าหนึ่งตัว คุณจะต้องทำการกดปุ่ม "x" จำนวนเท่ากับตัวอักษรที่คุณต้องการจะลบนั้น เช่นคุณจะต้องกด "x" 4 ครั้ง เพื่อจะลบข้อความ "1234" หรือคุณอาจจะใช้ "4x" แทนการกด "x" 4 ครั้งก็ได้
หากคุณต้องการจะลบบรรทัด คุณจะต้องเลื่อนเคอร์เซอร์ มาอยู่ในบรรทัดที่คุณต้องการจะลบแล้วกดปุ่ม "dd" (กด "d" สองครั้งติดกัน)

### การเปลี่ยนแปลงข้อความ

การเปลี่ยนข้อความหนึ่งตัวอักษร สามารถทำได้โดยการกดปุ่ม "r" เมื่อเปลี่ยนเสร็จแล้วคุณจะกลับสู่ command mode ถ้าคุณต้องการเปลี่ยนข้อความมากกว่าหนึ่งตัวอักษรให้ทำการกดปุ่ม "R" คุณจะสามารถเปลี่ยนข้อความไปเรื่อยๆได้จนกว่าจะกดปุ่ม "Esc" เพื่อกลับสู่ command mode

### การเคลื่อนย้ายเคอร์เซอร์

เมื่ออยู่ใน command mode นอกจากการใช้ปุ่มลูกศรทำการเคลื่อนย้ายเคอร์เซอร์แล้วคุณอาจจะใช้ปุ่ม "h", "j", "k", "l" ในการเคลื่อนย้ายได้เช่นกัน โดยมีรูปแบบดังนี้

- ปุ่ม "h" สำหรับเลื่อนเคอร์เซอร์ไปทางซ้าย
- ปุ่ม "j" สำหรับเลื่อนเคอร์เซอร์ลง
- ปุ่ม "k" สำหรับเลื่อนเคอร์เซอร์ขึ้น
- ปุ่ม "l" สำหรับเลื่อนเคอร์เซอร์ไปทางขวา

คุณอาจสงสัยว่าทำไมถึงต้องใช้ปุ่มเหล่านี้ในการบังคับเคอร์เซอร์ นอกจากปุ่มลูกศรด้วย ถ้าคุณสามารถทำการพิมพ์ดีดแบบสัมผัสได้ คุณจะสังเกตเห็นว่าปุ่มเหล่านั้นถูกวางอยู่ตำแหน่งที่ประจำของมือขวา และถ้าคุณคุ้นเคยกับการใช้งานแล้ว คุณจะเห็นว่าการบังคับเคอร์เซอร์ด้วยปุ่มเหล่านั้นจะสะดวกรวดเร็วกว่าการใช้ปุ่มลูกศรมาก เนื่องจากคุณไม่จำเป็นต้องย้ายมือไปที่ปุ่มลูกศร เมื่อต้องการจะเปลี่ยนไปใช้การบังคับเคอร์เซอร์
สำหรับการเลื่อนหน้าจอทีละหน้าจอภาพ คุณสามารถทำได้โดยการกดปุ่ม
Ctrl-f เลื่อนหน้าจอไปข้างหน้า (เลื่อนลง) ทีละหน้า
Ctrl-b เลื่อนหน้าจอถอยหลัง (เลื่อนขึ้น) ทีละหน้า
Ctrl-d เลื่อนหน้าจอไปข้างหน้า (เลื่อนลง) ทีละครึ่งหน้าจอ
Ctrl-u เลื่อนหน้าจอถอยหลัง (เลื่อนขึ้น) ทีละครึ่งหน้าจอ
หมายเหตุ : คุณจะสังเกตุเห็นว่า
- Ctrl-f คือ forward = เลื่อนไปข้างหน้า
- Ctrl-b คือ backward = เลื่อนถอยหลัง
- Ctrl-d คือ downward = เลื่อนลง
- Ctrl-u คือ upward = เลื่อนขึ้น

### การบันทึกไฟล์และการออกจาก vi

เมื่อคุณอยู่ใน command mode ให้กดปุ่ม ":" เพื่อสลับโปรแกรมให้มาอยู่ใน last line mode คุณจะสังเกตุเห็นตัวอักษร ":" ขึ้นอยู่ที่ด้านล่างของจอภาพและมีเคอร์เซอร์รออยู่ คุณสามารถจะพิมพ์คำสั่งต่างเพื่อให้ vi ทำงานตามที่ต้องการได้ คำสั่งต่างๆ มีดังต่อไปนี้

- :q ออกจาก vi
- :w คือสั่งบันทึก (save) ไฟล์
- :wq สั่งบันทึกและออกจาก vi
- :wq! สั่งบันทึกและออกจาก vi พร้อมทั้งยืนยันคำสั่ง (!)
- :q! ออกจาก vi โดยไม่บันทึกข้อมูลลงไฟล์
- :w สั่งบันทึก (save as) ในชื่อของ

HTML developed by Kaiwal Development Team (kaiwal@geocities.com)