Як псевдонім 'git' до 'g', щоб збереглися правила bash-завершення?


25

Якщо я це роблю:

alias g='git'

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


Хоча я не маю відповіді за вас, мені доведеться зачекати хвилинку і задуматися, чи не введення цих двох інших листів справді дає вам велику перевагу?
Марко Цеппі

4
Звичайно, це так! Я набираю 'g', ймовірно, більше 100 разів на день.
Paweł Gościcki

3
Згладжування часто використовуваних коротких команд для ще коротших псевдонімів дозволяє економити сотні натискань клавіш на день. Згідно з моєю історією оболонки, я використовував псевдонім g=git756 разів за останній місяць, тобто я врятував натискання клавіш 'g' та 'i' в 1512 разів. Це в поєднанні з моїми псевдонімами git, ймовірно, заощаджує мені десятки тисяч натискань клавіш на місяць.

Основний момент скорочення натискань клавіш - допомогти вашим рукам не відставати від мозку.
Тайлер Колліер

Сценарій на superuser.com/questions/436314/… спрацював так добре, я думаю, він заслуговує на згадку.
брандізі

Відповіді:


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

Га! Вундербар! Працює так, як слід :)
Paweł Gościcki

1
Я також повинен був додати source /usr/share/bash-completion/completions/gitдо свого .bashrc
pcx

Не впевнений, чи .bashrcпрацює тут код, але ця відповідь, безумовно, застаріла. /etc/bash_completion.d/gitздається, не існує 14.04. Дивіться відповідь lzap нижче.
Макс Уоллес

18

Останній баш-завершення вгору за течією трохи перемістив і перейменував речі. Зараз:

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

Використовуйте це в останніх версіях Ubuntu (наприклад, 14.04, також Fedora 22+), коли ви стикаєтесь:

completion: function `_git' not found

під час заповнення.


2
Здається, це єдина правильна відповідь тут.
pjvandehaar

Використовуйте __git_complete gc _git_checkout(або подібне) для налаштування завершень для більш конкретних псевдонімів. Шукайте /usr/.../gitяк вище, щоб знайти потрібну назву.
Макс Уоллес

1
@MaxWallace - коли ви встановлюєте псевдоніми для конкретних методів git в .gitconfig (наприклад, gc = checkout), немає необхідності чітко налаштовувати їх завершення.
Пьотр Олександр Чмеловський

1
@PiotrAleksanderChmielowski Дякую! Але я не думаю , що працює на псевдоніми Баша верхнього рівня (наприклад , gc=> git checkout) , на відміну від накладення спектрів cв checkoutмежах git, і говорити git c. Виправте мене, якщо я помиляюся.
Макс Уоллес

@MaxWallace Так, ти маєш рацію, моя помилка;)
Piotr Aleksander Chmielowski


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


Чудово працює. Для мене це правильна відповідь, команда grep на завершення є зручною. Не потрібен завантажувач.
Пол Карлтон

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
pjvandehaar

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баш-файлів (зберігайте речі там, де належить) ✓
  • уникайте повного завершення git у моїй оболонці ☹

На жаль, _xfuncджерела закінчення git все одно. Цю відповідь я оновлю, як тільки зрозумію, як це зробити правильно (я також попросив тут на обідньому столі ).


-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
Вибачте, але це щось зовсім інше. Створення таких простих псевдонімів для цілих команд тривіально.
Paweł Gościcki

Я просто змушую
scue

-1

Ви можете просто визначити псевдоніми як завжди:

alias g='git'

Тоді встановіть повний псевдонім, щоб зробити відомості про псевдонім завершення bash.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.