Bisakah saya menavigasi menu penyelesaian tab zsh dengan kunci hjkl mirip vi?

12

Saya menggunakan penyelesaian tab berbasis menu zsh. Saya menekan Tabsekali, dan daftar kemungkinan penyelesaian muncul. Jika saya menekan Tablagi, saya bisa menavigasi daftar ini dengan tombol panah. Namun, apakah mungkin untuk menavigasi mereka dengan vi-seperti H, J, K,L kunci bukan?

Saya menggunakan mode emacs untuk input baris perintah, dengan bindkey -ein ~/.zshrc. Saya juga menggunakan zim dengan zsh. Jika relevan, perintah yang menentukan sistem penyelesaian-tab ada di sini .

Sparhawk
sumber

Jawaban:

15

Ya, Anda bisa dengan mengaktifkan 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
jasonwryan
sumber
+1 Ini berfungsi dengan baik jika saya secara manual menjalankan bindkeyperintah di terminal, tetapi gagal jika saya meletakkannya di akhir ~/.zshrc, dengan /home/sparhawk/.zshrc:bindkey:186: no such keymap `menuselect'.
Sparhawk
Apakah Anda mengaktifkan skrip penyelesaian? Lihat perintah di depan elips ...
jasonwryan
Apakah maksud Anda zstylegaris? Ya, saya juga memilikinya ~/.zshrc.
Sparhawk
Anda harus mengaktifkannya juga . Lihat .zshrc saya sebagai contoh .
jasonwryan
Menambah autoload -Uz compinitdan compinittidak berfungsi, tetapi saya tidak yakin apakah mengaktifkannya adalah masalah, karena (a) pilih menu berfungsi dengan baik dalam arti umum, dan selalu ada, dan (b) Saya dapat menjalankan bindkeybaris secara manual nanti, yang bekerja. Juga, saya baru sadar (b) hanya berfungsi jika saya menekan tab terlebih dahulu , mungkin untuk menginisialisasi sistem penyelesaian, kemudian jalankan bindkey…. Kalau tidak, gagal seperti di atas ( bindkey: no such keymap `menuselect').
Sparhawk
3

Yang paling dekat dengan saya adalah menggunakan CTRL- Ndan CTRL- Puntuk bergerak maju dan mundur melalui daftar kemungkinan penyelesaian, alih-alih Tabdan Shift- Tab. Ini adalah lebih vinavigasi -seperti.

Dalam .zshfile konfigurasi saya mencapainya dengan:

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

Dan terkait:

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

Berikut adalah dokumen untuk binding .

effel
sumber
2
ini bagus, terima kasih. juga, -M menuselectdapat ditambahkan ke bindkeyperintah untuk membatasi mode di sini.