Pregunta ¿Por qué Ctrl + V no pega en Bash (shell de Linux)?


Cuando copio algo en el portapapeles y presiono Ctrl + V en Bash, no pasa nada; Sin embargo, al hacer clic derecho y seleccionar Pegar hace el trabajo.

¿Por qué? ¿Existe algún problema razonable (estoy seguro de que exista) detrás de este comportamiento en Linux?


169


origen


Shift-Insert también funciona - bonyiii
yo prefiero Ctrl-Shift-V, personalmente. - amalloy
También puedes usar Mayús + Insertar en la mayoría de los entornos de shell. - Fabian
¿Qué pasa si no tienes una tecla Insertar? - Ben Racicot
no funciona en el indicador de comandos de Windows también - phuclv


Respuestas:


En los días de la física terminalesno existían los portapapeles de toda la sesión, solo unos pocos programas soportaban copiar y pegar de forma interna (a menudo bajo el nombre de "buffers" o "kill rings") y usaban varias teclas diferentes. Por ejemplo, el intento usos de shell CtrlK o CtrlU "matar" (cortar), CtrlY para "tirar" (pegar); esto viene de el emacs editor.

Ctrldo casi en todas partes en Unix fue el tecla "interrumpir", usado para cancelar el programa u operación actual. los CtrlV clave a menudo significaba "inserción literal", es decir, inserta el siguiente carácter literalmente sin realizar ninguna acción asociada. Por ejemplo, una normal Esc cambia al modo comando en vi editor, pero CtrlV, Esc insertará el ESC personaje en el documento.

El uso de Ctrldo para copiar y CtrlV para pegar desde el portapapeles en toda la sesión fue presentado por Mac OS en 1983 y Microsoft Windows 3.x en 1990. (Las versiones anteriores de Windows (1.xy 2.x), así como IBM OS / 2, solo admitían el IBM CUA llaves CtrlEn s para copiar y CambioEn s pegar; estos accesos directos siguen siendo compatibles con todas las versiones de Windows).

Cuando las GUI con soporte para portapapeles finalmente llegaron a Unix, la Ctrl las pulsaciones de teclas ya estaban siendo utilizadas por muchos programas de terminal. Además, la interfaz gráfica X tenía algo diferentes mecanismos: "selecciones" y "búferes de corte". Incluso ahora puede seleccionar texto en un programa e insertarlo usando el botón central del mouse, sin ninguna acción de copia explícita.

En resumen, cuando se escribieron Xterm y GNOME Terminal (supongo que usas el último), CtrlV  ya tenía un significado completamente diferente por muchos años y no pudo ser cambiado. Además, un método alternativo de copiar texto, la "selección", ya estaba presente en X11, por lo que la acción explícita de copiar / pegar probablemente no se consideró tan importante como lo sería en Windows. Esto significa que se tuvieron que seleccionar diferentes atajos de teclado; por ejemplo, la mayoría de los programas modernos de terminales, como el Terminal GNOME, usan CtrlCambiodo y CtrlCambioV. (Si usa Xterm, los mismos atajos se pueden agregar manualmente usando XTerm * vt100 * traducciones Xresource. Rxvt no tiene esa opción).

(La mayoría de los kits de herramientas X11 también admiten las teclas "copiar" y "pegar" de CUA, que no entran en conflicto con los programas de terminal. Desafortunadamente, las implementaciones son bastante inconsistentes, CtrlEn s copias en el "portapapeles" en la mayoría de los programas (GTK, Qt4, pero ignorado por Xaw); sin embargo, CambioEn spega de la "selección principal" en la mayoría de los programas GTK y Qt4, pero del "portapapeles" en Firefox, y de los amortiguadores de corte ahora obsoletos en el ahora obsoleto Xaw).


Dicho todo esto, algunos terminales o consolas (en particular, la consola de Windows 10) hacer apoyar estas claves. Como la consola de Windows siempre tenía un modo separado de "marcar / seleccionar", Ctrldo ahora también tiene dos significados basados ​​en el contexto: en modo regular envía una interrupción, en el modo de selección copia al portapapeles (al igual que Entrar Acostumbrado a).

Mientras tanto, las herramientas de línea de comandos de Windows nunca realmente usado  CtrlV para cualquier cosa, por lo que estaba destinado a "pegar" sin perturbar demasiado. Sin embargo, hacer lo mismo en terminales tipo Unix sería más problemático.


332



Hmm. En Vim, "tirón" significa copiar en lugar de pegar. Esto parece tener más sentido también. ¿Estás seguro del significado de este término aquí? - Konrad Rudolph
Sí estoy seguro. Bash hereda los atajos predeterminados de sus equivalentes de Emacs. - grawity
@grawity: tu último comentario es un poco equivocado. Bash ofrece dos modos de edición de línea de comandos, vim-mode y emacs-mode. Simplemente sucede que emacs-mode es el predeterminado en la mayoría de las instalaciones. Eso sí aumenta la ambigüedad en el uso del término tirón, incluso para bash. - rahmu
A-ha! yo sabía los desarrolladores de Vimperator cometieron un error cuando cambiaron <C-v> a i en la versión 3, pero no pude entenderlo por qué. - Izkata
@ Colin: todavía te perdiste la distinción entre el portapapeles y la selección X. Hay varias selecciones (PRIMARIO, SECUNDARIO, CLIPBOARD), pero solo una de ellas se suele llamar "portapapeles": la selección CLIPBOARD, porque ahí es donde se copia Ctrl-C, y ahí es donde pega Ctrl-V. La selección principal no es el portapapeles. - grawity


Utilizar CtrlCambioV para pegar

Ctrl con otros caracteres generalmente el caparazón usa funciones especiales.


41



Entonces, ¿por qué Linux no registra CTRL + MAYÚS para funciones especiales en su lugar? Creo que copiar y pegar es más típico para algunos usuarios que esas funciones especiales, ¿verdad? - Yasser Zamani
Las conchas han existido mucho antes de que hubiera terminales gráficos y GUI con funcionalidad de cortar y pegar, por lo que su argumento no es realmente válido. @YasserZamani - slhck
Ctrl + Shift + V es ejecutado por el emulador de terminal (suponiendo que estés usando GNOME Terminal) y no por bashsí mismo. Si alguna vez está fuera de un entorno de GUI, o si está utilizando otro emulador de términos, probablemente esto no funcione. No creas que este comando es portátil. - rahmu
@rahmu Oh, no tenía idea de eso. Utilice solo instalaciones comunes de Ubuntu. ¿Hay un comando universal? - Akash
Probablemente no haya nadie para acceder al portapapeles (solo Shift + Ins para la selección principal). Incluso el portapapeles en sí es algo X11, no accesible desde tty's. Sin embargo, Ctrl + Shift + V es compatible con GNOME Terminal, Xfce4 Terminal, KDE Konsole; esto cubre los entornos de GUI más populares. - grawity


Aquí está su configuración de copiado de uso general con terminales populares:

gnome-terminal (más popular en Linux)
Dupdo: CtrlCambiodo
Pegar: CtrlCambioV
Nota: Seleccionar para copiar y medio clic pegar también funciona, pero usa un portapapeles alternativo.

PuTTY (terminal más popular en Windows)
Dupdo: (seleccionar con el mouse, sin interacción con el teclado)
Pegar: Botón derecho del ratón  (o más confiablemente: cambioBotón derecho del ratón)
Nota: Aplicaciones que toman la entrada del mouse (como vim y links) puede robar Botón derecho del ratón - cambioBotón derecho del ratón siempre funcionará en cualquier aplicación.

Terminal OSX
Dupdo: manzanado
Pegar: manzanaV
Nota: Aplicaciones que toman el control del mouse (como vim y links) puede anular lo que significa seleccionar texto, en cuyo caso la copia no funcionará de la manera que esperaba. En esos casos, mantenga presionado Controlar mientras arrastra el mouse para seleccionar. La interacción del mouse con las aplicaciones está deshabilitada de manera predeterminada en la configuración de su terminal, por lo que la mayoría de las personas ni siquiera lo sabrá.


17



No es cmd.exe más popular que PuTTY en Windows? :-) - Ben
@Ben No como una terminal SSH. - tylerl
No, cmd.exe no es una terminal SSH. Eso es muy cierto. - Ben
@Ben: no es un terminal en absoluto, solo un caparazón. El terminal predeterminado en Windows es el componente "Consola de Windows" de csrss. - grawity
@Ben pero clic derecho para pegar también funciona en cmd.exe (y es la única manera, si no desea abrir el menú> editar> pegar) en modo de edición rápida. No hay atajos en el símbolo del sistema pre-win10 - phuclv


Es una tradición profundamente arraigada que el Ctrl junto con una letra, genera caracteres de control ASCII que se encuentran al restar 64 del valor ASCII de la letra mayúscula. Este cálculo mapea Ctrl-UN a 1, y así sucesivamente. Por ejemplo Ctrl-yo es Lengüeta y Ctrl-J es avance de línea.

No hay una tradición similar para Ctrl-Cambio. Ctrl-Cambio-V no se espera que produzca ningún personaje específico.

Los emuladores de terminal deben respaldar la tradición al pasar de forma transparente Ctrl convención, dejándolo aparecer como una entrada de caracteres a los programas que se operan a través de esa ventana de terminal. Los programas basados ​​en terminales asignan claves de control a los comandos. Por ejemplo, Bash usa Ctrl-V como un comando que significa "tomar el siguiente carácter literalmente". Esto le permite incrustar un carácter de control en la línea de comando. Si el terminal roba las teclas de control para su propio uso, tales comandos dejan de estar disponibles. Entonces interceptando Ctrl-V para una metafunción está fuera de discusión (al menos en una configuración predeterminada).

Sin embargo, los emuladores de terminal son libres de interceptar Ctrl-Cambio-Vque no se espera que genere un personaje. Ctrl-Cambio-V no es un estándar; es una cosa de Terminal Gnome (que puede estar en algunos otros terminales).

En los escritorios Unix basados ​​en X, la convención es que no se necesita ningún comando para copiar. Simplemente selecciona el texto. Y el botón del medio pega ese texto en otro lugar. Descubrirá que funciona en Xterm, Gnome Terminal y Firefox por igual.

Ctrl-V es una convención de Microsoft Windows, que es una imitación de manzana-V del Macintosh.


16



No lo es exactamente resta - tradicionalmente Ctrl tiene borró los bits 6 y 7 del personaje; Debido a esto, Ctrl + Mayús + letra funciona de forma idéntica a Ctrl + Letra en la mayoría de los terminales (a menos que sea explícitamente anulada por el terminal, como en el caso de los accesos directos de copiar / pegar). - grawity
Debido a que las claves se ordenan esencialmente al azar con respecto al estándar ASCII, la ROM del programa incluye varias tablas de consulta que ayudan en la generación de los códigos ASCII. ... Mantener presionada la tecla CONTROL cuando se presiona otra tecla provoca una búsqueda de otra tabla. [Manual técnico de la serie VT100, 4.4.9.3, Digital]. - Kaz
@Linger gracias por la edición. Se ve muy bien, pero no hay forma de que escriba todos estos <kbd> etiquetas en publicaciones futuras. - Kaz
Ctrl-A es 1. ¿Cómo puedo probar esto? Mi terminal Gnome no hace nada cuando presiono Ctrl-A. - robert


Podemos usar el botón Insertar teclado para copiar y pegar (En teclados antiguos puede faltar)

Dupdo: CtrlInsertar
Pegar: CtrlCambioInsertar 


2





Para mí, la forma más sencilla de copiar pegar en el caparazón es:

Seleccione el código que desea y luego páselo haciendo clic en mouse-middle-key


2



Siempre que tengas una llave del medio del mouse. - jpierson
@jpierson no es que lo recomiendo encarecidamente, pero puede escribir un pequeño script que simplemente use xdotool click 2 para emular el clic del tercer botón para ti. Luego, en cualquier entorno de administrador de ventana / escritorio en el que se encuentre, puede vincular este script a una clave, por ejemplo mod  i (para insertar) o cualquier combinación de teclas que pueda tener disponible (o lo que signifique mod, que realmente depende de dónde lo vincule) - dylnmc


también puede usar el botón central y el mouse si se siente flojo y seleccionar un comando de un documento de texto, secuencia de comandos, web o foro. una vez que haya seleccionado el comando deseado, simplemente muévase a su terminal y haga clic en el botón central del mouse. Utilizo este método porque utilizo Linux para cachorros, que no parece respaldar el comportamiento normal de hacer clic derecho y pegar. lo hace en una ventana de manejador de archivos, simplemente no en una ventana de terminal. No sé por qué, pero estoy muy contento de haber descubierto el método del botón central, ¡muy útil! ;-)


1