2012-05-07 07:44:30 +0000 2012-05-07 07:44:30 +0000
196
196

Porque é que Ctrl + V não cola em Bash (Linux shell)?

Quando Copio algo para a prancheta e carrego em Ctrl + V em Bash, nada acontece; No entanto, clicando com o botão direito do rato e seleccionando Paste faz o trabalho.

Porquê? Existe algum problema razoável (tenho a certeza que existe) por detrás deste comportamento no Linux?

Respostas (7)

364
364
364
2012-05-07 08:03:14 +0000

Nos dias de terminais físicos , não existiam pranchetas de sessão, apenas poucos programas suportavam cópia/colagem interna - frequentemente sob o nome de “buffers” ou “kill rings” - e usavam vários toques de teclas diferentes. Por exemplo, o bash shell usa CtrlK ou CtrlU para “kill” (cortar), CtrlY para “yank” (colar); isto vem de o editor emacs .

CtrlC em quase todo o Unix era a tecla “interrupt” , usada para cancelar o programa ou operação atual. A tecla CtrlV significava muitas vezes “inserir literalmente” - ou seja, inserir o seguinte caracter literalmente sem executar qualquer acção associada. Por exemplo, um Esc normal muda para modo de comando no editor vi, mas CtrlV, Esc irá inserir o caracter ESC no documento.

A utilização de CtrlC para copiar e CtrlV para colar a partir da área de transferência da sessão foi introduzida pelo Mac OS em 1983 e Microsoft Windows 3.x em 1990. (Versões anteriores do Windows (1.x e 2.x), bem como IBM OS/2, só suportava as teclas IBM CUA CtrlIns para copiar e ShiftIns para colar; estes atalhos permanecem suportados por todas as versões do Windows)

Quando as GUIs com suporte de clipboard finalmente chegaram ao Unix, as teclas Ctrl já estavam em uso por muitos programas terminais. Além disso, a interface gráfica X tinha alguns mecanismos diferentes : “seleções” e “buffers de corte”. Mesmo agora você pode selecionar texto em um programa e inseri-lo usando o botão central do mouse, sem qualquer ação de cópia explícita.

Em resumo, no momento em que Xterm e GNOME Terminal foram escritos (estou supondo que você use o último), CtrlV já tinha um significado completamente diferente por muitos anos e não podia ser alterado. Além disso, um método alternativo de copiar texto - a “selecção” - já estava presente no X11, pelo que uma acção explícita de copiar/colar provavelmente não foi considerada tão importante como seria no Windows. Isto significa que tiveram de ser seleccionados diferentes atalhos de teclado - por exemplo, a maioria dos programas terminais modernos, como o GNOME Terminal, usam CtrlShiftC e CtrlShiftV. (Se usar Xterm, os mesmos atalhos podem ser adicionados manualmente usando o XTerm*vt100*translations Xresource. Rxvt não tem essa opção.)

(A maioria dos conjuntos de ferramentas X11 também suporta as teclas “copy” e “paste” da CUA, que não entram em conflito com os programas terminais. Infelizmente, as implementações são bastante inconsistentes - CtrlIns copia para a “prancheta” na maioria dos programas (GTK, Qt4, mas ignorado pelo Xaw); no entanto, ShiftIns cola da “selecção primária” na maioria dos programas GTK e Qt4, mas da “prancheta” no Firefox, e dos cut-buffers agora obsoletos no agora obsoleto Xaw. )


Dito isto, alguns terminais ou consolas (em particular, a consola Windows 10) do suportam estas teclas. Como a consola Windows sempre teve um modo “mark/select” separado, o CtrlC agora também tem dois significados baseados no contexto - em modo normal envia uma interrupção, em modo selectivo copia para a área de transferência (tal como o Enter costumava fazer).

Entretanto, as ferramentas de linha de comando do Windows nunca realmente utilizaram o CtrlV para nada, por isso estava obrigado a “colar” sem perturbar muito nada. Fazer o mesmo em terminais do tipo Unix, no entanto, seria mais problemático.

48
48
48
2012-05-07 07:45:55 +0000

Use CtrlShiftV para colar.

Ctrl com outros caracteres é normalmente usado pela concha para funções especiais.

21
21
21
2012-05-07 21:22:43 +0000

Aqui está a sua configuração de pasta de cópia de uso geral com terminais populares:

gnome-terminal (mais popular no Linux) Copy : CtrlShiftC Paste : CtrlShiftV Note* : Select-to-copy e middle-click para colar também funciona, mas utiliza um clipboard alternativo.

PuTTY (terminal mais popular em Windows) Copy : (seleccione com o rato, sem interacção com o teclado) Paste : Clique com o botão direito do rato (ou de forma mais fiável: shiftRight-click) Note* : As aplicações que utilizam o rato (como vim e links) podem roubar o botão direito do rato – shiftRight-click funcionará sempre em qualquer aplicação

** Terminal OSX** Copiar : AppleC Paste* : AppleV Note: As aplicações que assumem o controlo do rato (como vim e links) podem anular o que significa seleccionar o texto, neste caso a cópia não funcionará da forma que se espera. Nesses casos, mantenha o Controlo pressionado enquanto arrasta o rato para seleccionar. A interacção do rato com aplicações é desactivada por defeito nas definições do seu terminal, pelo que a maioria das pessoas nem sequer saberá disto.

17
17
17
2012-05-07 14:34:50 +0000

É uma tradição profundamente enraizada que a chave Ctrl juntamente com uma letra gera caracteres de controlo ASCII encontrados subtraindo 64 do valor ASCII da letra maiúscula. Este cálculo mapeia Ctrl-A para 1, e assim por diante. Por exemplo, Ctrl-I é Tab e Ctrl-J é linefeed.

Não existe uma tradição semelhante para Ctrl-Shift. Não se espera que Ctrl-Shift-V produza qualquer carácter específico.

Os emuladores de terminal devem suportar a tradição passando transparentemente através da convenção Ctrl, deixando-a aparecer como entrada de caracteres para os programas que estão a ser operados através dessa janela terminal. Os programas baseados em terminais mapeiam as teclas de controlo dos comandos. Por exemplo, Bash usa Ctrl-V como um comando que significa “tomar o próximo caracter literalmente”. Isto permite incorporar um carácter de controlo na linha de comandos. Se o terminal roubar teclas de controlo para seu próprio uso, tais comandos ficam indisponíveis. Assim interceptar Ctrl-V para uma meta-função está fora de questão (pelo menos numa configuração padrão).

No entanto, os emuladores de terminal são livres de interceptar Ctrl-Shift-V que não é esperado que gere um caractere. Ctrl-Shift-V não é uma norma; é uma coisa de Terminal Gnome (que pode estar em alguns outros terminais).

Nos desktops Unix baseados em X a convenção é que não é necessário nenhum comando para copiar. Basta seleccionar o texto. E o botão do meio cola esse texto noutro lugar. Verá que funciona tanto no Xterm como no Gnome Terminal e no Firefox.

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

3
3
3
2015-08-03 12:57:48 +0000

Para mim, a forma mais simples de copiar pasta na concha é:

Seleccione o código desejado e depois passe-o clicando na tecla do meio do rato

2
2
2
2015-05-08 13:42:05 +0000

Podemos usar o botão de inserir teclado para copiar e colar (Em teclados antigos pode faltar)

Copiar : CtrlInsert Paste : CtrlShiftInsert

1
1
1
2015-05-19 16:08:05 +0000

também pode usar o botão do meio e um rato se se sentir preguiçoso e seleccionar um comando de um documento de texto, script ou web ou fórum. depois de seleccionar o comando pretendido basta passar para o seu terminal e clicar no botão do meio do rato. Eu utilizo este método como se fosse um linux de cachorro que não parece suportar o comportamento normal de clicar e colar com o botão direito do rato. faz isso numa janela do manipulador de ficheiros, mas não numa janela do terminal. não sei porquê mas estou satisfeito por ter descoberto o método do botão do meio, muito útil! ;-)