Search

ในตอนที่ผ่านๆ มา เรารู้แล้วว่าสามารถค้นหาตัวอักษรในบรรทัดได้ด้วย [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 ถ้าต้องการใช้แทนอักขระทั่วไปให้ใส่ \ นำหน้า
  • +, ?, , {, }, (, ) ถือว่าเป็นอักขระทั่วไป ถ้าต้องการใช้แบบ 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)

Nattawut Phetmak

Jack of all Trades

blog comments powered by Disqus