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


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

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


169


origem


Shift-Insert também funciona - bonyiii
eu prefiro Ctrl-Shift-Vpessoalmente. - amalloy
Você também pode usar Shift + Insert na maioria dos ambientes shell. - Fabian
E se você não tiver uma chave Insert? - Ben Racicot
ele não funciona no prompt de comando do Windows - phuclv


Respostas:


Nos dias de física terminais, não existiam pranchetas para toda a sessão, 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 festança usos de shell CtrlK ou Ctrlvocê para "matar" (cortar), CtrlY para "puxar" (colar); isso vem de a emacs editor.

CtrlC quase em todos os lugares no Unix foi o tecla "interromper", usado para cancelar o programa ou operação atual. o CtrlV key geralmente significa "insert verbatim" - isto é, insira o caractere seguinte literalmente sem executar nenhuma ação associada. Por exemplo, um normal Esc muda para o modo de comando no vi editor, mas CtrlV, Esc irá inserir o ESC personagem no documento.

O uso de CtrlC para copiar e CtrlV 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 IBM CUA chaves CtrlIns para copiar e MudançaIns colar; esses atalhos permanecem suportados por todas as versões do Windows.)

Quando GUIs com suporte a clipboard finalmente chegaram ao Unix, o Ctrl keypresses já estavam em uso por muitos programas de terminal. Além disso, a interface gráfica X teve 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 qualquer ação de cópia explícita.

Em suma, no momento em que o Xterm e o GNOME Terminal foram gravados (suponho que você use o último), CtrlV  já tinha um significado completamente diferente por muitos anos e não poderia 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. Isso significa que diferentes atalhos de teclado tiveram que ser selecionados - por exemplo, a maioria dos programas de terminal modernos, como o GNOME Terminal, usam CtrlMudançaC e CtrlMudançaV. (Se você usar o Xterm, os mesmos atalhos podem ser adicionados manualmente XTerm * vt100 * traduções Xresource. 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 - CtrlIns copia para o "clipboard" na maioria dos programas (GTK, Qt4, mas ignorado pelo Xaw); Contudo, MudançaInspastas da "seleção principal" na maioria dos programas GTK e Qt4, mas a partir de "clipboard" no Firefox, e dos buffers de corte agora obsoletos no agora obsoleto Xaw.)


Tudo o que disse, alguns terminais ou consoles (em particular, o console do Windows 10) Faz suportam estas chaves. Como o console do Windows sempre tinha um modo "marcar / selecionar" separado, CtrlC agora também tem dois significados baseados no contexto - no modo regular ele envia uma interrupção, no modo de seleção copia para a área de transferência (assim como Entrar costumava).

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


332



Hmm. No Vim, “yank” significa copiar em vez de colar. Isso parece fazer mais sentido também. Você tem certeza sobre o significado deste termo aqui? - Konrad Rudolph
Sim eu tenho certeza. Bash herda os atalhos padrão de seus equivalentes Emacs. - grawity
@grawity: seu último comentário é um pouquinho mal orientado. Bash oferece dois modos de edição de linha de comando, modo vim e modo emacs. Acontece que o modo emacs é o padrão na maioria das instalações. Isso aumenta a ambigüidade no uso do termo puxãoaté mesmo para o bash. - rahmu
A-ha! Eu sabia os desenvolvedores do Vimperator cometeram um erro quando trocaram <C-v> para i na versão 3, mas eu não conseguia colocar o dedo porque. - Izkata
@Colin: Você ainda perdeu a distinção entre a área de transferência e a seleção X. Existem várias seleções (PRIMARY, SECONDARY, CLIPBOARD), mas apenas uma delas é geralmente chamada de "clipboard" - a seleção CLIPBOARD, porque é onde Ctrl-C copia, e é onde cola Ctrl-V. A seleção principal não é a área de transferência. - grawity


Usar CtrlMudançaV para colar.

Ctrl com outros chars é geralmente usado pelo shell para funções especiais.


41



Então, por que o Linux não registra CTRL + SHIFT para funções especiais; Acho que copy-paste é mais típico de alguns usuários do que funções especiais, certo? - Yasser Zamani
Os shells já existiam antes de existirem Terminais e GUIs gráficos com funcionalidade de recortar e colar, então seu argumento não é realmente válido. @YasserZamani - slhck
Ctrl + Shift + V é executado pelo emulador de terminal (supondo que você esteja usando o Terminal GNOME) e não bashem si. Se você estiver fora de um ambiente GUI, ou se estiver usando outro emulador de termos, isso provavelmente não funcionará. Não pense que este comando é portátil. - rahmu
@rahmu Oh, não tinha ideia sobre isso. Use apenas o estoque do Ubuntu instala. Existe um comando universal? - Akash
Provavelmente não há um para acessar a área de transferência (somente Shift + Ins para a seleção principal). Até a prancheta em si é uma coisa do X11, não acessível a partir do tty. No entanto, Ctrl + Shift + V é suportado pelo Terminal do GNOME, pelo Terminal Xfce4, pelo KDE Konsole; Isso abrange os ambientes de GUI mais populares. - grawity


Aqui está sua cópia de uso geral colar configurações com terminais populares:

gnome-terminal (mais popular no Linux)
cópia de: CtrlMudançaC
Colar: CtrlMudançaV
Nota: Selecionar para copiar e clique do meio para colar também funciona, mas usa uma área de transferência alternativa.

PuTTY (terminal mais popular no Windows)
cópia de: (selecione com mouse, sem interação com o teclado)
Colar: Clique com o botão direito  (ou mais confiável: mudançaClique com o botão direito)
Nota: Aplicativos que usam o mouse (como vim e links) pode roubar Clique com o botão direito - mudançaClique com o botão direito sempre funcionará em qualquer aplicativo.

Terminal OSX
cópia de: maçãC
Colar: maçãV
Nota: Apps que tomam o controle do mouse (como vim e links) pode substituir o que significa selecionar o texto, caso em que a cópia não funcionará da maneira esperada. Nesses casos, segure Ao controle enquanto você arrasta o mouse para selecionar. A interação do mouse com os aplicativos é desativada por padrão nas configurações do terminal, portanto, a maioria das pessoas nem saberá disso.


17



Não é cmd.exe mais popular que o PuTTY no Windows? :-) - Ben
@Ben Não como um terminal SSH. - tylerl
Não, cmd.exe não é um terminal SSH. Isso é muito verdade. - Ben
@Ben: Não é um terminal - apenas uma casca. O terminal padrão no Windows é o componente "Windows Console" do csrss. - grawity
@ Ben, mas clique direito para colar também funciona cmd.exe (e é a única maneira, se você não quiser abrir o menu> editar> colar) em modo de edição rápida. Não há atalho no prompt de comando pré-win10 - phuclv


É uma tradição profundamente enraizada que o Ctrl key juntamente com uma carta gera caracteres de controle ASCII encontrados ao subtrair 64 do valor ASCII da letra maiúscula. Este cálculo mapeia Ctrl-UMA para 1 e assim por diante. Por exemplo Ctrl-Eu é Aba e Ctrl-J é alimentação de linha.

Não há tradição semelhante para Ctrl-Mudança. Ctrl-Mudança-V Não se espera que produza qualquer carácter específico.

Os emuladores de terminal devem suportar a tradição, passando de forma transparente Ctrl convenção, deixando-a aparecer como entrada de caracteres para os programas que estão sendo operados através daquela janela de 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. Então interceptando Ctrl-V para uma meta-função está fora de questão (pelo menos em uma configuração padrão).

No entanto, emuladores de terminal são livres para interceptar Ctrl-Mudança-Vque não é esperado para gerar um personagem. Ctrl-Mudança-V não é um padrão; é uma coisa do Terminal Gnome (que pode estar em alguns 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 de maçã-V do Macintosh.


16



Não é exatamente subtração - tradicionalmente Ctrl tem limpou os 6º e 7º bits do personagem; por causa disso, Ctrl + Shift + letter funciona de forma idêntica a Ctrl + Letter na maioria dos terminais (a menos que seja explicitamente substituído pelo terminal, como no caso de atalhos de copiar / colar). - grawity
Como as chaves são essencialmente ordenadas aleatoriamente em relação ao padrão ASCII, a ROM do programa inclui várias tabelas de consulta que auxiliam na geração dos códigos ASCII. ... Segurar a tecla CONTROL quando outra tecla for pressionada faz com que a outra tabela procure. [Manual técnico da série VT100, 4.4.9.3, Digital]. - Kaz
@Linger agradece pela edição. Ele renderiza muito bem, mas não tem como eu digitar tudo isso <kbd> tags em posts futuros. - Kaz
Ctrl-A é 1. Como posso tentar isso? O meu terminal Gnome não faz nada quando pressiono Ctrl-A. - robert


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

cópia de: CtrlInserir
Colar: CtrlMudançaInserir 


2





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

Selecione o código desejado e, em seguida, clique nele tecla do meio do mouse


2



Contanto que você tenha uma chave do meio do mouse. - jpierson
@jpierson não que eu esteja recomendando fortemente isso, mas você pode escrever um pequeno script que simplesmente usa xdotool click 2 para emular o clique do terceiro botão para você. Então, em qualquer gerenciador de janelas / ambiente de área de trabalho, você pode vincular esse script a uma chave - digamos mod  i (para inserção) ou qualquer que seja o tipo de atalhos que você possa ter disponível (ou qualquer mod que possa significar - o que realmente depende de onde você liga isto) - dylnmc


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! ;-)


1