Tất nhiên bạn không còn có thể sử dụng Ctrl+ R. Nếu bạn tham khảo hướng dẫn sử dụng Z Shell, bạn sẽ thấy rằng chỉ có một ràng buộc chính cho history-incremental-search-backwardtiện ích trong emacssơ đồ bàn phím. Không có ràng buộc chính cho nó trong các keymap vi.
Nhưng như bạn cũng sẽ tìm thấy từ việc đọc hướng dẫn (Đó là chương 18.), thêm ràng buộc chính là một bài tập khá đơn giản trong việc sử dụng bindkeylệnh:
bindkey "^R" history-incremental-search-backward
Bạn thậm chí không phải sử dụng zlelệnh để ánh xạ widget vào hàm shell, vì đây là một widget tiêu chuẩn.
Nếu bạn tham khảo câu trả lời cho cùng một câu hỏi trên wiki Z Shell , bạn sẽ thấy các lệnh để thêm cụ thể vào các phím khóa vi "lệnh" và "chế độ chèn":
bindkey -M viins '^R' history-incremental-search-backward
bindkey -M vicmd '^R' history-incremental-search-backward
Cũng lưu ý rằng, như garyjohn chỉ ra , trong sơ đồ phím "lệnh" vi, /ký tự được liên kết với vi-history-search-backwardwidget. Sự khác biệt giữa widget này và history-incremental-search-backwardwidget là hành vi của widget được áp dụng khi một trong chế độ tìm kiếm lịch sử. Dưới đây là một vài sự khác biệt mà bạn sẽ nhận thấy:
- Chuyển chế độ vi:
- Các chế độ tìm kiếm trong
history-incremental-search-backwardToggles giữa mainvà vicmdkeymap khi bạn gọi các vi-cmd-modephụ tùng trong khi vẫn còn ở trong chế độ tìm kiếm. tức là từ emacschế độ presssing các Escchìa khóa hoặc Ctrl+ XCtrl+ Vphím Toggles chế độ tìm kiếm giữa emacsvà vicmdkeymap. (Gọi history-incremental-search-backwardtừ vicmdsơ đồ bàn phím là rất rắc rối, trừ khi bạn cũng liên kết một cái gì đó vi-cmd-modetrong vicmdsơ đồ bàn phím.)
- Chế độ tìm kiếm trong
vi-history-search-backwardxử lý vi-cmd-modewidget như accept-linevà sẽ kết thúc tìm kiếm, nhập lại chế độ lệnh mà bạn đã nhập tìm kiếm từ đó. tức là (với các ràng buộc mặc định) /vào chế độ tìm kiếm từ chế độ lệnh và Escquay lại chế độ lệnh.
- Lặp lại tìm kiếm:
- Trong
history-incremental-search-backward, cả history-incremental-search-backwardvà các vi-rev-repeat-searchvật dụng được công nhận. tức là (giả sử rằng bạn đã thay đổi các ràng buộc như trên) cả Ctrl+ Rvà Nsẽ tìm kiếm một dòng khớp trước đó.
- Trong
vi-history-search-backward, chỉ có các vi-rev-repeat-searchwidget được công nhận. tức là (giả sử rằng bạn đã thay đổi các ràng buộc như trên) Ctrl+ Rsẽ gây ra tiếng bíp và bị bỏ qua.
garyjohnhiển thị cách Vim để thực hiện vàJdeBPhiển thị cách lấy lại liên kết phím cho Ctrl + R! Tôi sẽ chơi với cả hai phương pháp và chấp nhận câu trả lời sau. Tôi sẽ quyết định dựa trên 1) phương pháp nào có vẻ dễ dàng hơn đối với tôi và 2) phương pháp nào được nhiều người ủng hộ hơn. Cám ơn hai bạn!