在新安装的Debian的Bash下,通过sudo apt-get install git
安装后,git的补全出现异常。
$ git <TAB>
^[[1;43m^[[K c^[[m^[[Kherry d^[[m^[[Kifftool h^[[m^[[Kttp-backend m^[[m^[[Kerge-file rm
a^[[m^[[Kdd c^[[m^[[Kherry-pick d^[[m^[[Kiff-tree h^[[m^[[Kttp-fetch m^[[m^[[Kerge-index shortlog
a^[[m^[[Km c^[[m^[[Klean f^[[m^[[Kast-export h^[[m^[[Kttp-push m^[[m^[[Kerge-octopus show
a^[[m^[[Knnotate c^[[m^[[Klone f^[[m^[[Kast-import i^[[m^[[Kmap-send mv show-branch
a^[[m^[[Kpply c^[[m^[[Kolumn f^[[m^[[Ketch i^[[m^[[Kndex-pack name-rev stage
a^[[m^[[Krchive c^[[m^[[Kommit f^[[m^[[Ketch-pack i^[[m^[[Knit notes stash
b^[[m^[[Kisect c^[[m^[[Kommit-tree f^[[m^[[Kilter-branch i^[[m^[[Knit-db pull status
b^[[m^[[Klame c^[[m^[[Konfig f^[[m^[[Kmt-merge-msg i^[[m^[[Knstaweb push submodule
b^[[m^[[Kranch c^[[m^[[Kount-objects f^[[m^[[Kor-each-ref l^[[m^[[Kog rebase subtree
b^[[m^[[Kundle c^[[m^[[Kredential f^[[m^[[Kormat-patch l^[[m^[[Ks-files reflog tag
c^[[m^[[Kat-file c^[[m^[[Kredential-cache f^[[m^[[Ksck l^[[m^[[Ks-remote relink verify-commit
c^[[m^[[Kheck-attr c^[[m^[[Kredential-store f^[[m^[[Ksck-objects l^[[m^[[Ks-tree remote whatchanged
c^[[m^[[Kheck-ignore d^[[m^[[Kaemon g^[[m^[[Kc mergetool repack
c^[[m^[[Kheck-mailmap d^[[m^[[Kescribe g^[[m^[[Ket-tar-commit-id m^[[m^[[Kailinfo replace
c^[[m^[[Kheckout d^[[m^[[Kiff g^[[m^[[Krep m^[[m^[[Kailsplit request-pull
c^[[m^[[Kheckout-index d^[[m^[[Kiff-files h^[[m^[[Kash-object m^[[m^[[Kerge reset
c^[[m^[[Kheck-ref-format d^[[m^[[Kiff-index h^[[m^[[Kelp m^[[m^[[Kerge-base revert
部分是正常的,比如git revert
。但是很大一部分,比如git add
,由于补全项为git a^[[m^[[Kdd
而无法正常使用。
请问:
Bash中,这个^[[m^[[K
是什么?
如何去除它,让git
的补全正常?
(我曾经用过git-completion这个方案,但是它太老,早已不更新,导致新功能补全缺失。)
PHP中文网2017-05-02 09:30:05
もう一度強調しますが、ターミナルはターミナルであり、シェルはシェルです。ターミナルとシェルの違いがわからない人は常にいます...
この問題は、Bash がどれほど強力であっても、i3 を白黒モニターにカラー表示させることができないのと同じように、端末の不適切な設定が原因で発生します。 i7.
2 つのオプションがあります:
Git 補完の色付けをオフにする
ANSIエスケープコードをサポートするように端末を調整してください
ターミナル エミュレーターがカラーをサポートしている場合は、それを変更する $TERM
ことで通常は問題を解決できます。詳しい手順については、http://www.tldp.org/HOWTO/Text-terminal-HOWTO-16.html およびこのページのリンクを参照してください。
大家讲道理2017-05-02 09:30:05
Bash では、この
^[[m^[[K
) は何ですか?^[[m^[[K
是什么?
是 ANSI escape code。^[
表示ESC键,而^[[
即ESC[
表示 CSI(Control Sequence Introducer),所以^[[m^[[K
表示 CSI m,CSI K。至于 CSI m 和 CSI K 表示什么意思就需要查表了。
CSI m 的完整形式是 CSIn
m,表示 SGR – Select Graphic Rendition,即控制台中的文本的渲染效果。其中n
是0至多个参数,当没有参数的时候就成了 CSI m,表示重置为默认渲染效果。具体见这里。(自定义控制台的 PS 也是通过这个来设置颜色的。) 例如,问题开头的^[[1;43m
表示“加粗;红色”渲染效果。
CSI K 的完整形式是 CSIn
K,表示 EL – Erase in Line,即删除部分行。其中n
也是参数,当n
^[
は ESC キーを表し、^[[
は ESC[
を表します。 CSI (コントロール シーケンス イントロデューサ) なので、^[[m^[[K
は CSI m、CSI K を意味します。 CSI m と CSI K が何を意味するかについては、表を調べる必要があります。 🎜
🎜 CSI m の完全な形式は CSIn
m です。これは、SGR – コンソール内のテキストのレンダリング効果であるグラフィック レンディションの選択を意味します。ここで、n
は 0 からその他のパラメータです。パラメータがない場合は CSI m になり、デフォルトのレンダリング効果にリセットされます。詳細はこちらをご覧ください。 (カスタム コンソールの PS もこれを使用して色を設定します。) たとえば、質問の先頭にある ^[[1;43m
] は、「太字; 赤」のレンダリング効果を表します。 🎜
🎜 CSI K の完全な形式は CSIn
K です。これは EL – Erase in Line、つまり行の一部を削除することを意味します。このうち n
もパラメータです。 n
が 0 または省略された場合は CSI K となり、カーソル位置から行末まで削除することを意味します。その他の状況については、Wikipedia の説明を参照してください。 🎜