2010-11-02 42 views
13

Tôi cảm thấy thoải mái hơn với Vim sau một vài tháng. NHƯNG, chỉ có một tính năng đơn giản mà tôi không thể nhận được bất kỳ câu trả lời nào từ web. Đó là "Tìm kiếm và thay thế kết quả". Vấn đề là tôi biết:Vim - Tìm kiếm và thay thế kết quả

:/từ khóa để tìm kiếm, và nhấn Enter "từ khóa" sẽ được đánh dấu (tất nhiên với bộ hlsearch) n, hoặc N để điều hướng

:% s/từ khóa/new_keyword/g để thay thế tất cả các lần xuất hiện của từ khóa bằng new_keyword.

NHƯNG, tôi nghĩ rằng phải có cách để tìm kiếm và thay thế từ khóa phù hợp (được đánh dấu) bằng bất kỳ new_keyword nào KHÔNG thực hiện ":% s/keyword/new_keyword/g", rất nhiều việc đánh máy tìm kiếm & thay thế là một tính năng hàng ngày.

Mọi câu trả lời/nhận xét sẽ được đánh giá cao!

Trả lời

27

Nếu bạn đã thực hiện tìm kiếm, bạn có thể thực hiện thay thế cho cùng một mẫu bằng cách chỉ cần thoát khỏi mẫu trong lệnh thay thế. ví dụ:

/keyword 

Mấu tìm kiếm cho "keyword", và sau đó:

:%s//new_keyword/g 

sẽ thay thế tất cả các lần xuất hiện của "keyword" với "new_keyword".

+1

Không biết về điều đó, rất hữu ích. – meagar

+1

Nice - điều đầu tiên tôi đã thêm vào danh sách 'vim wisdom' của mình trong một thời gian. – Stew

+0

Cảm ơn Laurence, đó là những gì chính xác tôi muốn, và tôi không phải là người dùng Vim hạnh phúc hơn :) Chúc mừng! – Khiet

3

Tìm kiếm và sử dụng lệnh dấu chấm (bạn không có nghĩa là bạn đang sử dụng lệnh dấu chấm, đó là lý do tại sao tôi đánh dấu nó) để lặp lại thao tác nhập cuối cùng là đặt cược tốt nhất của tôi tại đây.

Tôi sử dụng s /// g để tìm kiếm và thay thế.

+0

Cảm ơn Ronny, không phải là giải pháp chung hiệu quả đối với tôi NHƯNG nhắc tôi về lệnh Vim quan trọng ".". Chúc mừng !!! – Khiet

+0

Đó là lệnh quan trọng nhất! –

1

Move để là người đầu tiên nhấn mạnh từ sau đó ghi lại một macro để thay thế các văn bản và chuyển sang phần tiếp theo, ví dụ:

 
gg 
n 
qq 
caw new_word^[ 
n 
q 
@q 
@@ 
@@ 
... 
+0

Đó là một * địa ngục * của rất nhiều cách gõ hơn là chỉ cần gõ lại từ khóa vào ':% s /.../.../ g' – meagar

+0

@meagar: đúng, nhưng câu hỏi không phải là cách để làm điều đó trong ít nhất tổ hợp phím, chỉ cần làm thế nào để làm điều đó mà không có:% s – Cercerilla

+0

@meagar: không khi bạn chỉ có thể nhấn '.' để tiếp tục làm điều tương tự một lần nữa. –

2

Vâng, kể từ # từ khóa # và # new_keyword # tài khoản cho hầu hết các nhân vật và bạn cần một số cách để phân biệt giữa chúng (ví dụ: ký tự trong vim hoặc tab giữa các trường nhập trong hộp thoại trong trình chỉnh sửa khác), bạn có thể có bốn hoặc năm lần nhấn phím. Vì vậy, tôi nghĩ rằng bạn có thể đánh giá quá cao số lần nhấn phím và cũng quên rằng (1) nó trở nên rất tự nhiên, và (2) làm việc theo cách này cho phép bạn tự động sửa đổi hành động được thực hiện bằng cách chỉ định một phạm vi hoặc tùy chọn khác cờ.

Nhưng bạn có thể cắt giảm các lần nhấn phím. Nếu bạn muốn, bạn có thể ánh xạ khóa để tự động hiển thị dòng lệnh với '% s /' đã có sẵn. ví dụ:

nmap s :%s/ 

Lệnh trên sẽ remap '(Tôi không đề xuất gửi lại khóa đó, nhưng đưa ra ý tưởng) và đặt bạn chèn từ khóa.

Ngoài ra, bạn có thể đặt tùy chọn 'gdefault' thành mặc định để thay thế nhiều lần trên mỗi dòng. Điều này cho phép bạn bỏ qua kết thúc '/ g' trong các lần nhấn phím của mình:

set gdefault 

Xem ': h gdefault' để được trợ giúp trong tùy chọn đó.Cuối cùng, tôi sẽ nói chỉ quen với cách mặc định nó hoạt động, bởi vì sử dụng nó theo cách đó cho phép bạn duy trì hoạt động cơ bản giống nhau khi bạn muốn chỉ định các phạm vi khác nhau hoặc cờ tùy chọn và tạo một bản đồ đặc biệt mới chỉ là một điều khác cần nhớ. gdefault có thể có giá trị thiết lập nếu bạn nghĩ rằng bạn sẽ muốn nó phần lớn thời gian, thêm/g cờ ở cuối khi gdefault được thiết lập có tác dụng chuyển/g tắt. . .

+0

Cảm ơn rất nhiều Herbert, rất nhiều thông tin và mẹo hữu ích. Đặc biệt, tôi tìm gdefault đặt, và/g để tự động unset là đẹp và sẽ không biết. Chúc mừng !!! – Khiet

Các vấn đề liên quan