Chanon BagIdea
5 min readFeb 17, 2017
  • (Vim) Text Editor เก่า แต่ เก๋า #2 : Installation and Basic keys

สารบัญ

ก่อนอื่นเลย ใครยังไม่รู้ว่า Vim คืออะไร ดีขนาดไหน ขอให้กลับไปอ่าน #1 ก่อนนะครับ แต่หากใครรู้แล้ว พร้อมจะติดตั้งก็ ลุย!!

//บทนี้จะยาวหน่อยนะครับ

ผมจะสอนวิธีลงทั้งฝั่ง Window และ ฝั่ง Linux นะครับ

คำเตือน : Vim นั้นนอกจากรูปแบบการเขียนที่ต้องใช้ Learning Curve สูงแล้ว การ Config + ลง Plugin ก็ยากไม่แพ้กัน เพราะฉะนั้นใครที่ไม่พร้อมจะลองเปิดใจ หรือ ใครที่ยังติดความสบายชนิดที่ว่า คลิกๆ ลง Plugin เสร็จแล้ว ละก็ผมแนะนำให้กลับไปใช้ตัวที่ท่านถนัดนะครับ เพราะ vim มันไม่สามารถคลิกๆแล้วลงเสร็จได้ มันต้อง อ่านข้อมูลการใช้ Plugin นั้นๆ

Window

  1. ไปที่เว็บ http://www.vim.org/download.php แล้วกด self-installing executable
  2. ทำการติดตั้งโลด คงไม่น่ามีอะไรมากนะครับ Next + Agree โลด ไม่มีอะไรแฝงมา เลือกที่เก็บให้เรียบร้อย
  3. หลังจากทำการติดตั้งแล้ว หน้า Desktop จะถูกสร้าง shortcute มา 3 ตัว ให้ทำการลบออกให้เหลือ gVim 8.0 ตัวเดียวก็ได้ครับ (gVim Easy คือ Text Editor ทั่วๆไป ใช้เม้าส์ผสมเหมือน Texteditor ตัวอื่นๆ ส่วน gVim Readonly คือไว้อ่านไฟล์อย่างเดียว แก้ไขไม่ได้ครับ)
ลบให้เหลือแค่ gVim 8.0 ก็ได้ครับ

สุดท้าย ก็ เสร็จแล้ววววววว (อย่าไปสนใจ Interface ตอนแรกครับ ที่มันดูไม่สวยไรพวกนี้ เดะเราจะมาปรับมันภายหลังในบทต่อๆไป)

Linux

เปิด Terminal ขึ้นมาแล้วพิม

สาย Debian, Ubuntu, Mint (ตะกูล apt-get)

sudo apt-get install vim

สาย Arch (ตะกูล pacman)

sudo pacman -S vim

โอเคหลังจากติดตั้งเสร็จแล้วเปิดมาก็จะเจอแบบรูปข้างบนนั้นเอง ก่อนผมจะพาไปแต่ง ไป Config หรือไปลง Plugin ผมจะพามารู้จัก Basic Vim กันก่อน อยากให้เปิด Vim ประกอบไปด้วยนะครับ ไม่งั้นจะไม่เห็นภาพ เอาหละ เริ่ม

Basic Vim

[Mode]

ถ้าใครที่เปิดมาแล้วลองพิมอะไรแล้วไม่ขึ้น ไม่ต้องตกใจ อ่านนี่ก่อนครับ

Vim จะมีอยู่ด้วยกัน 3 Mode นั้นก็คือ

  • Normal Mode : เอาไว้สั่งการต่างๆ //กด Esc เข้าสู่โหมดนี้
  • Insert Mode : เอาไว้เขียน
  • Visual Mode : เอาไว้ลากคลุม (อารมเหมือน กดเม้าส์ค้างแล้วลากคลุม)

Insert Mode

สาเหตุที่ผมเอา Insert Mode ขึ้นมาพูดก่อน เนื่องจากว่าผู้ที่ลง Vim ใหม่จะยังไม่มี โค้ด หรือ ยังไม่มีข้อความอะไรเลย ทำให้ไม่สามารถลองเล่นคำสั่ง Command ได้ ผมจึงจะอธิบายโหมดนี้ก่อน

วิธีการใช้สู้โหมดนี้จะมีด้วยกัน หลายวิธี โดยการกด a, A, i, I, o, O ใน Normal Mode ก็จะเข้าสู่ Insert Mode ได้เลย แล้วจะสามารถพิมพ์ข้อความได้ (อย่าพึ่งไปสนใจว่าทำไมของผมมี เลขบรรทัด นะครับ เดะผมจะสอนเปิดทีหลัง)

หากเข้าสู่โหมดนี้ สังเกตุที่มุมซ้ายล่างจะเป็นคำว่า INSERT
a = เข้าสู่ Insert Mode โดยจะนำ Cursor ไปต่อหลังตัวอักษรนั้น
i = เข้าสู่ Insert Mode โดยจะนำ Cursor ไปไว้ข้างหน้าตัวนั้น
A = เข้าสู่ Insert Mode โดยจะนำ Cursor ไปไว้หลังสุด
I = เข้าสู่ Insert Mode โดยจะนำ Cursor ไปไว้หน้าสุด
o = ขึ้นบรรทัดใหม่ด้านล่างไม่ว่า Cursor จะอยู่ตรงไหน พร้อมเปลี่ยนเข้าสู่ Insert Mode
O = ขึ้นบรรทัดใหม่ด้านบนไม่ว่า Cursor จะอยู่ตรงไหน พร้อมเปลี่ยนเข้าสู่ Insert Mode

นี่คือ Basic ของ Insert Mode ซึ่งดูเหมือนจะเยอะ จริงๆแล้วมันก็แค่ a, i, o เพียงแต่ การกด Shift (ตัวพิมใหญ่) จะให้ผลที่ใหญ่กว่า ฮ่าๆ เช่น a จะต่อหลัง 1 ตัว แต่ A จะต่อหลังสุด ซึ่งจะใช้บ่อยมากๆ ทั้ง a, i, o เลย

Normal Mode

เป็นโหมดไว้ควบคุมทุกอย่างเลย ซึ่งโหมดนี้แหละที่เป็น ทีเด็ดของ Vim ซึ่ง Text Editor ตัวอื่นไม่มี แต่ในบทนี้จะสอน คำสั่งพื้นฐานเท่านั้น เดะเทคนิคเทพๆจะนำไปในบทต่อๆไป

วิธีการเข้าสู่โหมดนี้ง่ายมากๆ เพียงแค่ กด Esc เอาหละ เรามาดูการควบคุมพื้นฐานการ

ก่อนเริ่ม มาตกลงกันก่อน ถ้าผมเขียน f→a จะหมายถึง กด f แล้วปล่อย แล้วค่อยตามด้วย a นะครับ ไม่ใช้กดพร้อมกัน ไม่แนะนำให้กดค้าง เพราะมันจะมีบางคำสั่งที่ต้องกด ตัวเดียวกันสองที

Movement

  • h = เคลื่อนที่ไปข้าง ซ้าย
  • j = เคลื่อนที่ไปข้าง ล่าง
  • k = เคลื่อนที่ไปข้าง บน
  • l = เคลื่อนที่ไปข้าง ขวา
  • w = กระโดดไปหาคำถัดไปโดย Cursor จะอยู่หน้าสุด โดยที่ ตัวอักขระพิเศษนับเป็นคำใหม่ เช่นพวก . , ( ) [ ] { }
  • W = กระโดดไปหาคำถัดไปโดย Cursor จะอยู่หน้าสุด โดยที่ ตัวอักขระพิเศษไม่นับเป็นคำใหม่
  • e = กระโดดไปหาคำถัดไปโดย Cursor จะอยู่หลังสุด โดยที่ ตัวอักขระพิเศษนับเป็นคำใหม่ เช่นพวก . , ( ) [ ] { }
  • E = กระโดดไปหาคำถัดไปโดย Cursor จะอยู่หลังสุด โดยที่ ตัวอักขระพิเศษไม่นับเป็นคำใหม่
  • b = กระโดดไปหาคำก่อนหน้าไปโดย Cursor จะอยู่หน้าสุด โดยที่ ตัวอักขระพิเศษนับเป็นคำใหม่ เช่นพวก . , ( ) [ ] { }
  • B = กระโดดไปหาคำก่อนหน้าไปโดย Cursor จะอยู่หน้าสุด โดยที่ ตัวอักขระพิเศษไม่นับเป็นคำใหม่
  • f →ตัวอักษร = เป็นการกระโดดไปข้างหน้า หาตัวนั้น ที่ใกล้ที่สุด
  • F →ตัวอักษร = เป็นการกระโดดไปข้างหลัง หาตัวนั้น ที่ใกล้ที่สุด

เอาหละมาดูภาพประกอบกัน

ซึ่งการ เคลื่อนที่จะใช้ h,j,k,l โดยที่

h = เคลื่อนที่ไปข้าง ซ้าย
j = เคลื่อนที่ไปข้าง ล่าง
k = เคลื่อนที่ไปข้าง บน
l = เคลื่อนที่ไปข้าง ขวา

เอาหละ ผมฟันธงเลยว่า 99.99% ผู้เริ่มต้นจะไม่ชินแบบนี้ ผมเข้าใจเพราะผมก็เป็นแรกๆ ฮ่าๆ ต้องใช้เวลาสักพักเลยทีเดียวกว่าจะชิน

ผมแนะนำว่า ให้เอานิ้วจ่อแค่ สองตัวพอครับคือ j (นิ้วชี้) k (นิ้วกลาง) ซึ่งจะเป็น ลงกับขึ้น เพราะว่าส่วนใหญ่เราจะไม่ค่อยได้ใช้ ซ้ายกับขวา เพราะเราจะใช้การกระโดดไปหาแทน ซึ่งหากจำเป็นต้องใช้ผมจะใช้ h (นิ้วยื่นไปกด) l (นิ้วนาง) ซึ่งไม่จำเป็นต้องทำตามผมก็ได้นะครับ แล้วแต่ความชิน อันนี้เป็นเพียงวิธีที่ผมใช้

เอาหละ มาดูการเคลื่อนแบบอื่นกันบ้าง เราจะใช้การ Jump ซึ่งประกอบไปด้วย w, W, e, E, b, B

w = กระโดดไปหาคำถัดไปโดย Cursor จะอยู่หน้าสุด โดยที่ ตัวอักขระพิเศษนับเป็นคำใหม่ เช่นพวก . , ( ) [ ] { }
W = กระโดดไปหาคำถัดไปโดย Cursor จะอยู่หน้าสุด โดยที่ ตัวอักขระพิเศษไม่นับเป็นคำใหม่
e = กระโดดไปหาคำถัดไปโดย Cursor จะอยู่หลังสุด โดยที่ ตัวอักขระพิเศษนับเป็นคำใหม่ เช่นพวก . , ( ) [ ] { }
E = กระโดดไปหาคำถัดไปโดย Cursor จะอยู่หลังสุด โดยที่ ตัวอักขระพิเศษไม่นับเป็นคำใหม่
b = กระโดดไปหาคำก่อนหน้าไปโดย Cursor จะอยู่หน้าสุด โดยที่ ตัวอักขระพิเศษนับเป็นคำใหม่ เช่นพวก . , ( ) [ ] { }
B = กระโดดไปหาคำก่อนหน้าไปโดย Cursor จะอยู่หน้าสุด โดยที่ ตัวอักขระพิเศษไม่นับเป็นคำใหม่

สรุปแล้ว w, e เป็นการกระโดดไปข้างหน้า ส่วน b เป็นการกระโดดไปข้างหลัง

นอกจากนี้ ยังมีการกระโดดอีกแบบ ซึ่งใช้กันบ่อยมากๆคือ f, F แล้ว ตามด้วยตัวอักษรที่อยากจะกระโดดไป (กด f แล้วปล่อย แล้วตามด้วยตัวต่อไป)

f → l = เป็นการกระโดดไปข้างหน้า หาตัว l ที่ใกล้ที่สุด
F → l = เป็นการกระโดดไปข้างหลัง หาตัว l ที่ใกล้ที่สุด

ซึ่งบางครั้ง ตัวที่เราต้องการจะหาดันมีซ้อนกัน เราสามารถกด f ตามด้วย ตัวอักษร แล้วกด ; จะทำการกระโดดไปหาตัวถัดๆไปให้เรื่อยๆ

จบแล้ววว Basic Movement

มาต่อกับด้วย Action Key กันนะครับ

Action Key

เรายังอยู่ใน Command Mode นะครับ ซึ่ง Action Key เหล่านี้จะเป็นการ Cut, Copy, Paste, Undo, Redo, Tab เป็นต้นซึ่งได้แก่

  • d → position = cut ตั้งแต่ตำแหน่งที่กด จนถึง position นั้นๆ
  • dd = cut ทั้งบรรทัด
  • y → position = copy ตั้งแต่ตำแหน่งที่กด จนถึง position นั้นๆ
  • yy = copy ทั้งบรรทัด
  • p = วางข้อความที่ cut หรือ copy ไว้ ต่อท้าย cursor
  • P = วางข้อความที่ cut หรือ copy ไว้ ก่อนหน้า cursor
  • u = undo
  • ctrl+r = redo //อันนี้กดพร้อมกัน
  • >> = Tab ไปข้างหน้า ทั้งบรรทัด
  • << = Tab ไปข้างหลัง ทั้งบรรทัด

ม๊ะ! มาดูภาพประกอบ ตัวอย่าง

dfr = ลบจนถึงตัวอักษร r (d + position) หมายความว่า กด d แล้วทีนี้ fr คือ กระโดดไปหา r ที่ใกล้ที่สุด เพราะฉะนั้นรวมกันจึงเป็น ลบตั้งแต่ e จนถึง r นั้นเอง
dw = ลบจนถึงคำถัดไป ซึ่ง d แล้วตามด้วย w ซึ่งเป็นการกระโดดไปหาคำถัดไปนั้นเอง รวมกันจึงเป็น ลบจนถึงคำถัดไป
dd = ลบทั้งบรรทัด

ซึ่งถ้าเข้าใจหลักการแล้วหละก็ จะสามารถผสม Key ได้อย่างคล่องตัวเลยทีเดียว เป็นอีก 1 ใน เสน่ห์ของ Vim คือการ ผสม Command ขึ้นมา

การใช้ y ก็เหมือนกับ d แต่จะเป็นจากการลบเป็นการ copy แทน

Visual Mode

เป็นการลากเม้าคลุม ซึ่งจะประกอบไปด้วย

  • v → position ไปเรื่อยๆ = ลากคลุมไปเรื่อยๆ
  • V = ลากคลุมแบบ Line
  • Ctrl + v = Block Selection ลากคลุมแบบ Block แต่ใน window ถ้า Ctrl + v กดไม่ได้ให้กด Ctrl + q แทน

พอลากคลุมแล้วสามารถกด

  • d = เพื่อ cut
  • y = เพื่อ copy
  • > = เพื่อ Tab
  • < = เพื่อ Shift Tab
v = ลากคลุม แล้วกด d เพื่อ cut
V = ลากคลุมแบบ line แล้วกด d เพื่อ cut
Ctrl + v or Ctrl + q(window) = ลากคลุมแบบ block แล้วกด d เพื่อ cut

สุดท้ายก่อนสิ่งสำคัญคือการ Save และ Quit

ให้พิม ใน Normal mode

  • :w! = บันทึก ( ! คือการบังคับทำ)
  • :q! = ออกจากโปรแกรม ( ! คือการบังคับทำ)
  • :wq! = บันทึกแล้วออกจากโปรแกรมเลย

โอเครรรจบสะที ในรูปอาจจะเห็นการคลุมไม่ค่อยชัดนะครับ พยายามมองดีๆ แต่เดี๋ยวเราปรับแต่งมันได้ ให้มองได้ชัดภายในบท ต่อไปนะครับ

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

แล้วเจอกันบทต่อไปครับผม

Part 1Part 3