Caracteres estranhos na conclusão do GIT

5

Estou correndo bash

GNU bash, version 4.3.25(1)-release (x86_64-apple-darwin13.4.0)

no OS X 10.10.1. Há uma semana, percebi que o autocompletion parou de funcionar, mas apenas para o git. Estou usando este script para autocompletar o git:

link

Alguns dias depois que ele parou de funcionar, percebi que o preenchimento automático ainda funciona para comandos que começam com letra 's' (por exemplo, status, show, stash). Depois disso, tentei autocompletar este comando:

git c

e aqui está a saída:

user:~$ git c^[[m^[[K

c^[[m^[[Kat-file
c^[[m^[[Kheck-attr
c^[[m^[[Kheck-ignore
c^[[m^[[Kheck-mailmap
c^[[m^[[Kheck-ref-format
c^[[m^[[Kheckout
c^[[m^[[Kheckout-index
c^[[m^[[Kherry
c^[[m^[[Kherry-pick
c^[[m^[[Kitool
c^[[m^[[Klean
c^[[m^[[Klone
c^[[m^[[Kolumn
c^[[m^[[Kommit
c^[[m^[[Kommit-tree
c^[[m^[[Konfig
c^[[m^[[Kount-objects
c^[[m^[[Kredential
c^[[m^[[Kredential-cache
c^[[m^[[Kredential-osxkeychain
c^[[m^[[Kredential-store
c^[[m^[[Kvsexportcommit
c^[[m^[[Kvsimport
c^[[m^[[Kvsserver

Como você pode ver, alguns caracteres estranhos (escape?) são inseridos após a primeira letra de cada comando (o mesmo acontece para todas as outras letras que não sejam 's'). Por causa desses caracteres, o preenchimento automático não está funcionando como esperado.

Alguém tem uma ideia do que poderia causar isso? Eu nem sei como depurar isso, então qualquer dica é bem vinda.

    
por xx77aBs 29.01.2015 / 10:58

1 resposta

4

Essas estranhas sequências de escape são comandos que mudam de cor.

O código de conclusão executa o seguinte comando para listar os comandos disponíveis:

git help -a|egrep '^  [a-zA-Z0-9]'

A saída de git help -a é assim:

adicione grep remoto   adicionar - objeto de hash interativo ext remoto   Sou ajuda remoto-fd   …   fsck-objects receive-pack árvore de gravação   gc reflog   get-tar-commit-id relink

Se o grep estiver configurado para imprimir a parte correspondente da linha em cores, os nomes dos comandos que estão na primeira coluna terão sua primeira letra destacada:

$ git help -a|egrep --color=always '^  [a-zA-Z0-9]' | cat -v | head -n 1
^[[01;31m^[[K  a^[[m^[[Kdd                      grep                     remote

Quando o bash vê essa saída, ele acha que ^[[01;31m^[[K , a^[[m^[[Kdd , grep e remote são comandos possíveis. O primeiro não aparece, os dois últimos estão corretos, o segundo é mutilado.

Você precisa configurar grep para não use cores quando sua saída não estiver em um terminal. Se você aliasse egrep a egrep --color=always (e idem para grep e fgrep ), altere para --color=auto . Se você tiver definido a variável GREP_OPTIONS em algum lugar, altere --color=always para --color=auto .

    
por 29.01.2015 / 23:40

Tags