2010-10-13 38 views
22

Tôi muốn sử dụng nội dung của sổ đăng ký làm mẫu tìm kiếm trong Vim.Sử dụng giá trị đăng ký làm mẫu tìm kiếm

Tôi muốn thực hiện điều này từ dòng lệnh vì vậy tôi không thể sử dụng cú pháp <c-r> vì điều đó giả định một phiên tương tác.

Có thể sử dụng một thanh ghi như một thay mẫu, như thế này

:%s/foo/\[email protected]/g 

Tuy nhiên sử dụng cú pháp này như một mẫu tìm kiếm không hoạt động

:%s/\[email protected]/foo/g 

nó ra

E64: \= follows nothing 
E476: Invalid command 
+0

Nhưng hầu hết mọi người đến đây có lẽ đang tìm kiếm ' ': [câu hỏi có liên quan + câu trả lời] (https://stackoverflow.com/q/101258/1143274). –

Trả lời

11

Tôi không nghĩ rằng nó có thể trực tiếp, nhưng bạn có thể sử dụng :exe để đạt được điều này:

:exe '%s/' . @a . '/foo/g' 
+0

Tôi thích câu trả lời này vì tôi có thể chuyển nhiều biến vào tập lệnh. Ví dụ, tôi cần xác định phạm vi tìm kiếm bằng hai biến tôi có thể làm điều đó bằng cách sử dụng: ': exe '/ ^'. @a. '/,/^'. @b. '/ s /'. @c. '/'. @d. '/ g''. – lerner

11

Trong một mô hình (không phải là phần thay thế), \= viết tắt của “0 hoặc 1 lần” (đó là một từ đồng nghĩa cho \? nên được ưu tiên hơn \? vì sau có nghĩa là một chữ cái ? bằng chữ khi nhìn ngược.

Xem :help /\=help pattern để biết thêm chi tiết.

Tại sao không:

let @/[email protected] 
%s//foo/g 
+0

Tôi chấp nhận câu trả lời của Al vì nó cũng hoạt động cho các lệnh khác như '' vimgrep'' (mà tôi cũng đang tìm cách kiểm soát). – pkit

+1

Không sao. Đừng xin lỗi khi chọn câu trả lời, chúng tôi biết bạn chỉ có thể chọn một câu trả lời. – Benoit

10

Bạn có thể làm điều này với / đăng ký

này không giải quyết được vấn đề chung, nhưng nó xuất hiện với tôi rằng / đăng ký là đặc biệt trong vấn đề này: nếu bạn để trống cụm từ tìm kiếm, cụm từ đó sẽ sử dụng bất kỳ nội dung nào trong sổ đăng ký /; cụ thể là, bất cứ điều gì bạn đã tìm kiếm lần cuối.

Vì vậy, nếu bạn muốn thay thế foo với các nội dung của @a, bạn có thể làm điều này:

  1. Tìm kiếm foo
  2. %s//\[email protected]/g (hoặc làm nổi bật một số văn bản và bắt đầu nhập :s chỉ thay thế trong phạm vi đó)
Các vấn đề liên quan