VIM melihat persamaan ekspresi reguler saat Anda mengetik

8

Jika saya mengetik /regexmaka kursor sementara melompat ke pertandingan pertama dan semua pertandingan disorot. Pembaruan ini saat saya mengetik. Apakah mungkin untuk mendapatkan perilaku ini saat saya bersiap untuk melakukan substitusi? Misalnya, ketika saya mengerjakan ekspresi reguler yang rumit :%s/\<regex\>/, saya ingin tahu apa yang cocok sebelum saya menarik pelatuk dan mengubah segalanya. Ada cara untuk melakukannya?

John Berryman
sumber
Akan lebih baik jika itu akan bekerja dengan cara kerjanya dengan pencarian: menyoroti apa yang saat ini cocok. Apakah Anda menemukan cara terbaik untuk melakukannya?
Anton Daneyko

Jawaban:

12

Ketik pencarian Anda menggunakan / (atau ? ) Untuk memulai, yang akan memungkinkan Anda untuk mengubah regex Anda (karena Anda menggunakan pencarian)

Setelah semuanya bagus, Anda dapat menggunakan pola pencarian sebelumnya (yang baru saja Anda gunakan) dalam perintah pengganti dengan menggunakan dua pemisah untuk item 'pencarian':

/elephant                       " find the next elephant
:%s//rhino/gc                   " make then all rhinos!

Tentu saja, Anda dapat menggunakan pilihan dan rentang, seperti biasa.

:1,15s,,cougar,g
:'<,'>s::tiger:
lornix
sumber
+1 untuk mengajari sayas//
Steven Lu
2

Salah satu opsi adalah Anda dapat memiliki bendera konfirmasi c.

:%s;regex;replacement;gc

:h s_flags:

[c] Confirm each substitution.  Vim highlights the matching string.  You can type:              
        'y'     to substitute this match
        'l'     to substitute this match and then quit ("last")
        'n'     to skip this match
        <Esc>   to quit substituting
        'a'     to substitute this and all remaining matches
        'q'     to quit substituting

Anda juga bisa mencoba grep perintah untuk melihat output yang difilter dan file asli yang disorot.

:g/re/p atau :g/re/

Pangeran John Wesley
sumber
Saya suka, tetapi masih mengharuskan saya untuk melengkapi ekspresi reguler sebelum saya melihat bagaimana jika ada yang cocok.
John Berryman
0

Nah, cara singkat untuk melihat apa yang akan cocok dengan ekspresi reguler Anda adalah melakukan pencarian dengan /menggunakan regex yang Anda inginkan. Ini akan melompat ke pertandingan pertama dan menandainya saat Anda mengetiknya. Cobalah - vimtidak akan mengecewakan Anda.


sumber
Benar, meskipun itu yang saya nyatakan dalam pertanyaan. Saya berharap ini akan diperbarui karena saya sedang bersiap-siap untuk menggantikan. Dengan solusi Anda, saya harus mencoba regex dan kemudian menyalinnya (bagaimana?) Dan kemudian menggunakannya sebagai pengganti. Itu tidak cukup baik.
John Berryman