เสร็จสิ้น Git:
ฉันมีปัญหากับการเติมข้อความอัตโนมัติของชื่อคอมไพล์ในระบบของฉัน ฉันใช้zsh
(5.0.5) กับgit
(1.9.3) ใน OS X (10.9.3) ทั้งสองzsh
และgit
ได้รับการติดตั้งผ่าน homebrew (เอาท์พุทเวอร์ชั่นเต็มอยู่ที่ด้านล่างของโพสต์)
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
ผมเคยพยายามถอยนี้บิต: dotfiles ของฉันอยู่ในการควบคุมรุ่นเพื่อให้ฉันได้พยายามzsh 4.3.15
, git 1.8.3
และ dotfiles ของฉันจากปีที่ผ่านมาเมื่อฉันเกือบบางนี้ทำงาน แปลกการตั้งค่านี้ก็ยังเสีย
ฉันได้แคบลงไปยัง_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
ความสำเร็จได้ดีเพราะพวกเขากำลังมากขึ้น repo ตระหนักถึงกว่า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-completion.bashและ_git (เปลี่ยนชื่อเป็น_git.sh
CloudApp จะทำให้สามารถดูได้ในเบราว์เซอร์)
_git
ฉันได้อย่างรวดเร็วที่ การเรียกร้องให้compadd -Q
ดูแปลก ๆ : -Q
หมายถึง“ อย่าพูดตัวอักษรพิเศษ” ลองลบออก-Q
จากการcompadd
โทร
zsh
พฤติกรรมเริ่มต้นของผลลัพธ์การแทนที่คำสั่งแบบแยกคำไม่ได้ ในความเป็นจริง - การ\bs
หลบหนีนั้นไม่จำเป็น - หรือไร้ประโยชน์ขึ้นอยู่กับว่าคุณมองอย่างไร ตั้งค่า"SH_WORD_SPLIT"
zsh.sourceforge.net/FAQ/zshfaq03.html
${=$(completion)}
หรืออะไรก็ตามที่มันส่งคืน