Por que o Ctrl + V não cola no Bash (shell do Linux)?

174

Quando copio algo para a área de transferência e pressiono Ctrl + V no Bash, nada acontece; No entanto, clicar com o botão direito e selecionar Colar faz o trabalho.

Por quê? Existe algum problema razoável (tenho certeza que existe) por trás desse comportamento no Linux?

    
por Yasser Zamani 07.05.2012 / 09:44

7 respostas

341

Nos dias de terminais físicos terminal , as pranchetas para toda a sessão não existiam, apenas alguns programas suportavam copiar / colar interno - geralmente sob o nome de "buffers" ou "kill rings" - e usavam vários pressionamentos de tecla diferentes. Por exemplo, o shell bash usa Ctrl K ou Ctrl U para "matar "(cut), Ctrl Y para" puxar "(colar); isso vem de o editor emacs .

Ctrl C quase em todo lugar no Unix era o tecla "interrupt" , usada para cancelar o programa ou operação atual. A tecla Ctrl V geralmente significava "verbatim insert" - isto é, inserir o caractere seguinte literalmente sem executar nenhuma ação associada. Por exemplo, um normal Esc alterna para o modo de comando no editor vi , mas Ctrl V , Esc irá inserir o caractere ESC no documento.

O uso de Ctrl C para copiar e Ctrl V para colar da área de transferência em toda a sessão foi introduzido pelo Mac OS em 1983 e pelo Microsoft Windows 3.x em 1990. (Versões anteriores do Windows (1.xe 2.x), assim como o IBM OS / 2, suportavam apenas o Teclas IBM CUA Ctrl Ins para copiar e Deslocar Ins para colar; estes atalhos permanecem suportados por todas as versões do Windows.)

Quando as GUIs com suporte à área de transferência finalmente atingiam o Unix, as teclas pressionadas Ctrl já estavam sendo usadas por muitos programas de terminal. Além disso, a interface gráfica X tinha um pouco mecanismos diferentes :" seleções "e" buffers de corte ". Mesmo agora você pode selecionar o texto em um programa e inseri-lo usando o botão do meio do mouse, sem nenhuma ação explícita de cópia.

Em suma, no momento em que o Xterm e o Terminal GNOME foram escritos (imagino que você use o último), Ctrl V já tinha um significado completamente diferente por muitos anos e não pode ser mudado. Além disso, um método alternativo de copiar texto - a "seleção" - já estava presente no X11, portanto, a ação explícita de copiar / colar provavelmente não era considerada tão importante quanto no Windows. Isto significa que diferentes atalhos de teclado devem ser selecionados - por exemplo, a maioria dos programas terminais modernos, como o Terminal GNOME, use Ctrl Deslocamento C e < kbd> Ctrl Deslocamento V . (Se você usar o Xterm, os mesmos atalhos podem ser adicionados manualmente usando o XTerm * vt100 * traduções Xresource. O Rxvt não tem essa opção.)

(A maioria dos kits de ferramentas X11 também suportam as chaves "copiar" e "colar" CUA, que não entram em conflito com os programas terminais. Infelizmente, as implementações são bastante inconsistentes - Ctrl Ins copia para a "área de transferência" na maioria dos programas (GTK, Qt4, mas ignorados pelo Xaw), entretanto, Desloca Ins pastas da "seleção principal" na maioria das GTK e programas Qt4, mas a partir de "clipboard" no Firefox, e dos buffers de corte agora obsoletos no agora obsoleto Xaw.

Tudo isso dito, alguns terminais ou consoles (em particular, o console do Windows 10) do suportam essas chaves. Como o console do Windows sempre tinha um modo "mark / select" separado, Ctrl C agora também tem dois significados baseados em contexto - no modo normal ele envia uma interrupção, em select modo que copia para a área de transferência (assim como Enter usado para).

Enquanto isso, as ferramentas de linha de comando do Windows nunca realmente usavam Ctrl V para nada, então era obrigado a "colar" sem atrapalhar muito qualquer coisa. Fazer o mesmo em terminais do tipo Unix, no entanto, seria mais problemático.

    
por 07.05.2012 / 10:03
42

Use Ctrl Deslocando V para colar.

Ctrl com outros caracteres é normalmente usado pelo shell para funções especiais.

    
por 07.05.2012 / 09:45
17

Esta é a sua cópia de uso geral para colar configurações com terminais populares:

gnome-terminal (mais popular no Linux)
Copiar : Ctrl Deslocar C
Colar : Ctrl Deslocar V
Nota : Selecionar para copiar e clique do meio para colar também funciona, mas ele usa uma área de transferência alternativa.

PuTTY (terminal mais popular no Windows)
Copiar : (selecione com mouse, sem interação com o teclado)
Colar : Clique com o botão direito do mouse em (ou mais confiável: shift Clique com o botão direito do mouse ) Nota : Aplicativos que entrada do mouse (como vim e links ) pode roubar Clique com o botão direito do mouse - shift Clique com o botão direito do mouse sempre funcionará em qualquer aplicativo .

Terminal OSX
Copiar : Apple C
Colar Apple: V
Observação: os aplicativos que usam o controle do mouse (como vim e links ) podem substituir o que isso significa para selecionar texto, caso em que a cópia não funcionará da maneira esperada. Nesses casos, mantenha pressionado Control enquanto arrasta o mouse para selecionar. A interação do mouse com aplicativos é desativada por padrão nas configurações do terminal, portanto, a maioria das pessoas nem saberá disso.

    
por 07.05.2012 / 23:22
16

É uma tradição profundamente enraizada que a tecla Ctrl junto com uma letra gera caracteres de controle ASCII encontrados ao subtrair 64 do valor ASCII da letra maiúscula. Este cálculo mapeia Ctrl - A para 1, e assim por diante. Por exemplo Ctrl - I é o Tab e Ctrl - J é o avanço de linha. / p>

Não existe tradição similar para Ctrl - Shift . Ctrl - Não é esperado que o Shift - V produza nenhum caractere específico.

Os emuladores de terminal devem suportar a tradição passando transparentemente pela convenção Ctrl , permitindo que ela apareça como entrada de caractere para os programas que estão sendo operados através da janela do terminal. Programas baseados em terminal mapeiam chaves de controle para comandos. Por exemplo, o Bash usa Ctrl - V como um comando que significa "pegue o próximo caractere literalmente". Isso permite incorporar um caractere de controle na linha de comando. Se o terminal rouba as chaves de controle para uso próprio, tais comandos ficam indisponíveis. Portanto, interceptar Ctrl - V para uma meta função está fora de questão (pelo menos em uma configuração padrão).

No entanto, os emuladores de terminal são livres para interceptar Ctrl - Deslocamento - V que não é esperado gerar um caractere. Ctrl - Deslocamento - V não é um padrão; é uma coisa do Terminal Gnome (que pode estar em outros terminais).

Em desktops Unix baseados em X, a convenção é que nenhum comando é necessário para copiar. Você acabou de selecionar o texto. E o botão do meio cola esse texto em outro lugar. Você descobrirá que ele funciona tanto no Xterm quanto no Gnome Terminal e no Firefox.

Ctrl - V é uma convenção do Microsoft Windows, que é uma imitação da Apple - V da Macintosh.

    
por 07.05.2012 / 16:34
2

Podemos usar o botão Inserir do teclado para copiar e colar (nos teclados antigos pode estar faltando)

Copiar : Ctrl Inserir
Colar : Ctrl Shift Inserir

    
por 08.05.2015 / 15:42
2

Para mim, a maneira mais simples de copiar e colar no shell é:

Selecione o código que você quer e, em seguida, clique nele com a tecla do meio do mouse

    
por 03.08.2015 / 14:57
1

você também pode usar o botão do meio e o mouse se estiver com preguiça e selecionar um comando a partir de um documento de texto, script, página da Web ou fórum. Depois de selecionar o comando pretendido, simplesmente vá para o terminal e clique no botão do meio do mouse. Eu uso este método como eu uso o filhote de cachorro linux que não parece apoiar o comportamento normal de clicar com o botão direito e colar. Ele faz em uma janela de manipulador de arquivos, mas não em uma janela de terminal. Não sei porque, mas eu estou quieto satisfeito Eu descobri sobre o método do botão do meio, muito útil! ; -)

    
por 19.05.2015 / 18:08