проблема
У меня есть следующее
git reset HEAD^ half_entered_file_n<Tab>
На этом этапе я бы хотел, чтобы half_entered_file_name.txt был завершен.
Мое собственное расследование
Я могу получить завершение Tab, если я напишу
git reset HEAD\^ ...
вместо этого, избегая "^".
Запись «^» в качестве последнего символа, похоже, не влияет на автозаполнение, если только не присутствует HEAD:
#autocomplete works
git reset RANDOM^ half_entered_file_n<Tab> #works
Конфигурация Zsh
Я пользуюсь Oh-my-zsh. Помимо oh-my-zsh я настроил следующее, что может иметь отношение к делу:
# Let <TAB> auto completion add a slash at the end instead of space (like BASH)
zstyle ':completion:*' special-dirs true
# Unless this option is set, you can't write git checkout HEAD^^ without escaping ^ as \^ in zsh
setopt NO_NOMATCH
# Standard git plugins
plugins=(git git-extras)
Для полноты вот моя конфигурация
Я запускаю это на OSX в iTerm2.
Спасибо!
Обновить
Я нашел несколько полу-решений, но ни одно из них еще не привело к статусу "отвечено", что в основном делает их нерешительными.
- установить
compdef -d git
в .zshrc как предложено "пещерным человеком"- Решает: теперь HEAD ^ больше не прерывает автозаполнение файла.
- Недостаток: автозаполнение команды git больше не работает.
- Воспользуйтесь принятым ответом "ralphtheninja" из этого вопроса
- Решает: Должен заменить способ создания списка завершения файла, который решит проблему.
- Недостаток: не работает. Похоже, git-extension.zsh/.bash изменил синтаксис.
Я не знаю сценариев оболочки достаточно хорошо, чтобы точно понять, что происходит в git-creation.zsh/.bash, и, если это причина, то что-то ломается.