Завершение самого имени команды в zsh - PullRequest
1 голос
/ 16 марта 2020

У меня есть куча ZSH функций, которые довольно многословны, и я хотел бы использовать на них завершение zsh. Пример:

qq-enum-dns-txfr-host
qq-enum-dns-brute-rev
qq-enum-dns-tcpdump
qq-enum-web-php-lfi-logfile
qq-enum-smb-tcpdump
qq-enum-web-php-ffuf-common-php
qq-enum-ftp-tcpdump

Когда я набираю qq-tcp Tab Я хотел бы получить следующие варианты:

qq-enum-dns-tcpdump
qq-enum-smb-tcpdump
qq-enum-ftp-tcpdump

Вся документация, с которой я могу найти сделки как завершить аргументы для данной команды или функции, но не говорит, как использовать завершение подстроки (не префикса), чтобы выяснить, какую функцию использовать в первую очередь.

Я думаю, что я мог бы сделать так что каждая функция вместо этого является аргументом для команды qq. Но есть ли более простой способ, по которому я скучаю?

Ответы [ 2 ]

3 голосов
/ 16 марта 2020

Вы можете настроить систему завершения подробно с помощью встроенного zstyle. По умолчанию, завершение только пытается добавить суффикс, но вы можете изменить его с помощью стиля matcher-list. Чтобы применить стиль ко всем дополнениям:

zstyle ':completion:*' matcher-list …

Чтобы применить стиль, только когда контекст является командой и только для команд, которые являются функциями:

zstyle ':completion:*:*:-command-:*:functions matcher-list …

Что следует за matcher-list, это список спецификаций управления соответствием завершения . Zsh пробует их по порядку и останавливается, как только находит совпадение. Используйте пустую спецификацию, чтобы просто добавить суффикс; вы обычно хотите это сначала, за исключением очень специфических c контекстов, где это затрудняет достижение некоторых завершений. Вы можете использовать спецификацию r, чтобы разрешить частичное завершение слева от символов пунктуации: r:|[-+./_]=* означает, что если строка для завершения содержит один из символов -+./_, у соответствующего завершения может быть что угодно (что угодно * , что соответствует всему) слева от этого знака препинания. Например, qq-tcp Tab завершает все, что соответствует qq*-tcp* (окончательный * от обычного завершения суффикса).

zstyle ':completion:*' matcher-list '' 'r:|[-+./_]=*'

Вы можете активировать это с помощью интерактивной базы c интерфейс настройки compinstall в разделе «Контроль соответствия» как «завершение частичного слова».

0 голосов
/ 16 марта 2020

В вашем ~/.zshrc вы можете объявить псевдонимы, которые будут учтены для завершения

alias qq-tcpdump-enum-dns='qq-enum-dns-tcpdump'
alias qq-tcpdump-enum-smb='qq-enum-smb-tcpdump'
alias qq-tcpdump-enum-ftp='qq-enum-ftp-tcpdump'

(Затем вы можете source ~/.zshrc в уже открытых терминалах, чтобы получить доступные псевдонимы.)

...