>  Q&A  >  본문

git completion error in bash

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

阿神阿神2727일 전648

모든 응답(2)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-05-02 09:30:05

    다시 한번 강조하지만 터미널은 터미널이고, 쉘은 쉘이다. 터미널과 쉘을 구분하지 못하는 사람들이 늘 존재한다...

    이 문제는 터미널의 부적절한 구성으로 인해 발생합니다. Bash가 아무리 강력해도 ANSI 이스케이프 코드 분석을 처리할 수 없습니다. i3를 대체하면 흑백 모니터 디스플레이 색상을 만들 수 없는 것과 같습니다. i7.

    두 가지 옵션이 있습니다:

    1. Git 완료 색상 표시 끄기

    2. ANSI 이스케이프 코드를 지원하도록 터미널을 조정하세요

    터미널 에뮬레이터가 색상을 지원하는 경우 색상을 변경하면 $TERM 일반적으로 문제가 해결됩니다. 더 자세한 지침은 http://www.tldp.org/HOWTO/Text-Terminal-HOWTO-16.html 및 이 페이지의 링크를 참조하세요.

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-05-02 09:30:05

    Bash에서 ^[[m^[[K는 무엇인가요?

    은 ANSI 이스케이프 코드입니다. ^[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이 0이거나 생략되면 커서 위치부터 줄 끝까지 삭제한다는 의미인 CSI K입니다. 다른 상황에 대해서는 Wikipedia의 설명을 참조하세요.

    회신하다
    0
  • 취소회신하다