En bash, ¿cómo se borra la entrada actual?

172

Suponga que en bash comienza a escribir un comando como:

$ rm -rf /foo/bar/really/long/path/here

y luego te das cuenta de que no quieres ejecutar esto después de todo. ¿Hay alguna manera de borrar la entrada con una o dos pulsaciones de teclas?

Lo que he estado haciendo últimamente es anteponer eco y encerrar la entrada entre comillas (Ctrl + A echo ",, Ctrl + E, ") y luego presionar enter. ¿Hay una manera mas rápida?

usuario85509
fuente
O bien, suponga que pega un comando y se da cuenta de que fue una línea equivocada. ¡El retroceso se vuelve muy viejo después de unos 20 caracteres!
bgStack15
<kbd> Ctrl </kbd> - <kbd> C </kbd>, si desea mantener el historial, consulte stackoverflow.com/a/9679852/6521116
Kris Roofe

Respuestas:

286
  1. Presione Ctrl- Upara borrar todo antes del cursor. El comando eliminado se almacenará en un búfer. Presione Ctrl- Ypara pegar el comando eliminado.

    (Opcional: presione Endo Ctrl- Epara saltar primero al final de la entrada).

  2. Alternativamente, presione Ctrl- Cpara cancelar lo que está escribiendo.

John Kugelman
fuente
28
Hay una advertencia: Ctrl-C eliminará la solicitud actual, iniciará una nueva solicitud y establecerá el código de retorno en 1.
user716468
14
No te acostumbres a eso, usa Ctrl-U. Ctrl-C no es tan malo en bash, pero si tiene, por ejemplo, un mensaje de cliente mysql, Ctrl-C se desconectará del servidor, lo que es realmente molesto.
Cristiano
1
Tenga en cuenta que en muchos sistemas, también hay un carácter de 'muerte' terminal que mata la entrada hasta el momento. A menudo, eso es control-X. Puedes consultar con stty -a. Y eso funcionará con cualquier programa que no esté modificando activamente los controles del terminal.
Jonathan Leffler
Ctrl-A seguido de Ctrl-K también funciona. El texto 'asesinado' se almacena y puede pegarlo usando Ctrl-Y. De hecho, estas pulsaciones de teclas provienen de la biblioteca de líneas de lectura: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html ... para que pueda encontrarlas en cualquier herramienta cuya interfaz de usuario use la biblioteca (en realidad Emacs, bash, etc. Puede personalizar su comportamiento editando el archivo .inputrc (consulte el enlace de arriba para obtener más detalles).
rkachach
93

Prueba Ctrl+ U. Eso despeja la línea de entrada.

gbarry
fuente
77
Gracias, casi acepto esto como respuesta. Pero descubrí que solo borra la entrada antes del cursor. En algunos casos, estoy en el medio de editar el comando, así que prefiero recordar Ctrl + C en lugar de Ctrl + U simplemente como "descartar la entrada actual".
user85509
21

Ctrl- U, Ctrl- Khace el truco también.

Ctrl- Uelimina todo desde el principio de la línea hasta el cursor, Ctrl- Kelimina todo desde el cursor hasta el final de la línea. (A veces es útil usar solo uno de ellos).

rur
fuente
13

Hay dos opciones para hacer esto.

ctrl+ c- esto borra toda la línea, sin importar dónde esté el cursor.

ctrl+ u- esto borra la línea desde la posición del cursor hasta el comienzo.

vks
fuente
2
"Considere que el uso de Cu (o Ce y luego Cu) almacenará lo que borre en un búfer para que luego pueda pegarlo más tarde usando Cy". Markisisme un comando simple más simple es ctrl + _. stackoverflow.com/questions/1056440/… respondido por john kug - recién iniciado stackoverflow no tiene suficientes puntos para agregar comentarios a su respuesta.
vks
9

Un buen atajo está presionando Esc#. Antepondrá un #carácter (haciendo de la línea un comentario) y luego presione Intro. Si luego decides que aún necesitas el comando, aún lo tienes en tu historial :)

knittl
fuente
3
En la mayoría de las terminales, esto también es lo mismo que Alt + #, lo que lo convierte en una pulsación de tecla (en acorde).
Dolda2000
Una solución simple pero inteligente y creo que esta es una forma más fácil de cancelar un comando. Exactamente lo que estaba buscando :)
Cas
9

Al presionar Escmás Backspaceen bash se borrará todo hasta la posición del cursor.

(En Cygwin, esto borrará la entrada hasta la siguiente palabra. Las palabras están separadas por espacios, guiones bajos, ...)

Nippey
fuente
3

Tenga en cuenta que usar Ctrl- U(o Ctrl- Ey luego Ctrl- U) almacenará lo que borre en un búfer para que luego pueda pegarlo usando Ctrl- Y.

goncalotomas
fuente
3

Si está utilizando Bash en modo vi (configúrelo con set -o vi), presione Escpara cambiar al modo normal de vi y escriba ddpara eliminar la línea actual.

Helmyano
fuente
3

Esta es una expansión de la respuesta de knittl que almacena la línea en el historial de la consola con un hash como prefijo. Superar los inconvenientes del portapapeles, como sobrescribir accidentalmente o no poder ver la línea de corte como referencia.

Línea de comentarios y nuevo aviso

Use cualquiera de los atajos de teclado:

  • Esc,#
  • Alt+#

Un carácter hash #se antepondrá a la línea, convirtiendo así toda la línea en un comentario. También devolverá una nueva solicitud, como si el usuario hubiera presionado enter. p.ej

$ #rm -rf /foo/bar/really/long/path/here
$

Recuperar línea comentada

Para recuperar la línea anterior del historial de la consola, use uno de los siguientes accesos directos:

  • Up
  • Ctrl+p

Repita el atajo de teclado hasta que aparezca la línea deseada.


Eliminación rápida de prefijo hash

Para eliminar el #prefijo hash de la línea, hay algunas opciones diferentes disponibles:

Elimine el primer carácter e inmediatamente ejecute el comando:

  • Esc, 1, Esc,#
  • Alt+ -, Alt+#

Mueva el cursor para comenzar y eliminar el primer carácter, sin ejecutar el comando:

  • Home, Delete
  • Ctrl+ a, Ctrl+d
Cas
fuente
2

Para eliminar la línea actual, intente:

Ctrl- X, Ctrl-U

Como alternativa, puede usar:

Esc-D

que requiere en ~ / .inputrc:

"\ed": kill-whole-line 

ver: http://codesnippets.joyent.com/posts/show/1690

goncalotomas
fuente
Si desea solo la tecla de escape para borrar la línea completa, agregue "\e\e": kill-whole-line(debe presionar dos
veces