Nattawut Phetmak
Jack of all Trades
ในตอนที่ผ่านๆ มา เรารู้แล้วว่าสามารถค้นหาตัวอักษรในบรรทัดได้ด้วย [f]
และ [t]
ส่วนการค้นหาข้อความทั้งเอกสาร สามารถทำได้โดยเอา cursor ไปวางไว้ที่คำที่ต้องการค้นหา แล้วกด [*]
หรือ [#]
good morning, good after noon, good evening, and good night.
^ cursor here, press [*] or [#]
good morning, good after noon, good evening, and good night.
^--- ^--- ^--- ^---
สำหรับการค้นหาโดยคำที่ต้องการ จะใช้คำสั่งใน last line mode คือ /text [Enter]
ครับ
ford: what do you looking for? john: a doughnut.
/look [Enter]
ford: what do you looking for? john: a doughnut.
^---
การเลื่อนไปหาคำถัดไปทำได้โดยปุ่ม [n]
ส่วนค้นหาย้อนกลับก็ใช้ [N]
สิ่งที่ต้องระวังคือ ข้อความที่ค้นหาจะเป็น regex ที่ดัดแปลง escape sequence บางตัว ดังนี้
\
นำหน้า+, ?, | , {, }, (, ) ถือว่าเป็นอักขระทั่วไป ถ้าต้องการใช้แบบ regex ให้ใส่ \ นำหน้า |
ford: what do you looking for? john: a doughnut.
/for? [Enter]
ford: what do you looking for? john: a doughnut.
^---
/for\? [Enter]
ford: what do you looking for? john: a doughnut.
^--- ^---
การ wrap ข้อความที่จะค้นหาใช้ \<
และ \>
(ซึ่งจะเหมือนกับการกด [*]
บนข้อความที่ต้องการค้นหาครับ)
ford: what do you looking for? john: a doughnut.
/do [Enter]
ford: what do you looking for? john: a doughnut.
^- ^-
/\<do\> [Enter]
ford: what do you looking for? john: a doughnut.
^-
นอกจาก /text [Enter]
แล้ว ยังมี ?text [Enter]
อีก ซึ่งจะหาในทิศทางกลับกันนั่นเอง
การ replace คำจะใช้คำสั่ง last line mode คือ :s/find/replace/option
เช่น
Fool ate food while playing football.
:s/foo/bar [Enter]
Fool ate bard while playing football.
---
(change only first matched item)
:s/foo/bar/g [Enter]
Fool ate bard while playing bartball.
--- ---
(change all matched item)
:s/foo/bar/gc [Enter]
Fool ate food while playing football.
--- ---
(ask for confirmation each matched item)
:s/foo/bar/gi [Enter]
barl ate bard while playing bartball.
--- --- ---
(set case insensitive)
แต่ทั้งหมดนี้ จะเป็นการกระทำบนบรรทัดที่เราอยู่เพียงบรรทัดเดียวเท่านั้น การสั่งให้ทำกับส่วนต่างๆ ของเอกสารต้องเพิ่ม line modifier เข้าไปด้วย คือ
:%s/foo/bar/g [Enter]
(all line in document)
:5,10s/foo/bar/g [Enter]
(line 5 to 10)
:.,+3s/foo/bar/g [Enter]
(from current line to next 3 line)