Как псевдоним 'git' к 'g', чтобы правила завершения bash были сохранены?

Если я сделаю это:

alias g='git'

я теряю все правила завершения (то есть ветви и пульты больше не завершаются автоматически, когда я нажимаю клавишу TAB после ввода, например g push o).

29
задан 19 September 2011 в 17:02

8 ответов

Скопируйте и измените случайно из /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
21
ответ дан 19 September 2011 в 17:02

Последняя версия bash -дополнение апстрима немного сдвинуло и переименовало. Сейчас:

source /usr/share/bash-completion/completions/git
__git_complete g __git_main

Используйте это в последних версиях Ubuntu (например, 14.04, а также Fedora 22+), когда вы обнаружите:

completion: function `_git' not found

во время завершения.

22
ответ дан 19 September 2011 в 17:02

Та ердөө л хуурамч нэрсийг тодорхойлж болно:

alias g='git'

Дараа нь complete-alias -г суулгаж bash дуусах alias-ийг мэдэж аваарай.

-1
ответ дан 19 September 2011 в 17:02

Для полноты картины я хотел бы добавить ответ, используя файл ~ / .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 (сохранить его там, где он принадлежит) ✓
  • избежать использования всего git-завершения в моей оболочке ☹

К сожалению, _xfunc в любом случае является источником git-завершения. Я обновлю этот ответ, как только выясню, как это сделать правильно (я также спрашивал на ланчбэде здесь ).

0
ответ дан 19 September 2011 в 17:02

В ~ / .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

7
ответ дан 19 September 2011 в 17:02

Посмотрите сюда: 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^)/

-1
ответ дан 19 September 2011 в 17:02

обновленный способ сделать это (полный не сработает для меня):

  1. cd - перейти в ваш домашний каталог
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. Добавьте source ~ / git-completion.bash в ваш .bashrc файл (если у вас нет этого файла, создайте его в своей домашней папке, bash будет искать его автоматически)
  4. Добавьте псевдоним g = 'git' в ваш .bashrc файл.
  5. Начните новый сеанс или внесите изменения с помощью источника ~ / .bashrc
1
ответ дан 19 September 2011 в 17:02

Сначала найдите исходную команду завершения. Пример:

$ 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: Завершение: функция не найдена».

2
ответ дан 19 September 2011 в 17:02

Другие вопросы по тегам:

Похожие вопросы: