Có một mô hình như ^ trong vim?


20

Trong chế độ bình thường của Vim, 0lệnh sẽ đưa bạn đến cột đầu tiên trên dòng và ^đưa bạn đến điểm bắt đầu hợp lý của dòng (ví dụ: ký tự không phải khoảng trắng đầu tiên). Trong thế giới regex, ^phù hợp với ký tự đầu tiên trên dòng, khoảng trắng hoặc không. Vim có mẫu hoạt động giống như lệnh '^' của nó không - khớp với bắt đầu logic của một dòng?


Tôi nghĩ ^ trong một regex thường khớp với đầu dòng, không phải ký tự đầu tiên. ^. sẽ khớp với bắt đầu và sau đó là ký tự đầu tiên, không phải bắt đầu và sau đó là ký tự thứ hai.
bdsl

Câu trả lời:


17

Không có phím tắt để khớp với ký tự không phải khoảng trắng đầu tiên trên một dòng, bạn phải tự xây dựng mô hình, như:

^\s*restofpattern

Nếu bạn không muốn bao gồm khoảng trắng trong trận đấu của mình, bạn phải sử dụng xác nhận có độ rộng bằng không, như:

\(^\s*\)\@<=restofpattern

Không chính xác đẹp, nhưng ít nhất nó cũng hoàn thành công việc.


6

Để khớp với ký tự không phải khoảng trắng đầu tiên , bạn chỉ cần sử dụng \Snhư bạn thường làm.


Nếu bạn sử dụng ^trong regex trong vim, nó sẽ khớp với bắt đầu thực tế của dòng, ngay cả khi nó chứa khoảng trắng.

Chẳng hạn, dòng này bắt đầu bằng khoảng trắng:

 <- there's a space there you can't see :)

Lệnh vim này sẽ loại bỏ không gian hàng đầu:

:%s/^ //

dẫn đến những điều sau đây:

<- there's a space there you can't see :)

Vì vậy, regex sẽ hoạt động như bạn mong đợi, ngay cả khi lệnh không.


Tôi đoán bạn sẽ giải thích downvote. Câu trả lời này, theo như tôi biết, là chính xác.
Michael Hampton

1
Tôi đã không downvote, nhưng bằng cách làm rõ: Tôi đã tự hỏi liệu Vim có một toán tử nào khớp với ký tự không phải khoảng trắng đầu tiên của dòng không. Các ^nhà điều hành (giống như tất cả triển khai regex lành mạnh), sẽ phù hợp với ký tự đầu tiên ngay cả khi nó là khoảng trắng.
Michael

Chà, làm thế nào bạn mong đợi để làm điều đó bình thường? Thông thường trong một regex, bạn sẽ sử dụng một cái gì đó giống như \Sđể khớp với ký tự không phải khoảng trắng đầu tiên.
Michael Hampton

2
\Ssẽ phù hợp với bất kỳ nhân vật không phải khoảng trắng. Nói cách khác, tôi tự hỏi liệu Vim có tốc ký không chiều rộng cho việc này không : ^\W*\S.
Michael

1
Không có động cơ mà tôi biết là cung cấp chức năng đó, nhưng sau đó một lần nữa - khi nào bạn sẽ quan tâm đến một động cơ đa năng? Vim không phải là một công cụ regex mục đích chung. Nó là một trình soạn thảo có một công cụ regex, vì vậy tôi đã tự hỏi liệu nó có bất kỳ cấu trúc đặc biệt nào cho một cái gì đó chỉ quan trọng trong một trình soạn thảo không.
Michael
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.