คงเคยรู้จัก vi และ emacs กันมาบ้างนะครับ ชื่อเสียงที่หนาหูเกี่ยวกับ editor สองตัวนี้คือมันใช้ยากกกกก
VIM หรือ vi-improved เป็น vi เวอร์ชันเพิ่มความสามารถครับ แล้วก็มีให้ดาวน์โหลดไปใช้ได้แทบทุก OS มันจะมีฟังก์ชันหล่อๆเพิ่มขึ้นมาที่ vi ไม่มี เท่าที่ผมเห็นว่าสำคัญมีอยู่สองสามอย่าง
- Autocomplete อันนี้หล่อมากเลย ยอมรับ ทำได้หลายอย่าง เช่น
- ชื่อไฟล์ หรือ path ไปยังไฟล์ สะดวกมากเวลาต้องเขียนไฟล์ที่มันต้องระบุ path
- คำที่เคยพิมพ์มาแล้ว
- keyword ในภาษาเขียนโปรแกรม โดยมันเป็น context-sensitive ด้วย (Omni-completion) อันนี้อาจจะต้องลง plug-in เพิ่ม
- Multiple Tabs เปิด Tab หลายๆอันได้
- Visual Mode ทำให้การ คัดลอก ลบ แก้ไข เป็นเรื่องง่ายขึ้นมาก เลือกเป็นแบบ จุดเริ่มต้น-สิ้นสุด เป็นบรรทัด หรือเป็นคอลัมน์ได้ (อันหลังนี่เหมาะมากสำหรับไฟล์ข้อความที่ลักษณะเหมือนตาราง)
ตอนนี้ VIM เลยกลายเป็น text editor ที่ผมมักจะใช้แทน notepad ไปแล้วครับ :) ปัญหาจะเกิดอีกทีตอนใช้ภาษาไทย ซึ่งผมคิดว่าอย่าใช้ไฟล์ text ภาษาไทยกับ VIM เลยดีกว่า คนที่น่าจะมีปัญหานี้ที่สุดคงเป็นพวกเขียนเว็บ ..
หลังจากอ่านบทความจำพวกแนะนำ vi หรือ vi สำหรับมือใหม่ มานับไม่ถ้วน ผมพบว่าคำสั่งพื้นฐานเท่าที่จะสามารถทำให้เราใช้ VIM แทน Notepad ได้ มีอยู่ไม่กี่ตัว ดังต่อไปนี้
ออกจากโปรแกรม
พิมพ์ :q! ครับ
: เป็นการบอกว่าจะมี command อื่นๆตามมา ส่วน q แปลว่าออก และ ! แปลว่าออกแบบบังคับ (ถ้าเราแก้ไขไฟล์มันจะไม่ยอมให้ออกธรรมดา)
หรืออาจจะใช้ :wq เป็นการ save แล้วออก
ถ้า save เฉยๆก็ :w myfilename
ไป Command Mode
กด Ctrl + [ หรือ Esc
เราควรอยู่ใน Command Mode ตลอดเวลาที่ทำงานครับ ใช้ Insert Mode เฉพาะเวลาจะพิมพ์เท่านั้น :)
เคลื่อน cursor ไปมา
ใช้ปุ่ม h j k l แทน ซ้าย ล่าง บน ขวา
ถ้าพบว่าจำยาก ลองมองตัว j ว่ามันเหมือนลูกศรชี้ลงล่าง! แล้วจะจำได้ครับ (ได้มาจาก video youtube ซักอัน)
การเคลื่อนในระดับคำ
ระดับบรรทัด คล้ายๆกับ regex
ระดับ document
- gg ต้น document
- G ท้าย document
ไป Insert Mode
เข้าได้หลายแบบ แบบแรกควรรู้คือ a กับ i
- a ต่อหลัง cursor
- i วางหน้า cursor
และแบบที่สอง ที่หลังจากใช้สองอันแรกจนเจอปัญหาบางอย่างแล้วจะพบว่า Useful มาก คือ
- A หลังสุดของบรรทัด
- I หน้าสุด
และแบบสุดท้าย เป็นการแทรกบรรทัดว่างๆเข้าไป
- o แทรกบรรทัดใหม่ ใต้บรรทัดปัจจุบัน
- O แทรกบรรทัดใหม่ เหนือบรรทัดปัจจุบัน (So useful!)
ยกเลิก – Undo
กด u
อยาก Redo กด Ctrl+r
Autocomplete
- กด Ctrl + P เป็นการเติมจากคำก่อนหน้า
- กด Ctrl-x-f เป็นการเติมชื่อหรือพาธไปยังไฟล์ กด Ctrl-f ต่อจะวนรอบชื่อไฟล์ไปเรื่อยๆ
- กด Ctrl-x-o เป็น omni-completion อาจจะต้องลง plug-in เพิ่มสำหรับไฟล์บางแบบ (เช่น C++)
เพิ่มตัวบอกบรรทัด
:set ruler
Visual Mode
มีสามแบบ
- แบบเริ่มต้น - สิ้นสุด กด v
- แบบบรรทัด กด V
- แบบคอลัมน์ (Visual Block Mode) กด Ctrl + V
หลังจากกดแล้วจะใช้ cursor เลื่อนซ้ายขวาเพื่อ select ข้อความได้ ซึ่งหลังจาก select แล้วอาจจะทำอะไรได้หลายอย่าง เช่น
- ลบ กด d
- คัดลอก กด y (yank) เวลาจะเอาไปวางก็กด p หรือ P
- แทนที่ กด c แล้วพิมพ์คำตามเข้าไป แล้วกด enter (จะเห็นประโยชน์ตอนใช้ในแบบคอลัมน์)
- เพิ่ม tab ด้านหน้า (indent) กด >
ค้นหา
อันนี้ใช้บ่อยสุดๆ กด / แล้วพิมพ์ regular expression ของคำที่ต้องการค้น เช่น /search_key_word
นอกจากนี้ยังมีวิธีค้นหาแบบใช้ * คือเลื่อน cursor ไปเหนือคำที่ต้องการค้นหาแล้วกด * จะทำให้ VIM ทำ highlight ให้กับคำเดียวกันทุกคำในเอกสารนั้น เหมาะเวลาที่จะใช้เปลี่ยนชื่อตัวแปร หรือไล่โค้ด อะไรทำนองนั้น
แทนที่ – Replace
ใช้คำสั่ง :%s/before/after/gc
- ตัว c แปลว่า confirm คือให้ถามก่อนแทนที่
- ถ้าไม่มีตัว g มันจะแทนที่แค่บรรทัดละตัว
- before และ after เป็น regular expression ของตัวที่จะให้แทนก่อนและหลัง
- s เป็น substitute command
- % เป็นการบอกว่าแทนทั้งไฟล์ (จริงๆแล้วบอกเป็นเลขบรรทัดได้ แต่จะไม่ cover แล้วกัน)
จัดย่อหน้าให้สวยงาม
หลังจาก save ไฟล์ไปแล้ว VIM จะฉลาดพอที่จะทำ syntax highlight สวยๆให้ดู รวมถึงจัดย่อหน้าให้ไฟล์ให้ถูกต้องตามประเภทไฟล์ (เช่นไฟล์ .c .cpp)
กด gg=G
Tabs
จำเป็นเหมือนกันเวลาต้องเปิดสอง (หรือมากกว่า)ไฟล์คู่กัน จริงๆแล้ว VIM มันมี buffer ให้ใช้หลายๆอันด้วย แต่ผมว่า concept ของ Tab มันเข้าใจง่ายกว่านะ
- :tabnew path/to/filename เปิดไฟล์ หรือสร้างไฟล์ใหม่
- :tabc ปิด tab ปัจจุบัน
- gt และ gT ไปแทบต่อไป และก่อนหน้า
แก้ไขจาก command mode
การแก้ไขหลายอย่างทำจาก command mode ได้ ในที่นี้ผมรวม command แบบที่ต้องใช้ประกอบกับ motion ไว้ด้วย แต่ขอละไว้ เนื่องจากผมเองก็ไม่คล่อง –*- เอาเฉพาะอันที่ใช้กันบ่อยๆแล้วกัน
- r แก้หนึ่งตัวอักษร
- x ลบหนึ่งตัวอักษร
- dw ลบคำปัจจุบัน
- dd ลบทั้งบรรทัด
- dfg ลบจนถึงตัว g หรือ df” ลบจนถึงเครื่องหมายคำพูด
- d$ (ลองเดาดู)
- ggdG (ลองเดาดู)
ทำซ้ำคำสั่งสุดท้าย
กด .
ผมไม่ค่อยได้ใช้แฮะ
note: ตัวที่ผมใส่สีน้ำเงินไว้ แปลว่าสำคัญอย่างยิ่งนะครับ :)
สิ่งนึงที่ผมเห็นว่า tutorial vi มักจะสอนคือการใช้ตัวเลขนำหน้าคำสั่งเพื่อบ่งว่าจะให้ทำคำสั่งนั้นกี่ครั้ง ซึ่งผมว่า มันแทบไม่ได้ใช้เลยว่ะ … โดยเฉพาะใน VIM ที่มี visual mode
การมี editor พื้นฐานสำหรับแก้ไฟล์ หรือ อ่านไฟล์ ง่ายๆบน unix ซักตัว เป็นอะไรที่ผมแนะนำอย่างยิ่งครับ และผมแนะนำ VIM เหนือ emacs (ไม่รู้ editor มันจะมี game tower of hanoi ไปทำไม ใช้ก็ยาก :[ )
ไปดาวน์โหลด VIM
Tags: vim