Comando claro del terminal en OS X

24

Digamos que escribí un comando en la terminal 'mv * .jpg .. \ photos' y, mientras escribo, me doy cuenta de que ya no quiero ejecutar este comando. Solo quiero eliminar toda la declaración. No quiero borrar toda la pantalla o borrar el historial de bash, solo quiero abortar la línea actual y borrarla.

¿Hay un atajo de teclado o tengo que eliminar cada carácter?

Paul Alexander
fuente

Respuestas:

36

Asumiendo que estás en bash, usa Ctrl+ U.

John T
fuente
¡Gracias! Eso lo hizo. ¿Existe una lista de formatos de atajos de teclado documentada en alguna parte?
Paul Alexander
2
Esto funcionó para mí en zshell también.
LandonSchropp
1
Esto solo funciona si su cursor está al FINAL de la línea. Para aquellas situaciones en las que su cursor está al principio, debe usar CTRL-K
Jarrod Nettles
¿Cómo se causa esto en un script?
Jonny
7

Muchos programas que esperan a que escriba una línea de comando y luego la ejecutan, incluido bash, toman Ctrl+ Cpara significar "Abortar la tarea actual y volver al indicador principal".

Algunos programas, incluido bash, toman Ctrl+ U( comando Borrar del terminal en OS X ) para significar "borrar el comienzo de la línea, hasta el cursor" (o "borrar toda la línea").

En bash, las diferencias observables entre Ctrl+ Cy Ctrl+ Uincluyen:

  • Puede deshacer Ctrl+ U, pero no Ctrl+ C.
  • Ctrl+ Uretiene la parte de la línea después del cursor, si la hay.
  • Ctrl+ Uborra el texto afectado de la pantalla; Ctrl+ Cmuestra un nuevo mensaje debajo de la línea actual.

A veces, desea dejar de escribir un comando pero ingresarlo en el historial del shell para ejecutarlo más tarde. Un truco útil es poner un #al principio de la línea y ejecutarlo: dado que la línea ahora es un comentario, no hará nada. En bash, hay un atajo de una sola tecla: Alt+ #.

Gilles 'SO- deja de ser malvado'
fuente
2

Hay una readlinefunción que probablemente no está vinculada a una pulsación de tecla llamada kill-whole-lineque matará toda la línea en lugar de solo matar la parte anterior al cursor ( unix-line-discardque es un nombre poco apropiado y está vinculado a Ctrl- u).

Puede vincular eso a cualquier pulsación de tecla disponible. Me gusta ShiftAlt, Uya que es una función relacionada. Esa combinación de teclas puede estar vinculada, lo do-lowercase-versionque significa que hace lo que haga la versión no modificada (en este caso upcase-word). Como realmente no necesitamos dos claves para hacerlo, usemos esa.

Puede probarlo en la línea de comando creando el enlace de esta manera:

bind '"\eU":kill-whole-line'

o hacerlo persistente poniendo esta línea en su ~/.inputrcarchivo:

"\eU":kill-whole-line

Para deshacer un Ctrl- uo ShiftAlt- U(o cualquier operación que se pueda deshacer), presione Ctrl- Shift- _(guión bajo) o Ctrl- x Ctrl- u(dos pulsaciones de teclas). O puede volver a pegar (tirar) lo que mató presionando Ctrl, lo yque puede repetirse si desea varias copias de ese texto.

Por cierto, si desea eliminar el texto desde el cursor hasta el final de la línea, puede presionar Ctrl- k. Entonces, en lugar de hacer el enlace descrito anteriormente, puede eliminar una línea completa presionando Ctrl- u Ctrl- k. Solo la parte eliminada por la segunda de esas pulsaciones de teclas se guardará en el búfer de eliminación, pero aún puede deshacer dos veces para recuperarlos.

Pausado hasta nuevo aviso.
fuente