Có một phím tắt để sử dụng lại thuật ngữ tìm kiếm của tìm và thay thế?


8

Tôi nghĩ có một khả năng khác biệt câu hỏi này đã được hỏi, nhưng tôi không thể tìm thấy nó.

Nếu tôi đang làm một cái gì đó giống như :s/foo/bar/gvà sau đó tôi muốn gọi lại nó trên dòng tiếp theo nhưng bazthay vì bar, có cách nào nhanh hơn để làm điều đó? Tôi cảm thấy như &baznên làm việc, nhưng nó không.

Câu trả lời:


11

Không chính xác những gì bạn yêu cầu, nhưng bạn có thể làm điều đó:

:s/foo/bar/g

Và sau đó:

:s//baz/g

Bạn có thể sử dụng điều đó bởi vì khi bạn sử dụng :smẫu tìm kiếm được lưu trong sổ đăng ký tìm kiếm. Mà bạn có thể thấy với :reg /.


Công việc đang tiến hành: Bạn có thể tăng tốc quy trình làm việc của mình với:

nnoremap && :s<UP><C-F>F/cT/

Và sử dụng nó như vậy:

:s/foo/bar/g

và sau đó

&&baz<CR>

Đang phân hủy:

nnoremap &&         " define a new mapping
:s<UP>              " get the last :s command in the history
<C-F>               " use this command in the cmdline window
F/                  " go back to the last /
cT/                 " change back up to the last /

Một số lưu ý:

  • Điều này sẽ không hoạt động nếu bạn không có bất kỳ cờ nào
  • Điều này sẽ không hoạt động nếu bạn không có chuỗi thay thế
  • nên hoạt động khác

(cho tôi biết nếu tôi có thể cải thiện nó).

Một số bài đọc:

  • :h cmdline-window
  • :h c_CTRL-F

2
Điều đó chắc chắn tốt hơn những gì tôi đã làm trước đây. Tôi sẽ lấy làm tiếc rằng có thể không có cách nào nhanh hơn :(.
Eli Sadoff

Không phải AFAIK, và tôi đang cố gắng tạo một ánh xạ thực hiện những gì bạn muốn, nhưng ngoài hộp tôi chắc chắn rằng bạn bị hạn chế nhập lại biểu thức thay thế
nobe4

5

Ngoài câu trả lời của @ nobe4, Damian Conway còn có hai ánh xạ khá thú vị để tăng tốc độ tìm kiếm và thay thế các hành động. Họ đến từ đây làm thế nào tôi vim phỏng vấn đó là hoàn toàn đáng đọc hoàn toàn.

Để báo cho anh ta:

[...] Tôi thấy rằng tôi đã mãi mãi thực hiện tìm kiếm và thay thế toàn cầu (nghĩa là :%s/X/Y/g<CR>), vì vậy tôi đã loại bỏ việc gõ lặp đi lặp lại bằng cách ăn cắp lệnh không bao giờ được sử dụng (bởi tôi) S:

nmap  S  :%s//g<LEFT><LEFT>

Bây giờ tôi chỉ cần gõ: SX / Y

Nhưng sau đó tôi bắt đầu nhận thấy mức độ thường xuyên tôi đã thực hiện / tìm kiếm một số mẫu và, khi xem qua các trận đấu, sau đó muốn thay thế toàn bộ chúng. Ngay cả với ánh xạ S lặp đi lặp lại khó chịu hơn: trước tiên hãy thực hiện tìm kiếm: / mẫu sau đó thực hiện thay thế: Spotype / thay thế Vì vậy, tôi đã đánh cắp lệnh (cũng không bao giờ được sử dụng bởi tôi) M cho điều đó:

nmap <expr>  M  ':%s/' . @/ . '//g<LEFT><LEFT>'

Bây giờ chỉ là: thực hiện tìm kiếm: / mẫu sau đó thay thế tất cả các kết quả khớp: Thay thế


Để trả lời câu hỏi của bạn, tôi đoán bạn có thể sửa đổi một chút ánh xạ đầu tiên cho thứ gì đó như thế này:

nmap  S  :s///g<LEFT><LEFT>

Bằng cách này, đầu tiên bạn có thể làm thay bạn :s/foo/bar/g, đi vào dòng, hit tiếp theo Svà bạn sẽ nhận được: :s//|/gnơi |là con trỏ, bây giờ bạn có thể gõ subsitution mới của bạn.

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.