Por que o modo de colar entre colchetes é ativado esporadicamente na tela do meu terminal?

18

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

Eu freqüentemente copio comandos bash de minhas anotações ou da Internet e às vezes recebo símbolos 0 ~ e 1 ~ estranhos que envolvem coisas que eu copiei. É muito chato e isso acontece de maneira totalmente aleatória.

Depois de uma longa pesquisa, descobri que essa coisa é chamada de modo de colagem em colchetes então agora eu uso este comando printf "\e[?2004l" para consertar o meu terminal, se esse modo foi ativado de repente.

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

    
por artemdevel 16.08.2015 / 20:26

3 respostas

6

Você pode desativar o modo de colagem entre parênteses.

Para tentar 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 em ~/.inputrc , ou todo o sistema em /etc/inputrc (ou onde quer que esteja no Ubuntu).

    
por jwd 24.02.2016 / 19:47
4

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

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

    
por MOHRE 06.05.2017 / 06:31
1

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 colar entre colchetes (vamos chamá-lo de shell A)
  • Eu fiz ssh em um computador com meu shell configurado para uma versão mais antiga do bash, que não suporta colar entre colchetes (shell B)

O problema é que o meu programa de terminal ainda pensa que colar entre colchetes é habilitado ao passar do shell A para o shell B, então ele continua adicionando os caracteres ao redor do seu conteúdo colado (0 ~ e 1 ~ bits). O Shell B não os suporta, então apenas os mantém inalterados. Você precisa dizer ao seu terminal para desativar a colagem entre colchetes fazendo com que o seu shell imprima uma seqüência de escape especial - que é o que o printf "\e[?2004l" faz.

Existem algumas maneiras de resolver o problema:

  1. Se você não se importa com a colagem entre colchetes, desative-a no shell A para que ela nunca seja ativada (resposta do @ jwd)

  2. Se quiser continuar usando a colagem entre colchetes no shell A, mas desabilitar no shell B, adicione a sequência de escape ao seu .bashrc (resposta do @MHHRE)

  3. Atualize o shell B para suportar a colagem entre colchetes, para que interprete adequadamente os caracteres 0 ~ e 1 ~.

Nota: se você estiver usando a tela GNU, você precisa executar o comando printf fora da tela. Não parece funcionar enquanto dentro.

    
por rjh 02.01.2018 / 16:23