vi โดยย่อ
ปรับปรุงครั้งที่ 1 : 50-09-06
กลับมาช่วยกันซ่อมสร้างบทความกันใหม่นะครับ
สรุปคำสั่ง vi โดยย่อ จาก vi manual
การเลื่อนเคอร์เซอร์
- h, [<-] = ไปซ้าย
- l, [SPACEBAR] = ไปขวา
- k, - = ขี้นบน
- j, + = ลงล่าง
- b = ซ้าย 1 คำ
- w = ขวา 1 คำ
- 0, ^ = ต้นบรรทัด
- $ = ท้ายบรรทัด
- ( = ต้นประโยค
- ) = ท้ายประโยค
- { = ต้นย่อหน้า
- } = ท้ายย่อหน้า
- [RETURN] = บรรทัดต่อไป
- H = ต้นหน้า
- M = กลางหน้า
- L = ท้ายหน้า
- G = ท้ายไฟล์
- ^f = เลื่อนลง 1 หน้า
- ^b = เลื่อนขึ้น 1 หน้า
- ^d = เลื่อนลงครึ่งหน้า
- ^u = เลื่อนขึ้นครึ่งหน้า
ใช้ร่วมกับตัวเลข
การยกเลิกสถานะ
เนื่องจาก vi เป็นเอดิเตอร์แบบมีสถานะ จึงต้องมีการเข้าสู่สถานะต่าง ๆ และการออกจากสถานะนั้น ๆ
- [ESC], ^[ = ยกเลิกสถานะอื่นๆ เพื่อกลับสู่สถานะปกติ
สถานะการลบ
- x = ลบ 1 อักขระ
- dw = ลบตั้งแต่เคอร์เซอร์จนถึงต้นคำหน้า
- d$, D = ลบตั้งแต่เคอร์เซอร์จนถึงท้ายบรรทัด
- dL = ลบตั้งแต่บรรทัดปัจจุบันจนถึงท้ายจอภาพ
- dh = ลบ 1 อักขระก่อนถึงเคอร์เซอร์
- dd = ลบบรรทัดปัจจุบัน
- dG = ลบจากบรรทัดปัจจุบันจนถึงท้ายไฟล์
- d1G = ลบจากบรรทัดปัจจุบันจนถึงต้นไฟล์
- J = join เชื่อมบรรทัดถัดไปกับบรรทัดปัจจุบัน
ใช้ร่วมกับตัวเลข
d3w, 3dw = ลบ 3 คำ
5dd, 4dj = ลบ 5 บรรทัด จากบรรทัดปัจจุบัน
( 4dj=ลบบรรทัดปัจจุบัน และอีก 4 บรรทัดถัดไป )
4dk = ลบบรรทัดปัจจุบัน และอีก 4 บรรทัดก่อนหน้า
5Gdd = ลบบรรทัดที่ 5
การแทรกและแก้ไข
สถานะ : a=append=เติม, i=insert=แทรก, c=change=เปลี่ยน, o=open=เปิด, s=substitute=แทน, r=replace=แทนที่
- i = แทรกอักษรก่อนเคอร์เซอร์
- a = แทรกอักษรหลังเคอร์เซอร์
- I = แทรกอักษรต้นบรรทัด
- A = แทรกอักษรท้ายบรรทัด
- o = แทรกบรรทัดว่างต่อจากบรรทัดปัจจุบัน
- O = แทรกบรรทัดว่างก่อนหน้าบรรทัดปัจจุบัน
- c$, C = เปลี่ยน = ลบเนื้อความตั้งแต่เคอร์เซอร์ไปจนท้ายบรรทัด พร้อมทั้งเตรียมเพิ่มข้อความ
- cw = ลบ 1 คำ พร้อมทั้งเตรียมเพิ่มข้อความ
- cc = ลบทั้งบรรทัด พร้อมทั้งเตรียมเพิ่มข้อความ
- r = แทนที่ 1 อักขระใต้เคอร์เซอร์
- R = แทนที่อักขระตั้งแต่ใต้เคอร์เซอร์เป็นต้นไป จนกว่าจะออกจากสถานะนี้
- s = ลบ 1 อักขระ พร้อมทั้งเตรียมเพิ่มข้อความ
- S = ลบบรรทัดปัจจุบัน พร้อมทั้งเตรียมเพิ่มข้อความ
ใช้ร่วมกับตัวเลข
5inewtext = แทรก newtext 5 ครั้ง
5rg = แทนที่ด้วย g 5 ตัว
หมวดค้นหา
- / = ค้นหา
- ? = ค้นหาย้อนกลับ
- n, /[ENTER] = ค้นซ้ำ นับจากตำแหน่งปัจจุบันลงไป
- N, ?[ENTER] = ค้นซ้ำย้อนกลับ นับจากตำแหน่งปัจจุบันขึ้นไป
คัดลอก, แปะ, ยกเลิก, ทำซ้ำ
- yy, Y = คัดลอกบรรทัดปัจจุบัน
- yw = คัดลอกคำปัจจุบัน
- p = แปะลง หลังจากเคอร์เซอร์
- P = แปะลง ก่อนหน้าเคอร์เซอร์
* การลบ จะมีการเก็บสิ่งที่ลบไว้ในความจำ ดังนั้น ถ้ามีคำสั่งแปะตามมา สิ่งที่แปะลงมาก็คือสิ่งที่เพิ่งถูกลบไปนั่นเอง
- ddp = ลบบรรทัดปัจจุบัน และแปะลงทันที = การสลับบรรทัด
- xp = การสลับคำ
ใช้ร่วมกับตัวเลข
y4w = คัดลอก 4 คำ
ใช้ร่วมกับคำสั่งพิเศษ+ตัวเลข
คำสั่งพิเศษ
- :wq, :x, ZZ = จัดเก็บและออกจากโปรแกรม
- :w = จัดเก็บ
- :w FILENAME = จัดเก็บลงในไฟล์ FILENAME
- :w! = จัดเก็บ โดยละเลยข้อกำหนดของระบบ
- :w! FILENAME = เขียนทับ FILENAME โดยไม่เตือน
- :q = ออกจากโปรแกรม
- :q! = ออกจากโปรแกรม โดยไม่เตือน
- :! COMMAND = สั่งรัน COMMAND ของเชลล์
- :e FILENAME = เปิดไฟล์ FILENAME
- :e! FILENAME = เปิดไฟล์ FILENAME โดยไม่เตือนถึงการจัดเก็บไฟล์เก่า
- :r FILENAME = แทรกไฟล์ FILENAME ตรงตำแหน่งเคอร์เซอร์ปัจจุบัน
- :f, ^g = แสดงแถบสถานะ ตรงด่านล่างซ้ายมือ
- :h, :help = แสดงความช่วยเหลือ (ออกจากหมวดช่วยเหลือด้วย :q )
- :h COMMAND, :help COMMAND = แสดงความช่วยเหลือสำหรับคำสั่ง COMMAND
- :se COMMAND, :set COMMAND = ตั้งค่าคำสั่ง COMMAND
ค้นหาและแทนที่
ยืมโครงสร้างมาจากคำสั่ง sed (stream editor) ในระบบยูนิกซ์
- :1,$ s/old/new/g = ค้นหา old แทนที่ด้วย new เริ่มตั้งแต่ 1=ต้นไฟล์ จนถึง $=จบไฟล์ โดยกำหนดค่าการค้นเป็น g=global
เพิ่มเติม
ในการใช้ vi แบบใช้งานจริงจัง มักนิยมใช้ vim มากกว่า vi ซึ่งเก่ามากแล้ว (สำหรับเดเบียนคือแพกเกจ vim-full )
คำสั่งติดตั้งคือ
$ sudo aptitude install vim-full
และสั่งให้เป็น editor ปริยาย
$ sudo update-alternatives --config editor
เลือก /usr/bin/vim.full
ข้อเขียนเพิ่มเติมนี้จะอ้างอิงจากคู่มือของ vim เป็นหลักครับ
มีชุดคำสั่งพิเศษที่น่านำมาใช้ คือ
- :set tabstop=4 = กำหนดแท็บเป็น 4 ช่องว่าง
- :set expandtab = กำหนดให้ใช้ช่องว่างแทนแท็บ (จำนวนช่องว่างกำหนดจากคำสั่ง tabstop
- :set autoindent = กำหนดย่อหน้าอัตโนมัติ
- :set nu! = แสดงหมายเลขบรรทัด
- :syntax on = แสดงโครงสร้างไฟล์เป็นสี
ซึ่งเราสามารถนำมาเขียนเป็นไฟล์ทรัพยากรที่กำหนดเป็นค่าปริยายในการใช้งาน คือไฟล์ vimrc
ถ้าให้มีผลต่อผู้ใช้ทุกคนคือไฟล์ /etc/vim/vimrc หรือถ้าให้มีผลต่อเราคนเดียวก็คือไฟล์ ~/.vimrc
การเขียนคำสั่งในไฟล์ vimrc ก็เขียนเหมือนกับการใช้คำสั่งพิเศษทุกประการ เพียงแต่ไม่ต้องใส่ colon(:) เท่านั้น เช่น
$ vi ~/.vimrc
set tabstop=4
set expandtab
set autoindent
set smartindent
set nu!
syntax on
อ้างอิง
ปรับปรุงจาก debianclub.org: vi โดยย่อ
ปรับแต่ง vim ด้วย ~/.vimrc
ปรับแต่งไฟล์ ~/.vimrc ให้ตรงกับความถนัด (ถ้าให้มีผลทั้งระบบก็เป็น /etc/vim/vimrc.local)
$ vi ~/.vimrc
syntax on
ให้ syntax มีสี
set noautoindent
ปิดการเยื้องอัตโนมัติ เนื่องจากค่อนข้างรำคาญเวลาใช้งานหมวดคัดลอกแล้วแปะ
set tabstop=4
ตั้งค่า tab ให้กว้างเท่ากับ 4 อักขระ
set ruler
ให้มีตัวบอกตำแหน่ง แถวและสดมภ์ ทางล่างขวาของจอภาพ
set comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,f://
ยกเลิกหมายเหตุอัตโนมัติ
เอามาจาก
เกร็ด vim อีกรอบ
ปกติ vim จะตีความข้อมูลด้วยค่า locale ของเครื่อง
เช่นถ้าตั้งค่า locale เป็น utf-8 ด้วยคำสั่ง
# dpkg-reconfigure locales
แล้วตั้งเป็น th_TH.utf8 เวลาเราเรียกใช้ vim เราจะสามารถใช้งานภาษาไทยที่เข้ารหัสเป็น utf8 ได้โดยทันที
ปัญหาคือ ถ้าเรามีบางไดเรคทอรี่ที่เข้ารหัสข้อมูลด้วยรหัสอื่น เช่น tis620
เราจะไม่สามารถใช้งานภาษาไทยได้
วิธีแก้คือ
- สั่งงาน vim ด้วยตัวแปร env LANG เป็นค่า locale ที่ต้องการ
# LANG=th_TH.tis620 vim FILENAME
- ตั้งค่าตัวแปร encoding เป็น thai
:set enc=thai
- ตั้งค่าตัวแปร termencoding เป็น utf-8
:set termencoding=utf-8
ด้วยวิธีนี้ เราสามารถแก้ไขไฟล์ที่เข้ารหัสเป็น tis-620 ได้ครับ
หมายเหตุ
ถ้าท่านใดทราบวิธีทำให้เป็นอัตโนมัติผ่าน vimrc รบกวนช่วยเสริมด้วยนะครับ
( ผมหาพบที่ google cache แต่อ่านไม่ค่อยเข้าใจ )
เพิ่มเติม
ที่ codenone มีคุยเรื่อง vimrc ด้วย :)