Para solicitar que el comando se imprima en lugar de ejecutarse después de la sustitución del historial, agregue el :p
modificador , por ejemplo !42:p
. El comando resultante también se ingresará en el historial, por lo que puede presionar Uppara editarlo.
Si tiene la histverify
opción establecida ( shopt -s histverify
), siempre tendrá la oportunidad de editar el resultado de las sustituciones del historial.
La función fc
integrada brinda acceso limitado a la expansión del historial (sin designadores de palabras) y le permite editar un comando anterior en un editor externo.
Puede usar !prefix
para referirse al último comando que comienza con prefix
, y !?substring
para referirse al último comando que comienza con substring
. Cuando sabes lo que estás buscando, esto puede ahorrarte mucho tiempo history | less
.
Otra forma de buscar en el historial anterior es la búsqueda incremental: presione Ctrl+ Ry comience a ingresar una subcadena de lo que está buscando. Presione Ctrl+ Rpara ir a la aparición anterior de la cadena de búsqueda hasta el momento y Ctrl+ Ssi ha ido demasiado lejos. La mayoría de las teclas que no sean Ctrl+ R, Ctrl+ S, Backspacey caracteres ordinarios terminar la búsqueda incremental y tienen su efecto habitual (por ejemplo, teclas de flecha para mover el cursor en la línea que has alcanzado, Enterpara ejecutar el comando).
Gilles 'SO- deja de ser malvado'
fuente
stty -ixon
antes de que Ctrl-s funcione.Ctrl-s
es importante, de lo contrario, uno se queda atascado como lo hice yo .Otro pequeño: Alt+#
comenta la línea actual y la mueve al búfer de historial.
Entonces, cuando está ensamblando una línea de comando y necesita emitir un comando interino para, por ejemplo, encontrar un archivo, simplemente presiona Alt+ #, emite el otro comando, sube en el historial, descomenta y continúa.
fuente
Esc
,#
funcionaPuedes usar el espacio mágico para expandir la historia antes de presionar enter. En su .inputrc, asigne espacio al espacio mágico:
Ahora, cada vez que escriba un espacio después de una especificación del historial, se expandirá inmediatamente, ¡útil si también desea editarlo!
fuente
Eche un vistazo al
history-expand-line
comando, vinculadoAlt+^
por defecto. Expandirá la línea en el lugar que luego puede editar.fuente
Usando
Ctrl+r
puede buscar el historial:Cualquier comando que encuentre podría editarse ...
Creo que encontré exactamente lo que necesita: ejecutar
shopt -s histverify
y la próxima vez que quiera usar el!n
comando no se ejecutará, sino que solo se colocará en la línea de comando ...fuente
!n:p
funcionar?A menudo he querido esto. Cuando usaba csh (y tcsh), tenía un idioma:
!:88*:p
Este modismo inserta "palabra 88 hasta la última palabra" del comando anterior en el punto donde está escribiendo en la línea de comando actual, que generalmente es el final. En csh, no es un error que dicha expresión no produzca palabras. Es decir, no es necesario que haya una palabra 88, ni ninguna que la siga. Si no hay una palabra 88, esto no agrega palabras al final del comando que se está escribiendo y luego empuja la línea de comando resultante al historial sin ejecución.
Como probablemente sabes,
*! (como !! y! -1) es el comando anterior;
*: 88 es la palabra 88 (la primera palabra, generalmente el comando, es cero) y csh requeriría que exista dicha palabra, pero ...
*: 88 * son todas las palabras que comienzan en la palabra 88, y luego csh hace no requiere que la palabra exista;
*: p significa imprimir, pero no ejecuta la línea de comando.
Con o sin: p, la línea de comando se agrega al historial de comandos.
"¿Por qué 88?" ¿te preguntas? Porque es la misma clave que * Necesitaré. Si tiene comandos por tanto tiempo, tal vez!: 888 *: p es lo que necesita. Lo siento, esto no funciona con bash AFAIK. Bash simplemente dirá
bash: :88*: bad word specifier
Dato curioso: su comando generalmente no necesita ser el primero.
> /tmp/foo echo My command is word 3
es válido en bash y csh.
fuente
Normalmente uso Ctrl+ rpara buscar y luego Ctrl+ epara ir al final de la línea sin ejecutar.
fuente