git completion error in bash
阿神
阿神 2017-05-02 09:28:05
0
2
636

在新安装的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而无法正常使用。

请问:

  1. Bash中,这个^[[m^[[K是什么?

  2. 如何去除它,让git的补全正常?

(我曾经用过git-completion这个方案,但是它太老,早已不更新,导致新功能补全缺失。)

阿神
阿神

闭关修行中......

全員に返信(2)
Ty80

もう一度強調しますが、ターミナルはターミナルであり、シェルはシェルです。ターミナルとシェルの違いがわからない人は常にいます...

この問題は、Bash がどれほど強力であっても、i3 を白黒モニターにカラー表示させることができないのと同じように、端末の不適切な設定が原因で発生します。 i7.

2 つのオプションがあります:

  1. Git 補完の色付けをオフにする

  2. ANSIエスケープコードをサポートするように端末を調整してください

ターミナル エミュレーターがカラーをサポートしている場合は、それを変更する $TERM ことで通常は問題を解決できます。詳しい手順については、http://www.tldp.org/HOWTO/Text-terminal-HOWTO-16.html およびこのページのリンクを参照してください。

いいねを押す +0
大家讲道理

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 的完整形式是 CSInm,表示 SGR – Select Graphic Rendition,即控制台中的文本的渲染效果。其中n是0至多个参数,当没有参数的时候就成了 CSI m,表示重置为默认渲染效果。具体见这里。(自定义控制台的 PS 也是通过这个来设置颜色的。) 例如,问题开头的^[[1;43m表示“加粗;红色”渲染效果。

CSI K 的完整形式是 CSInK,表示 EL – Erase in Line,即删除部分行。其中n也是参数,当n

はANSIエスケープコードです。 ^[ESC キーを表し、^[[ESC[ を表します。 CSI (コントロール シーケンス イントロデューサ) なので、^[[m^[[K は CSI m、CSI K を意味します。 CSI m と CSI K が何を意味するかについては、表を調べる必要があります。 🎜 🎜 CSI m の完全な形式は CSInm です。これは、SGR – コンソール内のテキストのレンダリング効果であるグラフィック レンディションの選択を意味します。ここで、n は 0 からその他のパラメータです。パラメータがない場合は CSI m になり、デフォルトのレンダリング効果にリセットされます。詳細はこちらをご覧ください。 (カスタム コンソールの PS もこれを使用して色を設定します。) たとえば、質問の先頭にある ^[[1;43m] は、「太字; 赤」のレンダリング効果を表します。 🎜 🎜 CSI K の完全な形式は CSInK です。これは EL – Erase in Line、つまり行の一部を削除することを意味します。このうち n もパラメータです。 n が 0 または省略された場合は CSI K となり、カーソル位置から行末まで削除することを意味します。その他の状況については、Wikipedia の説明を参照してください。 🎜
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!