Bagaimana cara mencari salah satu dari dua string serupa di Vim?

29

Di Vim, jika saya ingin melakukan pencarian yang cocok dengan "planA" atau "planB", saya tahu saya bisa melakukan ini:

/plan[AB]

Ini berfungsi karena regex memungkinkan untuk A atau B sebagai set karakternya.

Tetapi bagaimana saya bisa menentukan satu dari dua string lengkap? Misalnya, "planetAwesome" atau "planetTerrible"?

Ini akan cocok dengan keduanya, bersama dengan "planetAnythingHereAsLongAsItsJustLetters":

planet\([a-zA-Z]*\)

Bagaimana saya bisa mencocokkan hanya string yang cocok dengan "planetAwesome" atau "planetTerrible"?

Nathan Long
sumber
Sebenarnya, tanda kurung membuat kelas karakter. plan[ABC]cocok planA,, planBdan planCjuga sama baiknya.
Christopher Bottoms
@ Molekul - benar, terima kasih. Saya memperbarui pertanyaan.
Nathan Long

Jawaban:

43
/planet\(Awesome\|Terrible\)

Untuk melihat dokumentasi yang relevan, terbitkan :help /, dan gulir ke bawah ke bagian “Definisi pola”.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Ah! Saya tidak keluar dari tanda kurung ketika saya mencoba ini. Menarik - saya pikir saya hanya harus melarikan diri dari karakter literal.
Nathan Long
1
@Nathan: Berbagai mesin regex memiliki aturan berbeda tentang karakter mana yang harus diloloskan untuk membuatnya spesial vs harus diloloskan untuk menjadikannya literal (mis. POSIX BRE vs. ERE). Anda dapat men-tweak persyaratan melarikan diri di Vim pada basis per-pola dengan memasukkan salah satu lolos khusus: \m, \M, \v, atau\V . Ada juga 'magic'pilihan , tetapi biasanya yang terbaik adalah membiarkannya sendiri, karena memiliki efek global (kecuali diganti oleh salah satu flag di atas).
Chris Johnsen
1
Menggunakan sangat ajaib sepertinya:/\vplanet(Awesome|Terrible)
SergioAraujo
4

Untuk menambah jawaban Gilles, Anda mungkin ingin menambahkan beberapa hal di sana:

/\<planet\(Awesome\|Terrible\)\>

\<menandai awal sebuah 'kata' (dasarnya alfanumerik)
\>menandai akhir dari 'kata' (dasarnya alfanumerik)

pindahkan
sumber