Regular Expression on VIM

วันนี้ผมได้มีโอกาสได้ใช้ vim เป็นครั้งแรก หลังจากที่ใช้ vi มานาน แต่บอกตรงๆว่าก็ยังไม่เห็นความแตกต่างเท่าไหร่ แต่คงจะได้เห็นเร็วๆ นี้ มาวันนี้ ก็มีโอกาสได้รื้อฟื้น การใช้ vi ขั้นพื้นฐานต่างๆ ซึ่งบางอย่าง ผมเองก็เพิ่งรู้ เอ้อ..มันมีงี้ด้วยวุ้ย ก็เลยเอามาเล่าให้ฟัง อ่ะมาเริ่มกันเลยดีกว่า

ก่อนอื่น เราคงต้องมารู้กันก่อนว่า vi/vim เวลาเราเข้าไปใช้งาน มันจะมีอยู่ด้วยกัน 2 mode คือ

  1. command mode อันนี้เป็น default mode เข้าไปปุ๊ป ก็เจอ mode นี้ปั๊ป
  2. 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 อยู่