Jul 1 2009

VIM แบบพื้นฐานมาก

Category: Toolsm3rLinEz @ 00:47

VIM

คงเคยรู้จัก 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 ซักอัน)

การเคลื่อนในระดับคำ

  • w ไปคำต่อไป
  • b คำก่อนหน้า

ระดับบรรทัด คล้ายๆกับ 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:

Comments

1.
นับ นับ says:

ctrl-r -> re-do
j -> join 2 บรรทัด

2.
กร กร says:

ขยันชิบ

3.
Pong Pong says:

Cool! I will try it Laughing

4.
chakrit chakrit says:

โอ้วส์ มีสาวก VIM เพิ่มอีกหนึ่งคน อิอิ

5.
teerapap teerapap says:

ลืมคำสั่ง . (dot) => repeat last command  ไปรึเปล่าครับ ผมว่ามันพื้นฐาน และใช้บ่อยเหมือนกัน

เรื่องตัวเลขนำหน้าคำสั่งนี่  ถ้าใช้ผสมกับ macro จะเทพมาก
ชอบใช้เวลาทำอะไร ซ้ำๆ ทุกแถว ทั้งไฟล์

6.
m3rlinez m3rlinez says:

ฮะๆ ขอบคุณทุกคอมเม็นต์ครับ ผมเติมอันที่น่าจะใช้บ่อยเพิ่มลงไปแล้วนะ

@teerapap ถ้าใช้กับมาโครจะเทพมาก -> ดังนั้นไม่ควรเอาเรื่องพวกนี้มาใส่ใน tutorial พื้นฐานถูกไม๊ครับ .. แต่เห็นใส่กันทุกบทความที่เคยอ่านเลย

Comments are closed