Por que o modo de pasta entre colchetes é ativado esporadicamente na minha tela do terminal?

23

Eu uso o Ubuntu 14.04 e tenho um problema estranho com a tela do meu terminal, que está me incomodando bastante. Alguém poderia me ajudar com isso ou me explicar se estou fazendo algo errado ou não-linux-way? Eu tenho algum tipo de solução, mas quero entender por que isso acontece repetidamente.

Costumo copiar comandos bash das minhas anotações ou da Internet e, às vezes, recebo símbolos estranhos 0 ~ e 1 ~ que envolvem coisas que copiei. É muito chato e isso acontece de forma totalmente aleatória.

Depois de uma longa pesquisa, descobri que essa coisa é chamada modo de colagem entre colchetes ; agora, uso esse comando printf "\e[?2004l"para corrigir meu terminal se esse modo for ativado repentinamente.

É possível desativar esse recurso permanentemente de alguma forma? Eu o enfrentei em todas as máquinas Ubuntu em que trabalho agora. Anteriormente, usei o Ubuntu 10.10 e 12.04 e nunca tive esse problema antes.

artemdevel
fonte

Respostas:

11

Você pode desativar o modo de colar entre colchetes.

Para experimentá-lo temporariamente, no bash:

bind 'set enable-bracketed-paste off'

Então, se você gosta de como isso se comporta, você pode colocar a configuração no seu ~/.inputrc, ou em todo o sistema em /etc/inputrc(ou onde quer que esteja no Ubuntu).

jwd
fonte
4
Tudo o que isso parece fazer por mim é fazê-lo, para que eu não possa digitar a letra "p" (e apenas uma letra minúscula "p"), ou colá-la como tudo e nada mais
Brian diz Reinstate Monica
@BrianLeishman Devido à maneira peculiar de analisar os bindargumentos que não reconhece, é o que acontecerá se você executar este comando usando o Readline antes da versão 7 ou o Bash antes do 4.4. Esta resposta não fará nada de útil até a próxima versão do Ubuntu (17.04).
Anthony G - justice for Monica
A printfabordagem funciona, mas não funciona quando inserida na minha .bashrc, e o recurso de alguma forma se ativa periodicamente. A bindabordagem interrompe meu teclado (a ptecla não funciona , and putting that line in my ~ / .inputrc` funciona por 10 segundos e, em seguida, o console começa a vomitar para -enaset-enaset-...sempre após 10 segundos de uso. Eu finalmente atualizei manualmente o bash 4.4 da fonte para corrigir o estúpido problema:
Cloud
1
O comando correto é bind 'set enable-bracketed-paste off'(com um espaço em vez do primeiro `-`` Edição apenas um personagem não parece possível..
Seta
7

Você pode colocar esse comando no seu bashrc. Em seguida, ele se aplicaria toda vez que você abrir seu terminal.

Basta digitar vi ~/.bashrce adicionar printf "\e[?2004l"no final e salvar o arquivo com:wq

MOHRE
fonte
Sim, eu fiz isso no começo, na verdade :) depois, desabilitei esse modo como o @jwd sugeriu.
Artemdevel 6/17
1
echo 'printf "\e[?2004l"' >> ~/.bashrcfaz a mesma coisa em uma linha e você pode verificar com tail -n1 ~/.bashrc. Não há necessidade de usar vi.
pzkpfw 24/01
6

Para responder à sua pergunta original sobre por que isso acontece, aqui está um cenário possível:

  • Meu computador doméstico tinha uma nova versão do zsh que suportava pasta entre parênteses (vamos chamá-lo de shell A)
  • Coloquei um shsh em um computador com meu shell definido para uma versão mais antiga do bash, que não suporta pasta entre colchetes (shell B)

O problema é que meu programa de terminal ainda acha que a pasta entre colchetes está ativada quando o sshing do shell A para o shell B é ativado, por isso continua adicionando os caracteres ao redor do seu conteúdo colado (os bits 0 ~ e 1 ~). O Shell B não os suporta, apenas os passa inalterados. Você precisa dizer ao seu terminal para desativar a pasta entre parênteses, fazendo com que seu shell imprima uma sequência de escape especial - que é o que printf "\e[?2004l"faz.

Existem algumas maneiras de resolver o problema:

  1. Se você não se importa com a pasta entre colchetes, desative-a no shell A para que nunca seja ativada em primeiro lugar (resposta de @ jwd)

  2. Se você quiser continuar usando pasta entre parênteses no shell A, mas desabilitar no shell B, adicione a sequência de escape à sua .bashrc(resposta do @ MOHRE)

  3. Atualize o shell B para oferecer suporte à pasta entre colchetes, para que ele interprete adequadamente os caracteres 0 ~ e 1 ~.

Nota lateral: se você estiver usando a tela GNU, precisará executar esse printfcomando fora da tela. Não parece funcionar enquanto estiver dentro.

rjh
fonte
Obrigado @rjh :) Mas eu nunca usei o zsh ou tive um problema com o ssh como você descreveu. Parece que algo foi mal configurado no Ubuntu anos atrás.
Artemdevel