vim: sử dụng chuỗi từ tìm kiếm trong lệnh thay thế


16

Tôi thường sử dụng /lệnh tìm kiếm vim để xác minh các biểu thức thông thường của mình (chỉ để xem những gì nó phù hợp). Sau đó, tôi thường sử dụng :%slệnh thay thế, trong đó tôi sử dụng biểu thức chính đó từ tìm kiếm dưới dạng một chuỗi cần thay thế, ví dụ trước tiên tôi tìm chuỗi đó:

/TP-\(\d\{5\}\)-DD-\d\{3\}

Nó phù hợp với chính xác những gì tôi muốn, vì vậy tôi thay thế:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g

Nhưng tôi phải viết lại toàn bộ regrec ở đây. Thông thường, regrec đó dài hơn nhiều, đó là lý do tại sao tôi đang tìm giải pháp:

Có bất kỳ lối tắt hoặc tập lệnh vim hiện có để dán mẫu tìm kiếm đó trực tiếp vào lệnh thay thế không?

Tôi sử dụng vim trong thiết bị đầu cuối (không có gvim).

Câu trả lời:


20

Nói chung, một biểu thức chính quy trống có nghĩa là sử dụng biểu thức chính quy đã nhập trước đó, vì vậy :%s//\1/gnên làm những gì bạn muốn.


Ái chà, thật dễ! Chính xác những gì tôi cần, cảm ơn.
kars7e

10
Ngoài ra, nếu bạn muốn xác minh hoặc sửa đổi mẫu được sử dụng cuối cùng, bạn có thể sử dụng Control-r sau đó /để chèn trực tiếp nội dung của thanh ghi mẫu tìm kiếm ( /) vào một dòng lệnh được gõ một phần (ví dụ ngay sau :%s/).
Chris Johnsen

đó là gợi ý rất hữu ích là tốt. Cảm ơn @Chris! +1
kars7e

Nếu tôi muốn theo dõi "\ 1" với số như nói 23 thì sao? Làm cách nào để tránh nó bị hiểu là "\ 123"?
Champ

@Champ Vì các tài liệu tham khảo trở lại chỉ đi lên \9, không có sự mơ hồ.
Kusalananda

4

Một cách khác để xem các tìm kiếm regex trong quá khứ cũng như các lệnh Ex và thay đổi chúng là chỉnh sửa các lệnh này trong chế độ bình thường. Từ Chế độ này, bạn sẽ có tất cả các quyền hạn vim của mình bao gồm sao chép và dán.

  • Tìm kiếm: thay vì ?hoặc /để tìm kiếm, hãy thử q/hoặcq?
  • cho các lệnh Ex, thay vì :thửq:
  • để thoát khỏi chế độ này, hãy sử dụng CtrlC

Để đọc thêm xem :help q:.

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.