Git完成:
我无法在系统上使用git的文件名自动完成功能。我在OS X(10.9.3)上将zsh
(5.0.5)与git
(1.9.3 )一起使用。两者zsh
和git
都已通过自制软件安装。(完整版本的输出在文章的底部。)
git
的文件名完成不像我期望的那样插入空格。当我输入名称中带有空格的文件名时,shell将插入文件名而不会出现空格。zsh
的内置补全功能不会执行此操作,而git
s可以。
这是我所看到的示例。
我有一个存储库,其中包含一些名称中带有空格的文件。
% ls -la
test
test four - latest.txt
test three.txt
test two
当我使用制表符补全插入文件名时,shell反斜杠会按预期转义文件名。
% 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-completion.bash和_git(重命名为_git.sh
CloudApp将使其在浏览器中可见)。
_git
。compadd -Q
看起来很怪异的电话:-Q
意思是“不要引用特殊字符”。尝试-Q
从compadd
通话中删除。
zsh
的默认行为而不是将单词拆分为命令替换结果。实际上- \bs
逃避不是必需的-还是徒劳的,具体取决于您如何看待它。设置"SH_WORD_SPLIT"
zsh.sourceforge.net/FAQ/zshfaq03.html
${=$(completion)}
或返回的结果。