Иногда команда не имеет установленного завершения — или синтаксически может принимать целую кучу типов аргументов, делая завершение практически бесполезным. Например, "git checkout" может принимать имя любого отслеживаемого git файлаилиимя любого рефа или другого дерева. Он также может принимать некоторые флаги опций. Это много возможных завершений.
Зная, что я хочу завершить, скажем, название ветви, есть ли способ привязать клавишу для завершения или отображения меню названий ветвей? (И то же самое для любой категории завершения.)
Это кажется возможным и полезным, но я не видел, чтобы это делалось.
решение1
Да, это можно сделать. Первоначально я получил следующее из одного из списков рассылки zsh, но не помню, кто это опубликовал:
zle -C complete-file complete-word _generic
zstyle ':completion:complete-file::::' completer _files
bindkey '^x^f' complete-file
Это можно легко адаптировать для использования другой функции завершения вместо _files
.
Первая строка определяет новый виджет завершения с именем , complete-file
который ведет себя как встроенный complete-word
виджет и использует _generic
функцию для генерации списка завершений.
Вторая строка затем настраивает его таким образом, что при использовании этого пользовательского виджета средство завершения будет использовать его только _files
для получения списка завершений.
Затем третья строка привязывает новый виджет к последовательности клавиш.