Estaba escribiendo algo en la línea de:
mv foo/bar/poit/zoid/narf.txt
y de repente me di cuenta, maldita sea, tengo que volver a escribir grandes partes de ese parámetro
mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt
Incluso con la finalización de pestañas, un gran dolor. Sé que puedo copiar y pegar el parámetro seleccionando con el mouse el texto y hacer clic en el medio, pero eso no es lo suficientemente bueno. Quiero permanecer en el teclado.
Entonces, ¿hay alguna manera de copiar y pegar el parámetro actual de la línea usando el teclado?
bash
readline
line-editor
k0pernikus
fuente
fuente
mv foo/bar/poit/zoid/{narf.txt,troz.txt}
lugar de escribir / copiar una dirección larga dos veces.mv foo/bar/poit/zoid/{narf,troz}.txt
. Esto funciona especialmente bien si tenemos algo como.../zoid/this_source_file_has_to_be_patched.c{,.orig}
Respuestas:
Si he planeado con anticipación, uso la expansión de llaves . En este caso:
Aquí hay otro enfoque que usa los
readline
atajos de teclado predeterminados :mv foo/bar/poit/soid/narf.txt
: comienzounix-word-rubout
para eliminarfoo/bar/poit/soid/narf.txt
yank
, espacio,yank
de nuevo para obtenermv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
backward-kill-word
dos veces para borrar el últimonarf.txt
troz.txt
: escriba la parte de la cola que es diferenteSi pasa una cantidad de tiempo no trivial utilizando el
bash
shell, le recomiendo leer periódicamente una lista de los accesos directos predeterminados y elegir algunos que parecen útiles para aprender e incorporar a su rutina. El Capítulo 8 delbash
manual es un buen lugar para comenzar. Conocer los atajos realmente puede aumentar su eficiencia.fuente
.txt
, puede presionar Ctrl + Izquierda (o cualquier otro acceso directo que llamebackward-word
), luego Izquierda un carácter, luego Alt + Retroceso y escribirtroz
.La expansión de historial también funciona en el comando actual, utilizando el designador de eventos
!#
. Combine esto con la palabra designadora para el último argumento -$
- para obtener el parámetro que acaba de escribir. Y puede usar todos los modificadores regulares sobre él, por lo que si, por ejemplo, cambia el nombre de un archivo en un directorio lejano, puede escribir:fuente
magic-space
opción de bash en inputrc para expandir automáticamente las expansiones del historial. (No pude usar la respuesta más votada porque configuré ^ W para romper en barras, ya que eso suele ser más útil).alt+backspace
generalmente ya se detiene en delimitadores de palabras como barras, por lo que no necesita cambiar la forma^W
de obtener esa funcionalidad, puede eliminar las palabras delimitadas por caracteres que no sean palabras o espacios en blancoComo en su ejemplo, puede usar la siguiente construcción:
o incluso (como se sugiere Ansgar Esztermann ):
en lugar de escribir / copiar una dirección larga dos veces.
fuente
Jugando, conseguí que esto funcionara:
Presiona Enter
para almacenar el último parámetro.
Ahora use ↑para volver a escribir la última línea. Ingrese un espacio y para obtener el último parámetro utilizado use:
Alt + .
Odio provocar un error, pero hace el trabajo en este caso de uso.
fuente
Puede usar fácilmente variables:
O en su caso (la competencia de pestaña de nota funciona para una parte):
fuente
Tengo esto en mi
~/.inputrc
:!#
es la línea actual,:$
es la última palabra y\e^
eshistory-expand-line
.fuente
Para
zsh
, encuentro las siguientes combinaciones de teclas útiles.Entonces presioné Alt, Mpara repetir el último argumento Alt, Ksi quiero eliminar partes del final de una ruta.
Aquí hay una referencia útil a algunos de los comportamientos que puede mapear.
fuente
Una breve solución interactiva de dos pasos
tipo:
echo foo/bar/poit/zoid/narf.txt
Esto hace
foo/bar/poit/zoid/narf.txt
disponible para el Alt- .acceso directo en bash.escribir:
mv
y éxito Alt- ., Space, Alt-.Lo conseguirás
mv foo/bar/poit/zoid/troz.txt foo/bar/poit/zoid/troz.txt
. Ahora puedes modificar la última palabra fácilmente.Comandante de medianoche
Esta herramienta que puede ser (muy) útil es un administrador de archivos que se ejecuta en la consola. Le ofrece la posibilidad de copiar nombres de archivos y rutas de directorio de forma interactiva en la línea de comandos. Midnight Commander le muestra, por lo tanto, 2 paneles (izquierdo y derecho), que enumeran los contenidos de diferentes directorios.
Una breve guía:
Esta es, con mucho, la forma más rápida que encontré hasta ahora, después de que me acostumbré a los atajos.
fuente
Use lo mismo en el {,} "duplicador". Es decir:
fuente