Disculpas, este título no es el más elegante que he ideado.
Pero supongo que mucha gente se habrá preguntado esto, y mi pregunta puede ser un engaño ... todo lo que puedo decir es que no lo he encontrado.
Cuando digo "desplazarse" hacia arriba, me refiero a usar la tecla "flecha hacia arriba" en el teclado, que obviamente lo desplaza hacia arriba a través del historial, comenzando con el comando más reciente.
Entonces encuentras un comando, tal vez 30 comandos atrás ... y lo ejecutas. Y luego quieres ejecutar el comando que originalmente vino después de él ... ¿hay una manera ágil de hacer esto? ¿O cómo hacen esto los que dominan BASH?
fuente
vi
edición de línea (habilitada conset -o vi
) oemacs
? Porque, porCtrl-O
lo que puedo ver, no funcionará con el primero.bind "\C-o":operate-and-get-next
(o añadir todo lo que despuésbind
de~/.inputrc
)La respuesta de Jon Reinhold es excelente, pero hay una solución mucho más poderosa que sugeriré. También tengo un comentario sobre un error en la respuesta de Jon, pero no tengo suficiente reputación para poder comentar directamente, así que @Jon Reinhold, si lees esto, dirígete mi comentario a continuación.
Bash incluye un comando
fc
, que toma como parámetros los números de línea de la lista del historial de bash. Luego abre su editor predeterminado con esas líneas como texto. En ese punto, opcionalmente puede editar las líneas. Luego, cuando salgas del editor, bash ejecuta esas líneas.Un ejemplo de una edición que quizás desee hacer es agregar a todos menos a la última línea algo así como "; lea -p" siguiente ... ". Esto hará que bash ejecute cada línea y le indique antes de continuar.
Comentario para Jon Reinhold: Gran respuesta, pero debe calificarlo porque si el usuario ha configurado la variable bash HISTCONTROL para incluir
erasedups
, entonces, después de realizarC-o
el usuario, se confundirá porque en lugar del siguiente comando esperado en el historial que se muestra, el siguiente será mostrado. Esto se debe a que bash ha eliminado la instancia original del comando ejecutado y, por lo tanto, todos los comandos posteriores han cambiado una línea, es decir. a un número de índice inferior en la lista del historial.fuente
fc
antesCtl-o
y abash
sí mismo. (Contrariamente a esta respuesta, también es menos útil.)erasedups
es claramente un error bash ( podría haber sido provisto para esta situación). Es bueno saberlo, sin embargo.Otra forma de lograr su comportamiento deseado sería familiarizarse con los accesos directos de la línea de lectura de bash (de los cuales CTRL, ocreo) y la búsqueda del historial de bash.
Búsqueda de la historia
CTRL- lo rlleva a la búsqueda del historial de comandos de bash, donde puede comenzar a escribir el comando que está buscando y bash completará automáticamente el comando por usted. La funcionalidad de autocompletar es realmente bastante buena. Cuando el comando que desea ejecutar está en la línea de entrada, puede ENTERejecutar el comando o presionar CTRL- epara mover el cursor al final de la línea de comando y salir del modo de búsqueda del historial.
Lo bueno de CTRL- een este punto es que el búfer de historial está configurado contextualmente para este comando. Los comandos siguiente y anterior ahora son los que se ejecutaron justo antes y después de la línea que la búsqueda de historial localizó para usted. Puede presionar las flechas hacia arriba o hacia abajo y tomar el siguiente comando.
La búsqueda de historial es muy poderosa y una excelente manera de evitar el uso de la flecha hacia arriba para volver al comando en primer lugar. Una búsqueda rápida en el historial puede ahorrar mucho tiempo buscando manualmente en el historial y luego puede continuar CTRL, ocomo Jon señaló anteriormente.
Readline Short Cuts
Si está buscando aumentar su bash-fu en general, le recomendaría que pruebe los atajos de línea de lectura para las teclas de flecha. Puede encontrar que son más convenientes y le permiten aumentar su velocidad de escritura, pero, por supuesto, YMMV. Aquí hay algunos más:
Estos atajos de línea de lectura (junto con CTRL- aprincipio de línea y CTRL- efinal de línea) aumentarán su velocidad y eficiencia en la línea de comando imo.
fuente