Clave de escape de shell de Windows (eliminar toda la línea) equivalente en Bash

13

En la línea de comandos de Windows (powershell y cmd), cuando presiona la Esctecla mientras está en una línea, se elimina lo que haya escrito en el indicador.

Encontré que presionar la Esctecla en bash prompt no hace nada. Presionando Escy luego backspaceelimina una palabra, pero esto debe hacerse para cada palabra.

Estoy aprendiendo Bash de forma incremental y, a veces, escribo algo estúpido en el medio de la línea y siento que es mejor volver a escribir desde cero. Para hacer esto, presionar backspacees la única forma que encontré hasta ahora.

¿Qué haces?

Conozco el clearcomando y el Ctrl-Lacceso directo, pero no estoy hablando de borrar todo el terminal. Solo la linea.

Animesh
fuente
1
Hace un tiempo publiqué una lista de atajos de teclado útiles de readline en superusuario. Puede encontrarlos útiles también. (Readline es la biblioteca que bash usa para la edición de líneas).
jw013
Hola jw013, gracias por una buena edición. :-)
Animesh

Respuestas:

15

Usted quiere kill-whole-line, pero esto no está vinculado por defecto en bash. backward-kill-line( CtrlX Backspace) y unix-line-discard( CtrlU) ambos borran desde el punto actual hasta el comienzo de la línea, así que solo ve al final de la línea y usa cualquiera de los dos.

Ignacio Vazquez-Abrams
fuente
Tienes razón, no está obligado a nada. Me acabo de enterar que usando bind -P. Supongo Ctrl-Uy entonces Ctrl-Yes la única opción entonces.
Animesh
Encontrará que varios de los enlaces predeterminados se derivan de las secuencias de teclas en el editor de Emacs y que esos enlaces también se muestran en otros lugares.
Blrfl
@Blrfl para extender su comentario, la mayoría de estas combinaciones de teclas se han abstraído en la biblioteca de línea de lectura , que utilizan una gran cantidad de programas de línea de comando y es por eso que todas tienen teclas de edición de línea similares.
jw013
6

Ctrl+ava al principio de la línea y Ctrl+kelimina al final de la línea

lemen
fuente
Pruebe ^Uprimero, en la mayoría de las implementaciones del modo de edición de línea de comandos de Emacs ya elimina la línea completa. En aquellos en los que solo se elimina la izquierda del cursor (línea de lectura GNU, por ejemplo), presione ^Kdespués.
mirabilos
3

Para ampliar un poco la respuesta de Ignacio Vázquez-Abrams, puede obtener (casi) un comportamiento similar al de Windows desde la Esctecla en bash vinculando el kill-whole-linea Esccon el siguiente comando

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

Si agrega la línea a su ~/.inputrcarchivo, el enlace persistirá entre sesiones.

Sin embargo, tenga en cuenta que esto no es muy estándar, ya que bash realmente usa la Esctecla como otra tecla de modificación (como Alt o Ctrl no persistentes). Si observa la lista de bind -Pasociaciones de teclas existentes (con ), probablemente verá varios comandos vinculados a combinaciones de teclas que comienzan con "\ e" (p. Ej.

"\eb": backward-word

que configura la combinación Esc+ Bpara mover el cursor de nuevo al comienzo de la palabra más reciente, más bien como Ctrl+ , excepto que debe seguir soltando Esc(así como B, por supuesto) si desea hacerlo más de una vez seguidas )

Y eso explica por qué dije que el comportamiento que obtienes es casi como el de Windows: cuando presionas Esc, bash comprueba si lo estás usando en combinación con otra tecla; por lo tanto, si lo vincula kill-whole-line, hay un poco de retraso entre presionar (o más bien, soltar) Escy bash despejar la línea por usted.

Sin embargo, si no le importa nada de eso, y prefiere vivir con el retraso que volver a entrenarse con una pulsación de tecla diferente, puede hacerlo.

(Nota: gran parte de la información que recibí aquí como resultado de leer, y seguir los enlaces en esta respuesta ).

Wilson F
fuente
1
Esto fue muy útil, gracias, y funciona más o menos como se anuncia. Pero descubrí que produjo un comportamiento molesto cuando otros comandos se ejecutan "inválidamente", como presionar DEL cuando se encuentra al final de una línea: Esto borraría la línea y la reemplazaría con [19;un código de escape de aspecto similar. Al final, encontré la asignación "\e\e"a kill-whole-line(es decir, tocar Esc dos veces para borrar la línea) un buen compromiso.
j_random_hacker
@j_random_hacker: Hm, eso me gusta. A menudo golpeo Escalgunas veces de todos modos, así que podría intentarlo. Actualmente lo tengo vinculado a Ctrl+ Delpero nunca lo recuerdo.
Wilson F