Как узнать, какая функция завершения вызывается?

Вопрос или проблема

Я хочу ввести что-тоTabTab и точно знать, какая функция автозаполнения вызывается, чтобы я мог использовать эту функцию для завершения алиасов.

Это необходимо для решения следующей проблемы:

git push -d originTabTab работает правильно. Там существует какая-то функция автозаполнения, и она вызывается. Я просто не знаю, какая именно. Из-за этого…

# ...я не могу сделать:
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. Это поможет вам успешно настроить свои алиасы для удобной работы. Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...