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


192

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

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


25
Shift- Inserttambién funciona
bonyiii

33
Lo prefiero Ctrl-Shift-Vpersonalmente.
amalloy

3
También puede usar Shift + Insert en la mayoría de los entornos de shell.
Fabian

44
¿Qué pasa si no tienes una tecla Insertar?
Ben Racicot

3
no funciona en el símbolo del sistema de Windows' demasiado
phuclv

Respuestas:


360

En los días de las terminales físicas , los portapapeles de toda la sesión no existían, solo unos pocos programas admitían copiar / pegar internamente, a menudo bajo el nombre de "buffers" o "kill rings", y usaban varias teclas diferentes. Por ejemplo, el shell bash usa CtrlKo CtrlUpara "matar" (cortar), CtrlYpara "tirar" (pegar); esto viene de la emacs editor .

CtrlCCasi en todas partes en Unix estaba la tecla "interrupción" , utilizada para cancelar el programa u operación actual. La CtrlVclave a menudo significaba "inserción literal", es decir, inserte el siguiente carácter literalmente sin realizar ninguna acción asociada. Por ejemplo, una normal Esccambia al modo en el comando vi editor, pero CtrlV, Escva a insertar el ESCcarácter en el documento.

Mac OS introdujo el uso de CtrlCcopiar y CtrlVpegar desde el portapapeles de toda la sesión en 1983 y Microsoft Windows 3.x en 1990. (Versiones anteriores de Windows (1.xy 2.x), así como IBM OS / 2 , solo admite las claves CUA de IBMCtrlIns para copiar y ShiftInspegar; estos accesos directos siguen siendo compatibles con todas las versiones de Windows).

Cuando las GUI con soporte para portapapeles finalmente llegaron a Unix, Ctrlmuchos programas de terminal ya usaban las pulsaciones de teclas. Además, la interfaz gráfica X tenía mecanismos algo diferentes : "selecciones" y "cortar buffers". Incluso ahora puede seleccionar texto en un programa e insertarlo con 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 este último), CtrlV ya tenían un significado completamente diferente durante muchos años y no se podían cambiar. Además, un método alternativo para 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 métodos abreviados de teclado, por ejemplo, la mayoría de los programas de terminal modernos, como GNOME Terminal, usan CtrlShiftCy CtrlShiftV. (Si usa Xterm, los mismos atajos se pueden agregar manualmente usando las traducciones de XTerm * vt100 * Xresource. Rxvt no tiene esa opción).

(La mayoría de los kits de herramientas X11 también admiten las teclas CUA "copiar" y "pegar", que no entran en conflicto con los programas de la terminal. Desafortunadamente, las implementaciones son bastante inconsistentes: CtrlInscopias en el "portapapeles" en la mayoría de los programas (GTK, Qt4, pero ignorado por Xaw); sin embargo, ShiftInspega desde la "selección primaria" en la mayoría de los programas GTK y Qt4, pero desde el "portapapeles" en Firefox, y desde los búferes de corte ahora obsoletos en el ahora obsoleto Xaw).


Dicho todo esto, algunos terminales o consolas (en particular, la consola de Windows 10) hacen apoyar estas teclas. Como la consola de Windows siempre tenía un modo "marcar / seleccionar" separado, CtrlCahora también tiene dos significados basados ​​en el contexto: en el modo normal, envía una interrupción, en el modo de selección copia al portapapeles (como Entersolía hacerlo).

Mientras tanto, las herramientas de línea de comandos de Windows nunca se usaron realmente CtrlVpara nada, por lo que estaba obligado a "pegar" sin molestar mucho. Sin embargo, hacer lo mismo en terminales tipo Unix sería más problemático.


10
Hmm En Vim, "tirar" 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,

11
Sí estoy seguro. Bash hereda los accesos directos predeterminados de sus equivalentes de Emacs .
Grawity

44
@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 el modo emacs es el predeterminado en la mayoría de las instalaciones. Eso plantea ambigüedad en el uso del término yank , incluso para bash.
rahmu

1
A-ha! Yo sabía que los desarrolladores Vimperator cometido un error cuando se cambiaron <C-v>a ila versión 3, pero no pude poner mi dedo sobre por qué .
Izkata

2
@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 generalmente se llama "portapapeles": la selección CLIPBOARD, porque allí es donde se copia Ctrl-C, y de ahí es donde se pega Ctrl-V. La selección principal no es el portapapeles.
Grawity

47

Úselo CtrlShiftVpara pegar.

Ctrl con otros caracteres generalmente es utilizado por el shell para funciones especiales.


44
Entonces, ¿por qué Linux no registra CTRL + SHIFT para funciones especiales? Creo que copiar y pegar es más típico para algunos usuarios que las funciones especiales, ¿verdad?
Yasser Zamani

22
Los shells han existido mucho antes de que existieran terminales gráficas y GUI con funcionalidad de cortar y pegar, por lo que su argumento no es realmente válido. @YasserZamani
slhck

99
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 término emulador, esto probablemente no funcionará. No pienses que este comando es portátil.
rahmu

@rahmu Oh, no tenía idea de eso. Utilice solo instalaciones de Ubuntu de stock. ¿Hay un comando universal?
Akash

2
Probablemente no haya uno para acceder al portapapeles (solo Shift + Ins para la selección principal). Incluso el portapapeles en sí es una cosa X11, no accesible desde tty's. Sin embargo, Ctrl + Shift + V es compatible con GNOME Terminal, Xfce4 Terminal, KDE Konsole; Esto cubre los entornos GUI más populares.
Grawity

20

Aquí está su configuración de copiar y pegar de uso general con terminales populares:

gnome-terminal (más popular en Linux)
Copiar : CtrlShiftC
Pegar : CtrlShiftV
Nota : Seleccionar para copiar y middle-clickpegar también funciona, pero utiliza un portapapeles alternativo.

PuTTY (terminal más popular en Windows)
Copia : (seleccionar con el ratón, sin interacción con el teclado)
Pegar : Right-click (o de forma más fiable: shiftRight-click)
Nota : Las aplicaciones que se llevan a la entrada del ratón (como vimy links) puede robar Right-click- shiftRight-clicksiempre van a trabajar en cualquier aplicación.

OSX Terminal
Copy : AppleC
Paste : AppleV
Nota: las aplicaciones que toman el control del mouse (como vimy links) pueden anular lo que significa seleccionar texto, en cuyo caso la copia no funcionará de la manera esperada. En esos casos, mantenga presionado Controlmientras arrastra el mouse para seleccionar. La interacción del mouse con las aplicaciones está deshabilitada de forma predeterminada en la configuración de su terminal, por lo que la mayoría de las personas ni siquiera lo sabrán.


¿No es cmd.exemás popular que PuTTY en Windows? :-)
Ben

@Ben No como un terminal SSH.
tylerl

1
No, cmd.exeno es un terminal SSH. Eso es muy cierto.
Ben

3
@Ben: No es un terminal en absoluto, solo un shell. El terminal predeterminado en Windows es el componente "Consola de Windows" de csrss.
Grawity

@Ben, pero el botón derecho para pegar también funciona cmd.exe(y es la única forma de hacerlo, si no desea abrir el menú> editar> pegar) en el modo de edición rápida . No hay acceso directo en el símbolo del sistema anterior a win10
phuclv

17

Es una tradición muy arraigada que la Ctrlclave junto con una letra genera caracteres de control ASCII encontrados al restar 64 del valor ASCII de la letra mayúscula. Este cálculo mapas Ctrl- Aa 1, y así sucesivamente. Por ejemplo Ctrl- Ies Taby Ctrl- Jes salto de línea.

No existe una tradición similar para Ctrl- Shift. Ctrl- Shift- Vno se espera que produzca ningún carácter específico.

Los emuladores de terminal deben apoyar la tradición al pasar de manera transparente a través de la Ctrlconvención, permitiendo que aparezca como entrada de caracteres a los programas que se operan a través de esa ventana de terminal. Los programas basados ​​en terminales asignan las teclas de control a los comandos. Por ejemplo, Bash usa Ctrl- Vcomo 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, dichos comandos no estarán disponibles. Entonces, interceptar Ctrl, Vporque una metafunción está fuera de discusión (al menos en una configuración predeterminada).

Sin embargo, los emuladores de terminal son libres para interceptar Ctrl- Shift- Vque no se espera que genere un personaje. Ctrl- Shift- Vno es un estándar; es una cosa de Terminal Gnome (que puede estar en algunas otras 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 central pega ese texto en otra parte. Encontrará que funciona en Xterm, Gnome Terminal y Firefox por igual.

Ctrl- Ves una convención de Microsoft Windows, que es una imitación de Apple- Vde Macintosh.


3
No es exactamente una resta: tradicionalmente Ctrl ha borrado los bits sexto y séptimo del personaje; debido a esto, Ctrl + Shift + letra funciona de manera idéntica a Ctrl + Letra en la mayoría de los terminales (a menos que el terminal lo anule explícitamente, como en el caso de los accesos directos de copiar / pegar).
Grawity

1
Debido a que las claves están esencialmente ordenadas al azar con respecto al estándar ASCII, la ROM del programa incluye varias tablas de búsqueda que ayudan en la generación de los códigos ASCII. ... Si mantiene presionada la tecla CONTROL cuando se presiona otra tecla, se busca otra tabla. [Manual técnico de la serie VT100, 4.4.9.3, digital].
Kaz

1
@Linger gracias por la edición. Se presenta muy bien, pero no hay forma de que escriba todas estas <kbd>etiquetas en publicaciones futuras.
Kaz

Ctrl-Aes 1. ¿Cómo puedo probar esto? Mi terminal Gnome no hace nada cuando presiono Ctrl-A.
robert

3

Para mí, la forma más simple de copiar y pegar en el shell es:

Seleccione el código que desee y péguelo haciendo clic en el mouse-middle-key


1
Siempre que tenga una tecla central del mouse.
jpierson

1
@jpierson no es que lo recomiendo encarecidamente, pero puedes escribir un pequeño script que simplemente use xdotool click 2para emular el clic del tercer botón por ti. Luego, en cualquier entorno de escritorio / administrador de ventanas en el que se encuentre, puede vincular este script a una tecla, por ejemplo mod i(para insertar) o cualquier asociación de teclas que pueda tener disponible (o cualquier modificación que pueda significar, lo que realmente depende de dónde vincula esto)
dylnmc

2

Podemos usar el botón de insertar teclado para copiar y pegar (en teclados antiguos puede faltar)

Copiar : CtrlInsert
Pegar :CtrlShiftInsert


1

También puede usar el botón central y un mouse si se siente flojo y seleccionar un comando de un documento de texto, script o 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 ya que utilizo puppy linux que no parece soportar el comportamiento normal de hacer clic derecho y pegar. lo hace en una ventana de controlador de archivos, simplemente no en una ventana de terminal. No sé por qué, pero estoy bastante contento de haber descubierto el método del botón central, ¡muy útil! ;-)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.