complete - редактирование командных автодополнений
Синопсис
complete [( -c | --command | -p | --path )] COMMAND
[( -c | --command | -p | --path ) COMMAND]...
[( -e | --erase )]
[( -s | --short-option ) SHORT_OPTION]...
[( -l | --long-option | -o | --old-option ) LONG_OPTION]...
[( -a | --arguments ) ARGUMENTS]
[( -k | --keep-order )]
[( -f | --no-files )]
[( -F | --force-files )]
[( -r | --require-parameter )]
[( -x | --exclusive )]
[( -w | --wraps ) WRAPPED_COMMAND]...
[( -n | --condition ) CONDITION]
[( -d | --description ) DESCRIPTION]
complete ( -C [STRING] | --do-complete[=STRING] )
Описание
complete определяет, удаляет или отображает автодополнения для команды.
Для ознакомления с написанием собственных автодополнений, см. Написание собственных автодополнений в руководстве fish.
-
-c COMMANDили--command COMMANDуказывает, чтоCOMMAND- это имя команды. Если нет-cили-p, один аргумент без опции будет использован как имя команды. -
-p COMMANDили--path COMMANDуказывает, чтоCOMMAND- абсолютный путь к команде (возможно содержащий подстановочные знаки). -
-eили--eraseудаляет указанное автодополнение. -
-s SHORT_OPTIONили--short-option=SHORT_OPTIONдобавляет короткую опцию в список автодополнений. -
-l LONG_OPTIONили--long-option=LONG_OPTIONдобавляет опцию в стиле GNU в список автодополнений. -
-o LONG_OPTIONили--old-option=LONG_OPTIONдобавляет опцию в старом стиле в список автодополнений (см. подробности ниже). -
-a ARGUMENTSили--arguments=ARGUMENTSдобавляет указанные аргументы опции в список автодополнений. -
-kили--keep-orderсохраняет порядокARGUMENTSвместо сортировки по алфавиту. Несколько вызововcompleteс-kприводят к тому, что аргументы последних отображаются первыми. -
-fили--no-filesуказывает, что данное автодополнение не может следовать за именем файла. -
-Fили--force-filesуказывает, что данное автодополнение может следовать за именем файла, даже если другая соответствующая записьcompleteуказала--no-files. -
-rили--require-parameterуказывает, что данное автодополнение должно иметь аргумент опции, т.е. не может следовать за другой опцией. -
-xили--exclusive- сокращение для-rи-f. -
-w WRAPPED_COMMANDили--wraps=WRAPPED_COMMANDзаставляет указанную команду наследовать автодополнения от обернутой команды (см. подробности ниже). -
-n CONDITIONили--condition CONDITIONуказывает, что это автодополнение должно использоваться только в том случае, если УСЛОВИЕ (команда оболочки) возвращает 0. Это позволяет указать автодополнения, которые должны использоваться только в некоторых случаях. -
-C STRINGили--do-complete=STRINGзаставляет complete попытаться найти все возможные автодополнения для указанной строки. Если нет СТРОКИ, используется текущая командная строка.
Командные автодополнения в fish основаны на понятии опций и аргументов. Опция — это параметр, начинающийся с дефиса, например, -h, -help или --help. Аргументы — это параметры, не начинающиеся с дефиса. Fish распознает три типа опций, такие же, как и в библиотеке GNU getopt. Эти стили:
- Короткие опции, такие как
-a. Короткие опции имеют длину в один символ, предваряются одним дефисом и могут быть сгруппированы (например,-la, что эквивалентно-l -a). Аргументы опций могут быть указаны в следующем параметре (-w 32) или путем добавления значения к опции (-w32). - Опции старого стиля, такие как
-Wallили-name. Опции старого стиля могут иметь длину более одного символа, предваряются одним дефисом и не могут быть сгруппированы. Аргументы опций указываются в следующем параметре (-ao null). - Опции в стиле GNU, такие как
--colors. Опции в стиле GNU могут иметь длину более одного символа, предваряются двумя дефисами и не могут быть сгруппированы. Аргументы опций могут быть указаны в следующем параметре (--quoting-style shell) или после=(--quoting-style=shell).
В одном вызове можно указать несколько команд и путей для определения одних и тех же автодополнений для нескольких команд.
Также можно указать несколько переключателей команд и обернутые команды, чтобы определить несколько автодополнений в одном вызове.
Вызов complete несколько раз для одной и той же команды добавляет новые определения поверх любых существующих автодополнений для данной команды.
Когда -a или --arguments указаны вместе с длинными, короткими или старыми стилями опций, указанные аргументы дополняются только как аргументы для любых указанных опций. Если -a или --arguments указаны без каких-либо длинных, коротких или старых стилей опций, указанные аргументы используются при дополнении не являющихся опциями аргументов команды (за исключением случая дополнения аргумента опции, указанного с -r или --require-parameter).
Подстановки команд, найденные в ARGUMENTS, должны возвращать список аргументов, разделенных переводом строки, и каждый аргумент может необязательно иметь символ табуляции, за которым следует описание аргумента. Таким образом заданное описание переопределяет описание, заданное с помощью -d или --description.
Опции -w или --wraps заставляют указанную команду унаследовать автодополнения от другой команды, «оборачивая» другую команду. Оборачивающая команда также может иметь дополнительные автодополнения. Команда может обернуть несколько команд, и оборачивание является транзитивным: если А оборачивает B, а B оборачивает C, то A автоматически унаследует все автодополнения C. Оборачивание можно удалить, используя опции -e или --erase. Оборачивание работает только для автодополнений, указанных с помощью -c или --command, и игнорируется при указании автодополнений с помощью -p или --path.
При удалении автодополнений можно либо удалить все автодополнения для определенной команды, указав complete -c COMMAND -e, либо удалить определенную опцию автодополнения.
Когда complete вызывается без чего-либо, что определяло бы или удаляло бы автодополнения (опции, аргументы, оборачивание, ...), он отображает соответствующие автодополнения вместо этого. Так, complete без аргументов отображает все загруженные автодополнения, а complete -c foo отображает все загруженные автодополнения для foo. Поскольку автодополнения автозагружаются, вам сначала нужно их запустить.
Примеры
Короткая опция -o для команды gcc требует аргумента файла:
complete -c gcc -s o -r
Короткий стиль опции -d для команды grep требует одного из read, skip или recurse:
complete -c grep -s d -x -a "read skip recurse"
Команда su принимает любое имя пользователя в качестве аргумента. Имена пользователей предоставляются в качестве первого поля, разделенного двоеточием, в файле /etc/passwd. Это можно указать как:
complete -x -c su -d "Username" -a "(cat /etc/passwd | cut -d : -f 1)"
У команды rpm несколько режимов. Если установлен флаг -e или --erase, rpm должна удалить один или несколько пакетов, в этом случае допустимы несколько переключателей, относящихся к удалению пакетов, таких как переключатель nodeps.
Это можно записать как:
complete -c rpm -n "__fish_contains_opt -s e erase" -l nodeps -d "Don't check dependencies"
где __fish_contains_opt — функция, проверяющая буфер командной строки на наличие указанного набора опций.
Для реализации псевдонима используйте опцию -w или --wraps:
complete -c hub -w git
Теперь hub наследует все автодополнения из git. Обратите внимание, что это также можно указать в объявлении функции (function thing -w otherthing).
complete -c git
Показать все автодополнения для git.
© 2021 fish-shell developers
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.3/cmds/complete.html