Pregunta bash xterm: cómo obtener la línea de comando antes de escribir enter


Intento definir un comportamiento personalizado de la función backward-kill-word en bash xterm. Para eso, necesito atrapar la línea de comando antes de validarlo. Por ejemplo, si escribo sdcds/edfdD sdf/sdf sin escribir enter, quiero usar un atajo como esc + backspace atrapar la línea sdcds/edfdD sdf/sdf en una variable temporal para aplicar un sed después. Ya he escrito el comando sed y el comando bind pero no puedo encontrar en ningún lado cómo atrapar el buffer línea de comando.

Actualización desde la respuesta

Ok muchas gracias, creo que no estoy lo suficientemente claro en mi explicación. Lo que quiero hacer es crear una función y la clave de vinculación relacionada en el bash.rc para modificar el texto en la línea de comando. Imagínense, quiero definir una función que elimine la línea de comando (antes de escribir enter) hasta "/" por ejemplo y solo hasta /, podría escribir en mi .bash.rc:

function backward-delete-to-slash () { echo $BUFFER_COMMAND_LINE | sed  's:\(.*[/][/]*).*:\1:';}

bind -x '"\e\d": backward-delete-to-slash'

Mi problema es atrapar la línea de comando en un $BUFFER_COMMAND_LINE variable. Si tuviera esta variable, podría hacer, por ejemplo:

$: sdffs/dsfd dsfsdf/dfdsf (without typing enter)

Esc + retroceso 

$: sdffs/dsfd dsfsdf/

Así que espero ser más exhaustivo.


2


origen


No publique la respuesta a su pregunta, use el botón Editar para agregar información adicional a una pregunta. Por favor revisa el Preguntas más frecuentes ya que este no es un foro tradicional - BinaryMisfit


Respuestas:


Si conoce un poco vi, intente esto:

$ set -o vi
$ bind vi-yank-to '\ey'
$ type-your-text-here - then press Home to go to begin-of-line, esc-y

La línea está en un búfer ahora. Presione Ctrl-c para obtener una nueva línea, luego

$ sed something-and-then esc-p

El texto del buffer debería aparecer.


0