Penyelesaian Git:
Saya mengalami kesulitan dengan pelengkapan otomatis nama file git di sistem saya. Saya menggunakan zsh(5.0.5) dengan git(1.9.3) di OS X (10.9.3). Keduanya zshdan gittelah diinstal melalui homebrew. (Output versi lengkap ada di bagian bawah posting.)
gitPenyelesaian nama file tidak memasukkan spasi seperti yang saya harapkan. Ketika saya mengetik nama file dengan spasi di namanya, shell memasukkan nama file tanpa spasi. zshSelesai built-in tidak melakukan ini, tetapi gititu.
Ini contoh dari apa yang saya lihat.
Saya memiliki repositori dengan beberapa file dengan spasi di namanya.
% ls -la
test
test four - latest.txt
test three.txt
test two
Shell backslash lolos dari nama file seperti yang diharapkan ketika saya menggunakan tab completion untuk memasukkan nama file.
% echo "testing" >> test<tab>
lengkapi ini secara otomatis setelah menekan tab tiga kali.
% echo "testing" >> test\ four\ -\ latest.txt
––– file
test test\ four\ -\ latest.txt test\ three.txt test\ two
git status menunjukkan nama file ini dalam tanda kutip (itu benar-benar mengerti apa yang terjadi):
% git status --short
M test
M "test four - latest.txt"
M "test three.txt"
M "test two"
tetapi ketika saya mencoba git adddengan pelengkapan otomatis tab, ia pergi ke samping.
% git add test<tab>
menghasilkan ini setelah menekan tab tiga kali:
% git add test four - latest.txt
test test four - latest.txt test three.txt test two
Saya sudah mencoba regresi ini sedikit: dotfiles saya di kontrol versi, jadi saya sudah mencoba zsh 4.3.15, git 1.8.3dan dotfiles saya dari tahun lalu, ketika saya hampir yakin ini bekerja. Anehnya, pengaturan ini masih rusak.
Saya telah mempersempitnya ke _gitfile penyelesaian yang bersumber dari /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
Jika saya mengubah secara manual $FPATHsebelum .zshrcmenjalankan compinit(atau cukup menghapus /usr/local/share/zsh/site-functions/_gittautan simbolik), maka penyelesaian kembali ke zshdan berfungsi seperti yang diharapkan.
The zshselesai tanpa _git:
% git add test<tab>
tab memukul tiga kali menghasilkan hasil yang benar:
% git add test\ four\ -\ latest.txt
––– modified file
test test\ four\ -\ latest.txt test\ three.txt test\ two
Catatan: Saya sudah mencoba menghapus git-completion.bashtautan, dan itu benar-benar merusak:
% git add test<tab>
menghasilkan ini rusak:
% 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
Saya benar - benar ingin ini berfungsi dengan baik: sisa dari _gitpenyelesaian yang bagus karena mereka lebih sadar daripada zshyang, tapi saya perlu nama file dengan spasi atau karakter khusus lainnya untuk melarikan diri dengan benar.
Versi perangkat lunak:
% 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
Saya telah mengunggah _gitdan git-completion.bashfile: git-completion.bash dan _git (diubah namanya _git.shjadi CloudApp akan membuatnya dapat dilihat di browser.)
_git. Panggilan untuk compadd -Qterlihat aneh: -Qberarti "jangan mengutip karakter khusus". Coba hapus -Qdari compaddpanggilan.
zshperilaku default dari hasil substitusi perintah pemisahan kata. Sebenarnya - \bspelarian tidak perlu - atau sia-sia, tergantung pada bagaimana Anda melihatnya. Set"SH_WORD_SPLIT" zsh.sourceforge.net/FAQ/zshfaq03.html
${=$(completion)}atau apa pun yang mereka kembalikan.