Làm cách nào để thực hiện tìm kiếm lịch sử ngược trong chế độ vi của ZSH?


47

Tôi sử dụng vimcho tất cả các nhu cầu chỉnh sửa của mình, vì vậy tôi quyết định thử lại chế độ vi cho shell của mình (hiện tại là ZSH w / oh-my-zsh trên OS X), nhưng tôi thấy mình đã cố gắng (và không thành công) để sử dụng Ctrl-Rliên tục. Liên kết khóa tương đương là gì? Và để tham khảo trong tương lai, làm thế nào tôi có thể tự mình tìm ra điều này? Tôi khá chắc chắn rằng tôi có thể sử dụng bind -Ptrong bash.


2
Theo 'man zshzle', theo mặc định, tìm kiếm tăng dần lịch sử không bị ràng buộc trong các chế độ Vi (Abbeymd, viins) theo mặc định.
paul

Câu trả lời:


56

Bạn có thể chạy bindkeymà không có đối số để có danh sách các ràng buộc hiện có, ví dụ:

# Enter vi mode
chopper:~> bindkey -v

# Search for history key bindings
chopper:~> bindkey | fgrep history
"^[OA" up-line-or-history
"^[OB" down-line-or-history
"^[[A" up-line-or-history
"^[[B" down-line-or-history

Trong chế độ emacs, ràng buộc bạn muốn là history-incremental-search-backward, nhưng điều đó không bị ràng buộc theo mặc định trong chế độ vi. Để tự ràng buộc Ctrl-R, bạn có thể chạy lệnh này hoặc thêm nó vào ~/.zshrc:

bindkey "^R" history-incremental-search-backward

Các zshzlemanpage ( man zshzle) có thêm thông tin về biên tập dòng zsh của, bindkey, và emacs / vi chế độ.


3
Cảm ơn, đặc biệt cho zshzle. Đó là khá nhiều thông tin và hữu ích.
Hank Gay

Em yêu anh. Nghiêm túc. Sau khi nâng cấp lên OSX El Capitan, tìm kiếm ngược đã biến mất và tôi đã bỏ lỡ nó nhiều hơn mọi thứ khác trong quy trình làm việc hàng ngày của mình.
Christian

24

Đây là một câu hỏi cổ xưa, nhưng về cơ bản, câu trả lời duy nhất (và được chấp nhận) cho người ta biết làm thế nào để ghép các history-incremental-search-backwardchế độ giống như emacs vào chế độ vi. Mặc dù điều này là hoàn toàn có thể thực hiện được và có thể là giải pháp phù hợp với bạn, nhưng có một điều kỳ lạ là không ai đã đề cập đến cách vi phạm lịch sử tìm kiếm.

chế độ vi trong zsh hỗ trợ lịch sử tìm kiếm bằng các phím vi / vim tiêu chuẩn: /?, cả hai đều có sẵn trong chế độ lệnh. (Nhấn <Esc>để chuyển từ chế độ chèn sang chế độ lệnh, giống như trong vi hoặc vim.)

Tuy nhiên, ý nghĩa của chúng bị đảo ngược: Vì bạn thường muốn tìm kiếm lịch sử của vỏ của mình theo chiều ngược lại, /thực hiện tìm kiếm ngược trong khi ?tìm kiếm chuyển tiếp.

Khi các hit đầu tiên được hiển thị, bạn có thể (giống như trong vi / vim) sử dụng nđể tiếp tục tìm thêm lượt truy cập trong cùng một hướng, hoặc Nđể đảo ngược sự chỉ đạo của tìm kiếm.

Các tổ hợp phím mặc định có liên quan trong vicmdsơ đồ bàn phím là:

"/" vi-history-search-backward
"?" vi-history-search-forward
"n" vi-repeat-search
"N" vi-rev-repeat-search

2
Nó cũng tốt để sử dụng "^P" history-beginning-search-backward"^N" history-beginning-search-forwardcho tự động hoàn thành giống như vim (bạn bắt đầu nhập, sau đó nhấn ctrl+phoặc ctrl+n).
cprn

Đối với tôi, ?đưa lên bck-i-search, đó chính xác là những gì tôi đang tìm kiếm. Cảm ơn bạn.
geowa4

@wjv lợi thế của tìm kiếm tăng dần lịch sử là hỗ trợ các mẫu toàn cầu. Mặc định /hoặc `? ' không: coderwall.com/p/-jvcag/zsh-reverse-history-search-with-regex
alpha_989

@ alpha_989 Bài đăng blog bạn tham khảo không chính xác. Có thể tác giả đã cài đặt một số khung zsh Nhật Bản, làm quá tải các liên kết ^Rphím. Nhân vật duy nhất giống như regex của regex được cả hai hỗ trợ history-search-backwardhistory-incremental-search-backward^, để neo chuỗi tìm kiếm vào đầu dòng. Sức mạnh thực sự của history-incremental-search-backwardnó là nó thực hiện một tìm kiếm gia tăng, như tên của nó cho thấy. Tôi có thể tưởng tượng rằng người ta có thể muốn liên kết nó trong vicmdsơ đồ bàn phím vì lý do đó.
wjv

@wjv, bạn nói đúng .. Tôi nên viết history-incremental-pattern-search-backwardchứ không phải history-incremental-search-backward. history-incremental-pattern-search-backwardscó thể là một widget .. nhưng tôi nghĩ nó được cài đặt theo mặc định trong zsh. Nó hỗ trợ globcác mẫu không regexnhư bạn đã chỉ ra một cách chính xác: zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators . Thực sự có một lỗi trong bài viết ..
alpha_989
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.