GIT 补全中的奇怪字符

xx7*_*aBs 5 osx bash git

我正在运行 bash

GNU bash,版本 4.3.25(1)-release (x86_64-apple-darwin13.4.0)

在 OS X 10.10.1 上。大约一周前,我注意到自动完成已停止工作,但仅适用于 git。我正在使用此脚本进行 git 自动完成:

https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

在它停止工作几天后,我注意到自动完成仍然适用于以字母 's' 开头的命令(例如 status、show、stash)。之后,我尝试自动完成此命令:

git c
Run Code Online (Sandbox Code Playgroud)

这是输出:

用户:~$ git c^[[m^[[K

c^[[m^[[Kat-file
c^[[m^[[Kheck-attr
c^[[m^[[Kheck-ignore
c^[[m^[[Kheck-mailmap
c^[[m^] [[Kheck-ref-format
c^[[m^[[Kheckout
c^[[m^[[Kheckout-index
c^[[m^[[Kherry
c^[[m^[[Kheckout c^[[m^[]
] [m^[[Kitool
c^[[m^[[Klean
c^[[m^[[Klone
c^[[m^[[Kolumn
c^[[m^[[Kommit
c^[[m^[[] Kommit-tree
c^[[m^[[Konfig
c^[[m^[[Kount-objects
c^[[m^[[Kredential
c^[[m^[[Kredential-cache
c^[[m^[] [Kredential-osxkeychain
c^[[m^[[Kredential-store
c^[[m^[[Kvsexportcommit
c^[[m^[[Kvsimport
c^[[m^[[Kvsserver]

如您所见,在每个命令的第一个字母之后插入了一些奇怪的(转义?)字符(除“s”之外的所有其他字母也是如此)。由于这些字符,自动完成无法按预期工作。

有没有人知道可能导致这种情况的原因?我什至不知道如何调试这个,所以欢迎任何提示。

Gil*_*il' 5

这些奇怪的转义序列是变色命令。

\n\n

完成代码运行以下命令来列出可用命令:

\n\n
git help -a|egrep \'^  [a-zA-Z0-9]\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

的输出git help -a看起来像这样:

\n\n

添加 grep 远程\n 添加--交互式哈希对象远程分机\n am 帮助远程-fd\n \xe2\x80\xa6\n fsck-对象接收包写入树\n gc reflog\n get-tar -commit-id 重新链接

\n\n

如果 grep 配置为以颜色打印该行的匹配部分,则第一列中的命令名称将突出显示其第一个字母:

\n\n
$ git help -a|egrep --color=always \'^  [a-zA-Z0-9]\' | cat -v | head -n 1\n^[[01;31m^[[K  a^[[m^[[Kdd                      grep                     remote\n
Run Code Online (Sandbox Code Playgroud)\n\n

当 bash 看到此输出时,它认为^[[01;31m^[[Ka^[[m^[[Kddgrepremote是可能的命令。第一个不会出现,最后两个是正确的,第二个被破坏了。

\n\n

您需要将grep配置为当其输出不在终端上时不使用颜色。如果您已使用别名egrep(并且与和egrep --color=always相同),请将其更改为。如果您已在某处设置了变量,请更改为那里。grepfgrep--color=autoGREP_OPTIONS--color=always--color=auto

\n