Encuentro ⌥ . (alt . para muchos otros) para ser muy útil cuando se trabaja en una terminal, insertando el último argumento de la última línea en el indicador actual. Sin embargo, no funciona cuando se comentó la última línea (suponiendo que set -o interactivecomments
).
No puedo pensar en un caso de uso exacto, pero sucedió varias veces que comenté un comando que me di cuenta antes de la ejecución que no era lo que necesitaba en ese momento, y luego quería el argumento final en un comando posterior.
Me doy cuenta de que hay una lógica en ignorar todo lo comentado, ya que nunca se interpreta y, por lo tanto, nada se convierte en argumentos, pero ¿Hay alguna forma de hacer lo que quiero?
No sería ideal, pero sería utilizable, si tuviera que usar una pulsación de tecla diferente, vinculada a un comando alternativo que haría lo que quiero.
Estoy usando Zsh, pero una solución de Bash podría funcionar o estar cerca de lo que necesitaría hacer en Zsh.
Respuesta aceptada:
No comente el comando.
En su lugar, pon un :
en el frente en lugar de un #
. Eso hará que sus argumentos de texto de comando a la utilidad nula :
, que no hace nada cuando se ejecuta. Los argumentos se tokenizan y analizan, porque sigue siendo un comando, pero no se hace nada más con ellos.
Hay casos en los que esto no es adecuado:en particular, al descifrar el comando en sí mismo tiene efectos secundarios. Un ejemplo simple es la sustitución de comandos:
$ : log $(find -print -delete) --target /var/run/cache
En este caso, el comando dentro de $(...)
se ejecutaría y sustituiría en los argumentos de :
, aunque el comando original nunca se ejecutaría. Un caso menos destructivo sería ${foo:=default}
expansión de parámetros, que tiene el efecto secundario de asignar un valor a $foo
.
Finalmente, las redirecciones o canalizaciones seguirán teniendo lugar:
$ : foo > outfile
$ : bar | grep x | ...
en ambos casos, enviará una salida vacía al destino, que truncará o creará el archivo o ejecutará los comandos posteriores, a los que puede no gustarles la entrada vacía que obtienen.
Si no tiene ninguna de esas preocupaciones especiales para su comando, esto es completamente seguro y funciona en zsh, Bash y cualquier shell compatible con POSIX (aunque el comportamiento alt-. después no funcionará en todas partes).
Si es específicamente la última palabra que desea, zsh proporciona combinaciones de teclas y comandos personalizables que puede usar para manipular la línea de comandos. Si bindkey '^K' kill-region
luego puede retroceder hasta antes de la palabra, Ctrl –K para borrar hasta el principio de la línea, : , y luego tenga un comando seguro con solo una palabra que le interese.