Дело в точке:
Я на Mac с Bash v3.2.17, я использую Git, установленный через MacPort с вариантом Bash_completion.
Когда я печатаю git checkout m<tab>
. например, я получил его до master
.
Тем не менее, у меня есть псевдоним git checkout
, gco
. Когда я набираю текст gco m<tab>
, я не получаю название автозаполнения.
В идеале я хотел бы, чтобы автозаполнение просто волшебным образом работало для всех моих псевдонимов. Является ли это возможным? В противном случае я бы хотел вручную настроить его для каждого псевдонима. Итак, как мне поступить?
Ответы:
Как указано в комментариях выше,
больше не будет работать. Тем не менее,
__git_complete
в git-complete.bash есть функция, которую можно использовать для настройки завершения для псевдонимов, например:источник
__git_complete g __git_main
чтобы завершить код, работая со всеми командами git.git-completion.bash
из<your git install folder>/etc/bash-completion.d/
в~/.git-completion.bash
Шаг 2) добавьтеsource ~/.git-completion.bash
в свой.bash_profile
Шаг 3) Добавьте в__git_complete gco _git_checkout
любом месте после строки выше в вашем .bash_profile. Шаг 4) Перезагрузите оболочку и наслаждайтесь псевдонимом автозаполнения! :)Я столкнулся с этой проблемой и придумал этот фрагмент кода. Это автоматически даст вам завершение для всех псевдонимов. Запустите его после объявления всех (или любых) псевдонимов.
источник
let COMP_CWORD+=$num_alias_arguments
почему-то не работала на Mac OS X. Заменив его((COMP_CWORD+=$num_alias_arguments))
исправленным, хотяwrap_alias
удушение двойных кавычек в определении псевдонима, и я думаю, что это не имеет особого смысла для псевдонимов с несколькими командами (alias 'foo=bar; baz'
), поэтому я ставлю дополнительные| grep -v '[";|&]'
послеalias -p
. Кроме того, он становится немного медленным для сотен определений псевдонимов, но я рад подтвердить, что использованиеecho
вместо передачиeval
данных в файл кэша (который затем может бытьeval
отредактирован за один раз) работает нормально и работает очень быстро ,wrap_alias
требует настройки дополнений, поэтому мне пришлось двигатьсяsource /etc/bash_completion
впередиwrap_alias
кода.let COMP_CWORD+=$num_alias_arguments
наlet \"COMP_CWORD+=$num_alias_arguments\"
.Там
git-completion.bash
есть строка:Глядя на эту строку (и функцию _git), вы можете добавить эту строку в ваш
.bash_profile
:источник
У меня есть псевдоним g = 'git', и в сочетании с псевдонимами git я набираю такие вещи, как
Более простое исправление для моего конкретного случая использования состояло в добавлении одной строки в git-complete.
Прямо под этой линией:
Я добавил эту строку для обработки моего единственного псевдонима 'g':
источник
git-completion
или эту строку/etc/bash_completion.d/git
, но я добавилcomplete -o default -o nospace -F _git g
после своего псевдонима,.bash_aliases
и это сработало!/etc/bash-completion.d/
или заново/usr/share/bash-completion/
, вы потеряете свои изменения всякий раз, когда этот файл обновляется с помощью вашего менеджера пакетов.Да, это возможно с проектом полного псевдонима (в Linux). Поддержка Mac является экспериментальной, но пользователи сообщают об успехе.
источник
Вы также можете попробовать использовать псевдонимы Git. Например, в моем
~/.gitconfig
файле есть раздел, который выглядит так:Таким образом, вы можете напечатать
git co m<TAB>
, и это должно расшириться доgit co master
, который являетсяgit checkout
командой.источник
Эта страница форума показывает решение.
Поместите эти строки в ваш
.bashrc
или.bash_profile
:Это решение похоже на сценарий Бальшецера , но только этот на самом деле работает для меня. (У сценария Бальшецера были проблемы с некоторыми из моих псевдонимов.)
источник
-bash: eval: line 28: unexpected EOF while looking for matching '''
-bash: eval: line 29: syntax error: unexpected end of file
"
кавычки внутриfunction
строки должны быть заключены в кавычки\"
. Это, вероятно, съедает одну из ваших'
цитат где-то вдоль строки.Еще один вариант - использовать
~/.bash_completion
файл. Чтобы создатьgco
псевдоним дляgit checkout
просто поместите это там:Тогда
~/.bashrc
вы должны указать только псевдоним:Две строчки Вот и все.
Объяснение:
~/bash_completion
Получает источников в конце основного bash_completion сценария. В Gentoo я нашел основной скрипт в/usr/share/bash-completion/bash_completion
._xfunc git
Немного заботится о снабжаемgit-completion
файл для вас , так что вам не нужно положить что - нибудь еще в~/.bashrc
.Принятый ответ требует, чтобы вы скопировали
.git-completion.sh
и отправили его из вашего~/.bashrc
файла, который я нахожу хромым.PS: я все еще пытаюсь понять, как не использовать весь
git-completion
сценарий в моей среде bash. Пожалуйста, прокомментируйте или отредактируйте, если найдете способ.источник
_xfunc git
требуется?source ~/.git-completion.sh
я позволю_xfunc
сделать это для меня. Просто приятнее и чище делать это только в~/.bash_completion
. Без_xfunc
(или источников)__git_complete
функция не существует.~/.bash_completion
файле -_xfunc
линия работает для меня в.bashrc
.Вам просто нужно найти
complete
команду и продублировать строку с псевдонимом.У меня есть
alias d-m="docker-machine"
. На словахd-m
должен быть псевдоним дляdocker-machine
.Так на Mac (через brew) файлы завершения находятся в
cd `brew --prefix`/etc/bash_completion.d/
.Для моего случая я отредактировал файл с именем
docker-machine
.Весь путь внизу был:
Поэтому я просто добавил еще одну строку с моим псевдонимом:
источник
docker
aliased tod
. Хотя для примера в вопросеgit checkout
псевдонимgco
более сложен.Сначала посмотрите исходную команду завершения. Пример:
Теперь добавьте их в свой скрипт запуска (например, ~ / .bashrc):
_completion_loader
Линия может не потребоваться. Но в некоторых ситуациях функция завершения загружается динамически только после ввода команды иTAB
первого нажатия . Так что, если вы не использовали исходную команду и попробовали псевдоним +TAB
, вы можете получить сообщение об ошибке типа «bash: завершение: функция« _docker »не найдена».источник
Есть много ответов на этот вопрос, и я, как и я, держу пари, что многие смущенные читатели. В моем случае у меня также было требование, чтобы мои dotfiles работали на нескольких платформах с разными версиями Git. Я тоже нет,
alias g=git
но вместо этогоg
определил как функцию.Чтобы добиться этого, мне пришлось собрать воедино разные ответы в одном решении. Хотя это повторяет ответы уже, я думал, что кто-то в моей лодке мог бы счесть этот сборник полезным, как я сделал бы, когда я впервые пришел к этому вопросу.
Это предполагает более старое и новое завершение Git, Ubuntu по умолчанию и
brew install git
в MacOS. В последнем случае установленные дополнения brew не обрабатывались bash (что я буду диагностировать позже).источник
Если вы используете
alias g='git'
, я добавлю эту строку кода в.bash_aliases
источник