Вопрос или проблема
Я хочу ввести что-то
TabTab и точно знать, какая функция автозаполнения вызывается, чтобы я мог использовать эту функцию для завершения алиасов.
Это необходимо для решения следующей проблемы:
git push -d origin
TabTab работает правильно. Там существует какая-то функция автозаполнения, и она вызывается. Я просто не знаю, какая именно. Из-за этого…
# ...я не могу сделать:
alias del="git push -d origin"
_git_complete del _git_push_dash_d_origin # такой функции нет!
#...как я мог бы сделать для:
alias cm='git commit'
_git_complete cm _git_commit # работает нормально!
Автозаполнение Bash — это очень сложная тема, которую я не понимаю и не особо интересуюсь. Просто хочу способ напечатать имя используемой функции автозаполнения, если это возможно.
Ответ или решение
Для того чтобы определить, какая функция завершения (completion function) вызывается при нажатии Tab после команды в терминале Bash, вы можете использовать следующие методы:
1. Использование complete
и compgen
Вы можете использовать команду complete
для показа всех ассоциированных с командой функций завершения. Например, в вашем случае для git
это будет:
complete -p git
Эта команда покажет, какие функции завершения связаны с командой git
. В выводе вы увидите что-то вроде:
complete -o nospace -o default -o bashdefault -F _git git
Это указывает на то, что функция _git
отвечает за завершение для команды git
.
2. Просмотр функции завершения
Чтобы узнать, какая конкретная функция завершения используется, можно просмотреть код функции:
declare -f _git
Это отобразит содержимое функции _git
, и вы сможете просмотреть, как именно она работает.
3. Использование bind
для диагностики
Вы также можете использовать команду bind
для того, чтобы увидеть, как настроены клавиши для автозавершения. Например:
bind -q tab
Это выводит информацию о том, что происходит при нажатии клавиши Tab.
4. Использование set -x
Если вы хотите видеть более подробную диагностику того, что происходит во время выполнения, вы можете включить режим отладки:
set -x
Теперь, когда вы нажимаете Tab, Bash будет выводить в терминал каждую команду перед её выполнением. Это может помочь вам детализировать, какая функция завершения вызывается.
Применение для создания алиаса
Теперь, когда вы узнали, что функция, связанная с git push -d origin
, это _git
, вы можете создать ваш алиас следующим образом:
alias del="git push -d origin"
_git_complete del _git_push
Здесь _git_push
используется, если вы хотите быть ещё более специфичным относительно завершения для git push
.
Заключение
Используя команды complete
, declare
, и set -x
, вы можете с легкостью определить, какая функция завершения вызывается при использовании Tab
в Bash. Это поможет вам успешно настроить свои алиасы для удобной работы. Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать!