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

25

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

alias g='git'

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

Павел Гольчицкий
источник
Хотя у меня нет ответа для вас, мне придется потратить минуту и ​​задуматься, а не набирает ли эти два других письма действительно много преимуществ?
Марко Чеппи
4
Конечно, это так! Я печатаю «g», вероятно, более 100 раз в день.
Павел Гольчицкий
3
Использование псевдонимов часто используемых коротких команд для еще более коротких псевдонимов экономит мне сотни нажатий клавиш в день. Согласно моей истории оболочки, g=gitв прошлом месяце я использовал псевдоним 756 раз, то есть я сохранил, нажав клавиши «g» и «i» всего 1512 раз. Это, в сочетании с моими псевдонимами, может сэкономить мне десятки тысяч нажатий клавиш в месяц.
Главное, что нужно сократить - это помочь вашим рукам поспевать за мозгом.
Тайлер Кольер
Скрипт на superuser.com/questions/436314/… работал так хорошо, что, думаю, заслуживает упоминания.
brandizzi

Ответы:

21

Копируя и изменяя своевременно /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
enzotib
источник
Ха! Вундербар! Работает так, как должно :)
Павел Гольчицкий,
1
Я также должен был добавить source /usr/share/bash-completion/completions/gitк своему .bashrc
pcx
Не уверен, что .bashrcкод здесь работает, но этот ответ определенно устарел. /etc/bash_completion.d/gitне существует 14.04. Смотрите ответ lzap ниже.
Макс Уоллес
18

Последние дополнения bash-upstream перенесены и переименованы. Это снег:

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

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

completion: function `_git' not found

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

lzap
источник
2
Похоже, что это единственный правильный ответ здесь.
pjvandehaar
Используйте __git_complete gc _git_checkout(или подобное), чтобы настроить дополнения для более конкретных псевдонимов. Выполните поиск, /usr/.../gitкак указано выше, чтобы найти правильное имя.
Макс Уоллес
1
@MaxWallace - когда вы устанавливаете псевдонимы для определенных методов git в .gitconfig (например, gc = checkout), нет необходимости явно настраивать завершение для них.
Петр Александр Chmielowski
1
@PiotrAleksanderChmielowski Спасибо! Но я не думаю , что работает на псевдонимы Баша верхнего уровня (например , gc=> git checkout) , в отличие от наложения спектров cв checkoutпределах git, и говорить git c. Поправьте меня если я ошибаюсь.
Макс Уоллес,
@MaxWallace Да, вы правы, моя ошибка;)
Петр Александр Хмеловский
2

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

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

wisbucky
источник
Работает отлично. Для меня это правильный ответ, команда grep на complete удобна. Не нужно было заканчивать загрузчик.
Пол Карлтон
1

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

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

Для полноты картины я хотел бы добавить ответ, используя ~/.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-завершение все равно. Я обновлю этот ответ, как только выясню, как это сделать правильно (я также спросил здесь на блокноте ).

kub1x
источник
-1

Посмотрите здесь: 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

Наслаждайтесь! (^ О ^) /

ГКУП
источник
1
Извините, но это нечто совершенно другое. Создание таких простых псевдонимов для целых команд тривиально.
Павел Гольчицкий,
Я просто заставляю их работать как плагин git от Oh-My-Zsh: github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/…
ГКУП
-1

Вы можете просто определить псевдонимы как обычно:

alias g='git'

Затем установите полный псевдоним, чтобы сделать псевдоним завершения bash.

Cyker
источник