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?


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.


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.


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).


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.


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 :)


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, ...)


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.


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.


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

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.