在新安裝的Debian的Bash下,通過(guò)sudo apt-get install git
安裝后,git的補(bǔ)全出現(xiàn)異常。
$ 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
,由于補(bǔ)全項(xiàng)為git a^[[m^[[Kdd
而無(wú)法正常使用。
請(qǐng)問(wèn):
Bash中,這個(gè)^[[m^[[K
是什么?
如何去除它,讓git
的補(bǔ)全正常?
(我曾經(jīng)用過(guò)git-completion這個(gè)方案,但是它太老,早已不更新,導(dǎo)致新功能補(bǔ)全缺失。)
閉關(guān)修行中......
再?gòu)?qiáng)調(diào)一遍,終端是終端,Shell是Shell,總有人分不清終端和Shell…
這個(gè)問(wèn)題是由你的終端配置不當(dāng)導(dǎo)致的,Bash再神通廣大也管不到ANSI Escape Code的解析啊,正如你把i3換成i7照樣不能讓黑白顯示器顯示出彩色一樣。
你有兩個(gè)選擇:
關(guān)閉Git補(bǔ)全的彩色
調(diào)整你的終端,使其支持ANSI Escape Code
如果你的Terminal Emulator支持彩色的話,通常改一下$TERM
就能解決問(wèn)題。更詳細(xì)的說(shuō)明可以參考http://www.tldp.org/HOWTO/Text-Terminal-HOWTO-16.html,以及這個(gè)網(wǎng)頁(yè)中的鏈接。
Bash 中,這個(gè)
^[[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,即控制臺(tái)中的文本的渲染效果。其中n
是0至多個(gè)參數(shù),當(dāng)沒(méi)有參數(shù)的時(shí)候就成了 CSI m,表示重置為默認(rèn)渲染效果。具體見(jiàn)這里。(自定義控制臺(tái)的 PS 也是通過(guò)這個(gè)來(lái)設(shè)置顏色的。) 例如,問(wèn)題開(kāi)頭的^[[1;43m
表示“加粗;紅色”渲染效果。
CSI K 的完整形式是 CSIn
K,表示 EL – Erase in Line,即刪除部分行。其中n
也是參數(shù),當(dāng)n
為0或省略的時(shí)候,即 CSI K,表示從光標(biāo)位置刪除到行尾。其它情況可參考維基百科中的描述。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)