Tôi có thể điều hướng menu hoàn thành tab của zsh bằng các phím hjkl giống như vi không?


12

Tôi sử dụng hoàn thành tab dựa trên menu của zsh. Tôi nhấn Tabmột lần và một danh sách các hoàn thành có thể xuất hiện. Nếu tôi nhấn Tablại, tôi có thể điều hướng danh sách này bằng các phím mũi tên. Tuy nhiên, là nó có thể để di chuyển chúng với vi-like H, J, K, Lphím để thay thế?

Tôi sử dụng chế độ emacs cho đầu vào dòng lệnh, với bindkey -etrong ~/.zshrc. Tôi cũng sử dụng zim với zsh. Nếu có liên quan, các lệnh chỉ định hệ thống hoàn thành tab sẽ ở đây .

Câu trả lời:


15

Có, bạn có thể bằng cách kích hoạt menu select:

zstyle ':completion:*' menu select
zmodload zsh/complist
...
# use the vi navigation keys in menu completion
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history

+1 Điều này hoạt động tốt nếu tôi tự chạy các bindkeylệnh trong thiết bị đầu cuối, nhưng nó không thành công nếu tôi đặt chúng ở cuối ~/.zshrc, với /home/sparhawk/.zshrc:bindkey:186: no such keymap `menuselect'.
Sparhawk

Bạn đã kích hoạt các kịch bản hoàn thành? Xem lệnh trước dấu
chấm lửng

Bạn có nghĩa là zstyledòng? Vâng, tôi đã có điều đó ~/.zshrcquá.
Sparhawk

Bạn phải kích hoạt nó là tốt . Xem .zshrc của tôi làm ví dụ .
jasonwryan

Thêm autoload -Uz compinitcompinitkhông hoạt động, nhưng tôi không chắc liệu kích hoạt nó có phải là vấn đề hay không, bởi vì (a) menu chọn hoạt động tốt theo nghĩa chung và luôn luôn có, và (b) Tôi có thể tự chạy các bindkeydòng sau, mà làm. Ngoài ra, tôi chỉ nhận ra (b) chỉ hoạt động nếu tôi nhấn tab trước , có lẽ là để khởi tạo hệ thống hoàn thành, sau đó chạy bindkey…. Nếu không thì nó thất bại như trên ( bindkey: no such keymap `menuselect').
Sparhawk

3

Gần nhất tôi đã đến đây là sử dụng CTRL- NCTRL- Pđể tiến lên và lùi lại thông qua danh sách các hoàn thành có thể, thay vì TabShift- Tab. Đây vi điều hướng giống như nhiều hơn .

Trong một .zshtập tin cấu hình, tôi đạt được điều này với:

bindkey '^n' expand-or-complete
bindkey '^p' reverse-menu-complete

Và liên quan:

bindkey '^k' up-history
bindkey '^j' down-history
bindkey '^h' backward-delete-char
bindkey '^w' backward-kill-word
bindkey '^r' history-incremental-search-backward

Dưới đây là các tài liệu cho các ràng buộc .


2
thật tuyệt, cảm ơn Ngoài ra, -M menuselectcó thể được thêm vào bindkeylệnh để hạn chế chế độ ở đây.
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.