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

在新安装的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这个方案,但是它太老,早已不更新,导致新功能补全缺失。)

阿神
阿神

闭关修行中......

répondre à tous(2)
Ty80

Je le souligne encore une fois, un terminal est un terminal, et un Shell est un Shell. Il y a toujours des gens qui ne font pas la différence entre un terminal et un Shell...

Ce problème est dû à une mauvaise configuration de votre terminal. Quelle que soit la puissance de Bash, il ne peut pas gérer l'analyse du code d'échappement ANSI, tout comme vous ne pouvez pas afficher les couleurs d'un moniteur en noir et blanc si vous remplacez i3 par. i7.

Vous avez deux options :

  1. Désactiver la coloration des complétions Git

  2. Ajustez votre terminal pour prendre en charge le code d'échappement ANSI

Si votre émulateur de terminal prend en charge la couleur, la modifier $TERM résout généralement le problème. Pour des instructions plus détaillées, veuillez vous référer à http://www.tldp.org/HOWTO/Text-Terminal-HOWTO-16.html et aux liens sur cette page.

大家讲道理

Qu'est-ce que c'est ^[[m^[[K dans Bash ?

est le code d'échappement ANSI. ^[ représente la touche ESC, et ^[[ signifie ESC[ représente CSI (Control Sequence Introducer), donc ^[[m^[[K représente CSI m, CSI K. Quant à ce que signifient CSI m et CSI K, vous devez consulter le tableau.

La forme complète de

CSI m est CSInm, qui représente SGR – Select Graphic Rendition, qui est l'effet de rendu du texte dans la console. Où n vaut 0 pour plus de paramètres. Lorsqu'il n'y a pas de paramètres, cela devient CSI m, ce qui signifie réinitialiser l'effet de rendu par défaut. Voir ici pour plus de détails. (Le PS de la console personnalisée l'utilise également pour définir la couleur.) Par exemple, le ^[[1;43m au début de la question indique l'effet de rendu « gras ; rouge ».

La forme complète de

CSI K est CSInK, ce qui signifie EL – Effacer la ligne, c'est-à-dire supprimer une partie de la ligne. Parmi eux, n est également un paramètre Lorsque n est 0 ou omis, il s'agit de CSI K, ce qui signifie supprimer de la position du curseur jusqu'à la fin de la ligne. Pour d'autres situations, veuillez vous référer à la description dans Wikipédia.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!