Если я сделаю это:
alias g='git'
я теряю все правила завершения (то есть ветви и пульты больше не завершаются автоматически, когда я нажимаю клавишу TAB после ввода, например g push o
).
Скопируйте и измените случайно из /etc/bash_completion.d/git
, добавьте следующие строки к вашему ~/.bashrc
:
complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
|| complete -o default -o nospace -F _git g
Последняя версия bash -дополнение апстрима немного сдвинуло и переименовало. Сейчас:
source /usr/share/bash-completion/completions/git
__git_complete g __git_main
Используйте это в последних версиях Ubuntu (например, 14.04, а также Fedora 22+), когда вы обнаружите:
completion: function `_git' not found
во время завершения.
Та ердөө л хуурамч нэрсийг тодорхойлж болно:
alias g='git'
Дараа нь complete-alias -г суулгаж bash дуусах alias-ийг мэдэж аваарай.
Для полноты картины я хотел бы добавить ответ, используя файл ~ / .bash-completion
, исходный код которого получается в конце bash -сценарий завершения:
_xfunc git __git_complete g __git_main
_xfunc git __git_complete gl _git_log
_xfunc git __git_complete gd _git_diff
_xfunc git __git_complete gb _git_branch
Тогда в моем ~ / .bashrc
у меня есть только псевдонимы. Я пытался:
~ / .bashrc
материалом для завершения bash (сохранить его там, где он принадлежит) ✓ К сожалению, _xfunc
в любом случае является источником git-завершения. Я обновлю этот ответ, как только выясню, как это сделать правильно (я также спрашивал на ланчбэде здесь ).
В ~ / .bashrc
:
alias g='git'
source /usr/share/bash-completion/completions/git
complete -o default -o nospace -F _git g
Через http://29a.ch/2013/8/9/fixing-bash-autocomplete-on-ubuntu-13-04
Посмотрите сюда: https://gist.github.com/scue/576310b7c6b7714aad05
wget https://gist.github.com/scue/576310b7c6b7714aad05/raw/459d46761c231f5c373c1cf496920b01bb6669d2/.bash_aliases.git -O ~/.bash_aliases.git
echo "test -e ~/.bash_aliases.git && source ~/.bash_aliases.git" >> ~/.bashrc
Наслаждайтесь!(^o^)/
обновленный способ сделать это (полный не сработает для меня):
cd
- перейти в ваш домашний каталог wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
source ~ / git-completion.bash
в ваш .bashrc файл (если у вас нет этого файла, создайте его в своей домашней папке, bash будет искать его автоматически) псевдоним g = 'git'
в ваш .bashrc файл. источника ~ / .bashrc
Сначала найдите исходную команду завершения. Пример:
$ complete | grep git
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git
Теперь добавьте в свой сценарий запуска (например, ~ / .bashrc):
# copy the original statement, but replace the last command (git) with your alias (g)
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g
# load dynamically loaded completion functions (may not be required)
_completion_loader git
Строка _completion_loader
может не потребоваться. Но в некоторых ситуациях функция завершения загружается динамически только после того, как вы наберете команду и нажмете TAB
в первый раз. Поэтому, если вы не использовали исходную команду и попробовали использовать псевдоним + TAB
, вы можете получить сообщение об ошибке типа «bash: Завершение: функция не найдена».