Làm cách nào để tìm kiếm một trong hai chuỗi tương tự trong Vim?


29

Trong Vim, nếu tôi muốn thực hiện tìm kiếm khớp với "planA" hoặc "planB", tôi biết rằng tôi có thể làm điều này:

/plan[AB]

Điều này hoạt động vì regex cho phép A hoặc B là tập hợp các ký tự của nó.

Nhưng làm thế nào tôi có thể chỉ định một trong hai chuỗi hoàn chỉnh? Ví dụ: "hành tinhAwgie" hoặc "hành tinh khủng khiếp"?

Điều này sẽ phù hợp với cả hai điều này, cùng với "hành tinhAnythingHereAsLongAsItsJustLetters":

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

Làm cách nào tôi chỉ có thể khớp chính xác các chuỗi khớp với "hành tinhAwgie" hoặc "hành tinh khủng khiếp"?


Trên thực tế, dấu ngoặc tạo ra một lớp ký tự. plan[ABC]phù hợp planA, planBplanCtốt như nhau.
Christopher Bottoms

@molsecules - đúng rồi, cảm ơn. Tôi cập nhật câu hỏi.
Nathan Long

Câu trả lời:


43
/planet\(Awesome\|Terrible\)

Để xem các tài liệu liên quan, phát hành :help /và cuộn xuống phần Phần định nghĩa của mẫu.


1
À! Tôi đã không thoát khỏi dấu ngoặc đơn khi tôi thử điều này. Thú vị - Tôi nghĩ rằng tôi chỉ phải thoát khỏi các nhân vật theo nghĩa đen.
Nathan Long

1
@Nathan: Các công cụ regex khác nhau có các quy tắc khác nhau về các ký tự phải được thoát để làm cho chúng đặc biệt so với phải được thoát để biến chúng thành nghĩa đen (ví dụ POSIX BRE so với ERE). Bạn có thể tinh chỉnh các yêu cầu thoát trong Vim trên một cơ sở cho mỗi mẫu bằng cách bao gồm một trong những thoát đặc biệt: \m, \M, \v, hoặc\V . Ngoài ra còn có 'magic'tùy chọn , nhưng tốt nhất là để nó một mình, vì nó có hiệu lực toàn cầu (trừ khi bị ghi đè bởi một trong các cờ trên).
Chris Johnsen

1
Sử dụng phép thuật rất giống như thế này:/\vplanet(Awesome|Terrible)
SergioAraujo

4

Để thêm vào câu trả lời của Gilles, bạn có thể muốn thêm một vài điều trong đó:

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

\<đánh dấu sự bắt đầu của một "từ" (về cơ bản là chữ và số)
\>đánh dấu sự kết thúc của một "từ" (về cơ bản là chữ số)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.