Как предполагает https://unix.stackexchange.com/a/352377, вам придется изменить исходный код, чтобы сделать это. Текущие версии Bash (до недавно выпущенной версии 5.0 )включительно могут окрашивать только варианты завершения имени файла; i -search всегда выводит обычный текст.
Ассоциативный массивaliases
содержит все определения псевдонимов.
for name in "${(@k)aliases}"; do
if [[ $name == g* && $aliases[$name] == 'git '* ]]; then
alias d${name#g}="dotfiles ${aliases[$name]#git }"
fi
done
В качестве альтернативы вы можете изменить псевдоним d
на функцию, которая ожидает следующую команду git, но сначала расширяет псевдонимы оболочки и удаляет все ведущие git
.
alias d='d ' # expand aliases after d
function d {
if [[ $1 == "git" ]]; then shift; fi
dotfiles "$@"
}
Затем d gst
выполнит dotfiles status
, d gc myfile
выполнит dotfiles commit myfile
, d ls-tree
выполнит dotfiles ls-tree
и т. д. Завершение выполнимо, но не так просто.