Чи можу я перейти до меню заповнення вкладки zsh за допомогою vi-подібних клавіш hjkl?


13

Я використовую завершення вкладки на основі меню zsh. Я натискаю Tabодин раз, і з'являється список можливих завершень. Якщо натиснути Tabще раз, я можу переміститися по цьому списку за допомогою клавіш зі стрілками. Тим НЕ менше, чи можна управляти ними з vi-як H, J, K, Lключі замість?

Я використовую режим emacs для введення командного рядка, з bindkey -ein ~/.zshrc. Я також використовую zim з zsh. Якщо доречно, команди , які визначають систему закладок завершення знаходяться тут .

Відповіді:


16

Так, ви можете, включивши 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 Це добре працює, якщо я вручну запускаю bindkeyкоманди в терміналі, але це не вдається, якщо я поставив їх у кінці ~/.zshrc, з /home/sparhawk/.zshrc:bindkey:186: no such keymap `menuselect'.
Sparhawk

Чи ввімкнено сценарії завершення? Дивіться команду перед еліпсами ...
Jasonwryan

Ви маєте на увазі zstyleлінію? Так, у мене це ~/.zshrcтеж було.
Спархаук

Ви також повинні це ввімкнути . Дивіться мій .zshrc як приклад .
Jasonwryan

Додавання autoload -Uz compinitта compinitне працює, але я не впевнений, чи ввімкнути це проблема, тому що (a) вибір меню працює добре в загальному сенсі, і завжди є, і (b) я можу bindkeyпізніше вручну запускати рядки, які працює. Крім того, я щойно зрозумів, що (b) працює, лише якщо спочатку натиснути вкладку , імовірно, щоб ініціалізувати систему завершення, а потім запустити bindkey…. В іншому випадку він не працює, як зазначено вище ( bindkey: no such keymap `menuselect').
Sparhawk

4

Найближчий я прийшов до цього використовує CTRL- Nі CTRL- Pдля переміщення вперед і назад по списку можливих завершень, а Tabй Shift- Tab. Це є більш vi-як навігації.

У конфігураційному .zshфайлі я досягаю цього за допомогою:

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

І пов'язано:

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

Ось документи для палітурки .


2
це чудово, дякую. також, -M menuselectможна додати до bindkeyкоманди, щоб обмежити режим тут.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.