Git завершення:
У мене виникають труднощі з автозавершеннями назви файлу git у моїй системі. Я використовую zsh
(5.0.5) з git
(1.9.3) для OS X (10.9.3). І те, zsh
і git
інстальовано за допомогою домашнього перекладу. (Вихід повної версії знаходиться внизу публікації.)
git
завершення імені файлу не містить пробілів, як я очікував. Коли я набираю ім'я файлу з пробілом в імені, оболонка вставляє ім'я файлу без пробілів. zsh
вбудована добудова не робить цього, але так git
і є.
Ось приклад того, що я бачу.
У мене є сховище з кількома файлами з пробілами в їх іменах.
% ls -la
test
test four - latest.txt
test three.txt
test two
Зворотна косої оболонки уникає імен файлів, як очікувалося, коли я використовую завершення вкладки для вставки імені файлу.
% echo "testing" >> test<tab>
автоматично завершує це після удару вкладки тричі.
% echo "testing" >> test\ four\ -\ latest.txt
––– file
test test\ four\ -\ latest.txt test\ three.txt test\ two
git status
показує ці назви файлів у лапках (він повністю розуміє, що відбувається):
% git status --short
M test
M "test four - latest.txt"
M "test three.txt"
M "test two"
але коли я намагаюся виконати git add
вкладку автодоповнення, вона йде вбік.
% git add test<tab>
призводить до цього після натискання вкладки три рази:
% git add test four - latest.txt
test test four - latest.txt test three.txt test two
Я спробував регрес це небагато: мої в точкових файлів контролю версій, тому я намагався zsh 4.3.15
, git 1.8.3
і мої з точкових файлів рік тому, коли я майже впевнений , що це спрацювало. Дивно, що ця налаштування все-таки була порушена.
Я вже звузили його до _git
файлу завершення , що в даний час отримані з /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
Якщо я змінити вручну $FPATH
перед .zshrc
запуском compinit
(або просто видалити /usr/local/share/zsh/site-functions/_git
символічне посилання), завершення повертаються до zsh
та працюватимуть, як очікувалося.
zsh
Завершення без _git
:
% git add test<tab>
тричі натискання на вкладку дає правильні результати:
% git add test\ four\ -\ latest.txt
––– modified file
test test\ four\ -\ latest.txt test\ three.txt test\ two
Бічна примітка: Я спробував видалити git-completion.bash
посилання, і воно просто повністю порушує речі:
% git add test<tab>
виробляє цю розкладеність:
% 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
Мені дуже хочеться, щоб це працювало належним чином: решта _git
завершень були чудовими, тому що вони більш обізнані, ніж zsh
ті, але мені потрібні назви файлів з пробілами або іншими спеціальними символами, щоб правильно їх уникнути.
Версії програмного забезпечення:
% 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
Я завантажив _git
і git-completion.bash
файли: git-завершення.bash та _git (перейменовані _git.sh
так, щоб CloudApp зробить його видимим у браузері.)
_git
. Заклики compadd -Q
виглядати дивно: -Q
означає "не цитувати спеціальних символів". Спробуйте видалити -Q
з compadd
дзвінків.
zsh
поведінкою за замовчуванням не результатами заміни команд, що розбиваються на слова. Насправді - \bs
втеча не потрібна - або марна, залежно від того, як ви на неї дивитесь. Встановити "SH_WORD_SPLIT"
zsh.sourceforge.net/FAQ/zshfaq03.html
${=$(completion)}
небудь або все, що вони повертаються.