วันนี้ผมได้มีโอกาสได้ใช้ vim เป็นครั้งแรก หลังจากที่ใช้ vi มานาน แต่บอกตรงๆว่าก็ยังไม่เห็นความแตกต่างเท่าไหร่ แต่คงจะได้เห็นเร็วๆ นี้ มาวันนี้ ก็มีโอกาสได้รื้อฟื้น การใช้ vi ขั้นพื้นฐานต่างๆ ซึ่งบางอย่าง ผมเองก็เพิ่งรู้ เอ้อ..มันมีงี้ด้วยวุ้ย ก็เลยเอามาเล่าให้ฟัง อ่ะมาเริ่มกันเลยดีกว่า
ก่อนอื่น เราคงต้องมารู้กันก่อนว่า vi/vim เวลาเราเข้าไปใช้งาน มันจะมีอยู่ด้วยกัน 2 mode คือ
- command mode อันนี้เป็น default mode เข้าไปปุ๊ป ก็เจอ mode นี้ปั๊ป
- insert mode อันนี้ก็เอาไว้ พิมพ์อย่างเดียว
ในการ สลับการใช้งานระหว่าง cmd | ins mode นั้นก็สามารถสลับได้โดยใช้ ปุ่ม esc
เรามาว่ากันที่ command mode กันดีกว่าครับ เพราะ insert mode คงไม่มีอะไรมาก..
- i (insert) : เข้าสู่ mode insert
- a (append) : เข้าสู่ mode insert แต่อยู่ท้าย ณ ตำแหน่งที่ cursor อยู่
- x (extirpate) : ลบตัว อักษร ณ ตำแหน่งที่ cursor อยู่
- w (word) : ไปคำคำแรก ของบรรทัดนั้น ถ้ากดซ้ำก็จะเลื่อนไปยัง คำถัดไป โดยในการแบ่งคำแต่ละคำนั้น จะใช้ white space หรือ punctuation ในการแบ่ง เช่น aaa bbb@ccc อันนี้จะถือว่าเป็น 3 คำ คือ aaa bbb และ ccc
- W (big word) : เหมือน w เพียงแต่จะ แบ่งโดยใช้ white space เพียงอย่างเดียว
- b (back) : กระโดดไปคำคำหน้า ณ ที่ cursor อยู่ จะใช้ white space หรือ punctuation ในการแบ่ง
- B (big back) : กระโดดไปคำคำหน้า ณ ที่ cursor อยู่ จะใช้ white space ในการแบ่งคำเพียงเท่านั้น
- G (go) : ไปบรรทัดสุดท้าย
- 1G (big go) : ไปบรรทัดที่ 1 อันนี้เราสามารถ ใช้เป็น 3G , 5G เพื่อกระโดดไปที่ บรรทัดที่ 3 และ 5 ตามลำดับ
- ^ : ไปที่ต้นบรรทัด ณ ที่ cursor อยู่
- $ : ไปที่ท้ายบรรทัด ณ ที่ cursor อยู
- yy p : ทำการ copy บรรทัด ณ cursor อยู่ทั้งบรรทัด แล้วก็วาง ที่บรรทัดถัดไป ตรงนี้เราสามารถประยุกต์ใช้การ copy หลายบรรทัด ได้โดย 6yy p ก็คือ copy บรรทัด ณ ที่ cursor อยู่ แล้วก็นับลงไปอีก 6 บรรทัด แล้วก็วางต่อไป
- dd : delete 1 บรรทัด ณ ที่ cursor อยู่
คราวนี้เราลองเอา command ต่างๆเหล่านี้มา implement ใช้ครับ เช่น
- 3x : ลบตัวอักษร 3 ตัว นับตั้งแต่ตัวที่ cursor อยู่
- dw : ลบคำคำ นั้น ณ ที่ cursor อยู่ w เงื่อนไขก็เหมือนกับ ข้างบนครับ
- 3yl p : ทำการ copy 3 ตัวอักษร นับตั้งแต่ ตัวที่ cursor อยู่แล้วก็วางไว้หลังตัว อักษร ณ ที่ cursor อยู่เช่นกัน เช่น abcdefg ทำการกด 3yl p ก็จะได้ เป็น abccdedefg แต่ถ้าเป็น P ก็จะเอาวางไว้ข้างหน้าครับ จะได้เป็น abcdecdeefg (l คือ letter)
- yw P : copy คำ ณ ที่ cursor อยู่แล้วก็วาง คำนั้นไว้ข้างหน้า
- yw p : copy คำ ณ ที่ cursor อยู่แล้วก็วาง คำนั้นไว้ข้างหลัง
- o : ขึ้นบรรทัดใหม่ ทัดจากบรรทัดที่ cursor อยู่
- O : ขึ้นบรรทัดใหม่ บนบรรทัดที่ cursor อยู่
- J (join) : เอาบรรทัดถัดไป ขึ้นมาต่อบรรทัด ณ ที่ cursor อยู่
- r (replace) : ทำการเปลี่ยนตัวอักษรได้เลย ณ ตำแหน่งที่ cursor อยู่