Zakończenie Git:
Mam problem z autouzupełnianiem nazw plików git w moim systemie. Używam zsh
(5.0.5) z git
(1.9.3) na OS X (10.9.3). Zarówno zsh
i git
zostały zainstalowane poprzez homebrew. (Dane wyjściowe pełnej wersji znajdują się na dole posta).
git
Uzupełnianie nazw plików nie wstawia spacji, jak się spodziewałem. Kiedy wpisuję nazwę pliku ze spacją w nazwie, powłoka wstawia nazwę pliku bez spacji. zsh
Wbudowane zakończenie nie robi tego, ale git
robi.
Oto przykład tego, co widzę.
Mam repozytorium z kilkoma plikami ze spacjami w nazwach.
% ls -la
test
test four - latest.txt
test three.txt
test two
Odwrotny ukośnik powłoki unika nazw plików zgodnie z oczekiwaniami, gdy wstawiam nazwę pliku za pomocą tabulacji.
% echo "testing" >> test<tab>
autouzupełnia się po trzykrotnym naciśnięciu klawisza.
% echo "testing" >> test\ four\ -\ latest.txt
––– file
test test\ four\ -\ latest.txt test\ three.txt test\ two
git status
pokazuje te nazwy plików w cudzysłowie (całkowicie rozumie co jest grane):
% git status --short
M test
M "test four - latest.txt"
M "test three.txt"
M "test two"
ale kiedy próbuję git add
z autouzupełnianiem tabulacji, idzie to na boki.
% git add test<tab>
powoduje to po trzykrotnym naciśnięciu karty:
% git add test four - latest.txt
test test four - latest.txt test three.txt test two
Próbowałem cofa ten kawałek: my dotfiles są pod kontrolą wersji, więc próbowałem zsh 4.3.15
, git 1.8.3
i moje dotfiles z rok temu, kiedy jestem prawie pewien, że to działało. Co dziwne, ta konfiguracja wciąż była zepsuta.
I nie zmniejszyła go do _git
pliku, który jest ukończenia pochodzących od /usr/local/share/zsh/site-functions
:
% echo $FPATH
/usr/local/share/zsh/site-functions:/usr/local/Cellar/zsh/5.0.5/share/zsh/functions
% ls -l /usr/local/share/zsh/site-functions
_git@ -> ../../../Cellar/git/1.9.3/share/zsh/site-functions/_git
_hg@ -> ../../../Cellar/mercurial/3.0/share/zsh/site-functions/_hg
_j@ -> ../../../Cellar/autojump/21.7.1/share/zsh/site-functions/_j
git-completion.bash@ -> ../../../Cellar/git/1.9.3/share/zsh/site-functions/git-completion.bash
go@ -> ../../../Cellar/go/HEAD/share/zsh/site-functions/go
Jeśli ręcznie zmienię $FPATH
przed .zshrc
uruchomieniem compinit
(lub po prostu usunę /usr/local/share/zsh/site-functions/_git
dowiązanie symboliczne), uzupełnienia wrócą zsh
i będą działać zgodnie z oczekiwaniami.
zsh
Zakończenie bez _git
:
% git add test<tab>
trzykrotne naciśnięcie karty daje prawidłowe wyniki:
% git add test\ four\ -\ latest.txt
––– modified file
test test\ four\ -\ latest.txt test\ three.txt test\ two
Uwaga dodatkowa: Próbowałem usunąć git-completion.bash
link, a to po prostu całkowicie psuje rzeczy:
% git add test<tab>
wywołuje ten upadek:
% git add test__git_zsh_bash_func:9: command not found: __git_aliased_command
git add test
––– file
test test\ four\ -\ latest.txt test\ three.txt test\ two
I naprawdę chcą dostać to działa prawidłowo: reszta _git
oddawanych były świetne, bo są bardziej świadome repo niż zsh
te, ale muszę nazwy plików ze spacjami lub innymi znakami specjalnymi być właściwie uciekł.
Wersje oprogramowania:
% zsh --version
zsh 5.0.5 (x86_64-apple-darwin13.0.0)
% git --version
git version 1.9.3
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.9.3
BuildVersion: 13D65
Przesłałem pliki _git
i git-completion.bash
: git- complete.bash i _git (przemianowane na _git.sh
tak, aby CloudApp sprawi, że będzie widoczny w przeglądarce).
źródło
_git
. Wezwania, bycompadd -Q
wyglądać dziwnie:-Q
oznaczają „nie cytuj znaków specjalnych”. Spróbuj usunąć-Q
zcompadd
połączeń.zsh
domyślnego zachowania polegającego na niepodzielnym dzieleniu słów na wyniki podstawiania poleceń. W rzeczywistości -\bs
ucieczka nie jest konieczna - lub jest daremna, w zależności od tego, jak na nią spojrzysz. Ustaw"SH_WORD_SPLIT"
zsh.sourceforge.net/FAQ/zshfaq03.html${=$(completion)}
lub cokolwiek, co zwracają.Odpowiedzi:
Ten błąd jest wymieniony na liście adresowej .
Rozwiązaniem jest edycja pliku
git-completion.zsh
i usunięcie-Q
opcji zcompadd
, w__gitcomp_file
.Ten plik jest instalowany z
contrib/completion
katalogu, a jego ścieżka może się różnić w zależności od menedżera pakietów. Jeśli zainstalowałeś z homebrew na macOS, znajduje się w/usr/local/Cellar/git/2.10.2/share/zsh/site-functions
.źródło
__git_aliased_command
jest z tym, że katalog udziału zmienił nazwę na git-core (przynajmniej na FreeBSD), co powoduje, że nie można go znaleźćgit-completion.bash
. Jeśli zmienisz pierwszą lokalizację w linii 33 na zakodowaną/usr/local/share/git-core/contrib/completion/git-completion.bash
, działa to ponownie.echo
w tym pliku tuż powyżej tych definicji funkcji, a brak pojawienia się go w swojej skorupy (a niektóre sąsiadujące kodu podczas testowania) sugeruje Realizacje te nie są jeszcze stosowane:if [[ -n ${ZSH_VERSION-} ]]; then echo "WARNING: this script is deprecated, please see git-completion.zsh" 1>&2
compadd -Q
->compadd
dla wszystkich instancji w_git
igit-completion.bash
w folderze/usr/local/Cellar/git/2.18.0/share/zsh/site-functions/
mojej instalacji napar git. Dziękuję Ci!!!