Uso previsto de ctrl + T en bash?


47

Noté que bash tiene un atajo para ctrl+ Tque intercambia los dos últimos caracteres antes del cursor.

Me pregunto por qué los ingenieros decidieron incluir esto.

  • ¿Fue heredado de una convención anterior?
  • ¿O hay un propósito práctico para el que esto se usa comúnmente?

13
No es una respuesta, pero esto no lo es bash, como tal, pero readline(qué bash usa para la entrada en el indicador). Tu bash está usando emacscombinaciones de teclas; puedes cambiar a atajos de teclas vi si eres un partidario de Editor Wars;) sanctum.geek.nz/arabesque/vi-mode-in-bash Hay un par de "hojas de trucos" readlineaquí: readline.kablamo.org/emacs .html y readline.kablamo.org/vi.html .
John N

13
Históricamente, las funciones de edición de línea de comandos de estilo Emacs se desarrollaron inicialmente en Bash, y luego se convirtieron en una biblioteca separada, pero eso sucedió antes del primer lanzamiento en 1989. La primera entrada en lasreadline ChangeLog pistas sobre esto. Entonces, originalmente, el acceso directo se manejó en Bash, aunque brevemente, antes de ser retirado readline, pero el acceso directo llegó a Bash desde Emacs (no sé si fue inventado en Emacs o vino de otro lugar).
Stephen Kitt

Respuestas:



63

Es muy útil corregir rápidamente los errores tipográficos:

sl

se convierte

ls

con un único CtrlT.

También puede usar AltTpara intercambiar palabras ( por ejemplo, al cambiar entre servicey systemctl...).

Históricamente hablando, la CtrlTcaracterística llegó a Bash de Emacs con toda probabilidad. Probablemente fue copiado a Emacs de algún otro editor; estuvo presente en el editor E de Stanford (véase Essential E, página 13) en 1980, y E tuvo un fuerte impacto en Richard Stallman (como se describe en Free as in Freedom ). Se implementó en versiones muy tempranas de Bash, antes de su primer lanzamiento en 1989, cuando se sacó a la readlinebiblioteca donde vive hoy (la primera entrada en las readline ChangeLogpistas sobre esto).


2
Intercambiar palabras era algo nuevo y muy útil
Mongrel

Proporcionar un argumento numérico a Alt + T transpone la palabra al (o antes) el cursor con el n palabra -ésimo antes de esa palabra. por ejemplo: Alt + 2 Alt + T se modificará word1 word2 word3a word3 word2 word1si se realiza a las word3.
crw

@crw sería bueno, pero alt + T no intercambia palabras en mi terminal. Acabo de abrir el elemento de menú 'establecer título'.
Philip Kirkbride

@PhilipKirkbride es una pena, tu emulador de terminal te está privando de un atajo muy útil ...
Stephen Kitt

@PhilipKirkbride debería haber una opción del emulador de terminal para deshabilitar las teclas de acceso al menú
Joril

15

Esta combinación de teclas, un enlace heredado del emacseditor, hace que los últimos 2 caracteres escritos se intercambien al final de la línea, se usan en el medio de una línea, intercambian el carácter a la izquierda del cursor y el que está debajo del cursor.

Puede parecer vano tener un enlace para una característica tan poco utilizada que se puede lograr fácilmente con unas pocas teclas más. Los temporizadores antiguos, como el que uso con bastante frecuencia, solían ahorrar algo de tiempo de transmisión en los días de los módems de 300 baudios, a fines de los años 70, especialmente en medio de largas filas.

Un comando similar y más útil, vinculado a Alt+ T, transpone las palabras a la izquierda y a la derecha del cursor.

Tfue elegido porque es la letra inicial de transposición . Otros enlaces con origen similar incluyen:

  • Ctrl+ B, hacia atrás , mueve el cursor hacia la izquierda una posición,
    • Alt+ Bmueve el cursor hacia la izquierda una palabra,
  • Ctrl+ F, para avanzar , mueve el cursor hacia la derecha una posición,
    • Alt+ Fmueve el cursor hacia la derecha una palabra,
  • Ctrl+ A, para Anfang o ante , mueve el cursor al comienzo de la línea,
  • Ctrl+ E, para fin , mueve el cursor al final de la línea,
  • Ctrl+ N, para el siguiente , recupera la siguiente línea,
  • Ctrl+ P, para el anterior , recupera la siguiente línea,
  • Ctrl+ D, para eliminar , elimina el carácter debajo del cursor,
    • Alt+ Delimina la palabra debajo del cursor,
  • Ctrl+ K, para matar , corta el final de la línea,
  • Ctrl+ Y, para tirar , pega el contenido del portapapeles,

Estos enlaces, implementados en el paquete de línea de lectura de GNU, están disponibles en todos los programas que lo utilizan para la entrada del usuario, como bash , pero también gdb , bc , ...

Algunos de ellos también están disponibles en otros entornos: la línea de entrada URL de Firefox, los campos de entrada de texto en la interfaz gráfica OS / X y muchos administradores de ventanas basados ​​en X.

Los usuarios de vim pueden seleccionar los enlaces correspondientes a través de una variable de entorno.


Sí, es genial para aquellos como nosotros que a veces olvidan que estamos escribiendo en un terminal en lugar de un Emacs; Todavía me atrapan cuando uso los widgets de área de texto de Firefox (como este ahora), a los que les faltan estos enlaces importantes. :-(
Toby Speight

¿Hay alguna manera de emparejar las versiones de caracteres y palabras de comandos relacionados en su descripción? Realmente ayuda a la memoria cuando reconoce que las versiones Alty Ctrlde las pulsaciones de teclas están relacionadas de manera coherente.
Toby Speight

@TobySpeight GTK + admite un tema alternativo de combinación de teclas al estilo de Emacs para que pueda usar algunas de estas combinaciones de teclas en Firefox. C-tSin embargo parece no hacer nada. wiki.archlinux.org/index.php/GTK%2B#Emacs_keybindings
Candy Gumdrop

@TobySpeight, ¿alguna vez has probado It's All Text! ? Le permite editar el contenido de áreas de texto en el editor de su elección.
Stephen Kitt

Gracias @Stephen: he oído hablar de él, pero no lo he probado (todavía). Voy a seguir eso ...
Toby Speight

10

Es muy útil para la correlación de tpyos simples donde hemos traspuesto accidentalmente los pilares de las letras.

(Con un RSI severo en ambas muñecas, termino usando esto mucho, personalmente ...)


2
Mis ojos están sangrando
Básico

4

Un muy rápido arreglo de errores tipográficos. efectúa el bloque corrector inmediato 2 antes del curso.

Si escribiste ls-y quieres un espacio entre ls& guión, entonces puedes usar Ctrl+T

Esto funciona si tienes un espacio después del guión y luego haces Ctrl+T

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.