Tôi có thể sử dụng biểu thức chính quy perl trong dòng lệnh vim không?


27

Tôi muốn sử dụng các biểu thức chính quy perl trên dòng lệnh vim. Ví dụ: để viết hoa các từ trên dòng hiện tại, bạn có thể nhập:

:s/(\w+)/\u$1/g

Từ : trợ giúp mô hình perl ... Các biểu thức của Vim tương tự như của Perl, về những gì bạn có thể làm. Sự khác biệt giữa chúng chủ yếu chỉ là ký hiệu uhhmm ... điều đó giống như nói tiếng Trung Quốc giống với tiếng Hy Lạp, về những gì bạn có thể giao tiếp. Sự khác biệt chủ yếu chỉ là ký hiệu. regex không có gì ngoài ký hiệu! Sự khác biệt là khó chịu nếu một ký hiệu ít quen thuộc hơn một ký hiệu khác. Đó là lý do tại sao mọi người hỏi về perl ở nơi đầu tiên!
dreftymac

Câu trả lời:


19

Bạn có thể lọc bất kỳ dòng hoặc phạm vi của dòng thông qua một lệnh bên ngoài trong vim, bằng cách sử dụng !. Ví dụ, bạn có thể làm:

:.!perl -pe "s/(\w+)/\u\1/g"

Nó sẽ lọc dòng hiện tại thông qua lệnh perl đó. (Ở đây :để vào chế độ dòng lệnh và .theo sau có nghĩa là dòng hiện tại; bạn cũng có thể chỉ định một phạm vi dòng hoặc %cho toàn bộ tệp, v.v.)

Nếu bạn muốn sử dụng các mẫu thay thế được tích hợp sẵn của vim, cách gần nhất bạn sẽ đến là sử dụng tùy chọn "rất kỳ diệu" của vim, \ v, như vậy:

:s/\v(\w+)/\u\1/g

xem :help pattern:help substituteđể biết thêm chi tiết Tôi không nghĩ "rất ma thuật" khá giống với mô hình của perl, nhưng lại rất gần gũi. Dù sao, bạn luôn có thể sử dụng perl nếu bạn cảm thấy thoải mái hơn với nó, như trên.


1
Ngoài ra, với phép thuật rất cao, bạn không cần phải ghi nhớ (được đối xử đặc biệt trong khi {không phải là: "tất cả các ký tự ASCII ngoại trừ '0' - '9', 'a' - 'z', 'A' - 'Z' và '_' có một ý nghĩa đặc biệt. " cảm ơn!
Ayrat

10

Không, bạn không thể sử dụng biểu thức chính quy Perl theo cách đó. Để được trợ giúp trong việc tìm hiểu các tương đương Vim cho các thành phần biểu thức chính quy Perl, xem

:help perl-patterns

Tuy nhiên, bạn có thể sử dụng Perl như một bộ lọc bên ngoài như được giải thích bởi frabjous. Bạn cũng có thể thực thi các lệnh Perl trong Vim bằng giao diện Perl, nếu Vim của bạn được biên dịch với +perltính năng này. Xem

:help if_perl.txt

2
+1, :help perl-patternsđã giải quyết một điều mà trước đây tôi ghét về vim
Mark K Cowan

8

Bạn cũng có thể dùng:

/\v"your regex"

thay vì:

/"your regex"

Đây là câu trả lời tôi đang tìm kiếm!
alextercete

Bạn cũng có thể tự giúp mình bằng cách thêm nnoremap / /\vvnoremap / /\vvào .vimrc để khi bạn nhập /nó chỉ hoạt động.
mattmc3


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.