Así como M-.
(meta-dot o esc-dot o alt-dot) es la función readline yank-last-arg
, M-C-y
(meta-control-y o esc-ctrl-y o ctrl-alt-y) es la función readline yank-nth-arg
. Sin especificar n
, tira del primer argumento del comando anterior.
Para especificar un argumento, presione Escape y un número o mantenga presionada la tecla Alt y presione un número. Puede hacerlo Alt: -para comenzar a especificar un número negativo, luego suelte Alt y presione el dígito (esto contará desde el final de la lista de argumentos.
Ejemplo:
Ingrese el siguiente comando
$ echo a b c d e f g
a b c d e f g
Ahora en el siguiente indicador, escriba echo
(con el siguiente espacio), luego
Prensa Alt- Ctrl- yy ahora verá:
$ echo a
sin presionar Enteraún, haga lo siguiente
Presione Alt- 3 Alt- Ctrl-y
Presione Alt- - 2 Alt- Ctrl-y
Ahora verás:
$ echo ace
Por cierto, podría haber puesto el echo
en la línea seleccionando el argumento 0:
Presione Alt- 0 Alt- Ctrl-y
Editar:
Para responder la pregunta que agregó a su original:
Puede presionar Alt, 0luego presionar repetidamente Alt, .para recorrer los comandos anteriores (arg 0). Del mismo modo Alt, -luego repetir Alt, .le permitiría pasar por los anteriores y anteriores argumentos.
Si no hay un argumento apropiado en una línea particular en la historia, se tocará la campana.
Si hay una combinación particular que usa con frecuencia, puede definir una macro para que una pulsación de tecla la realice. Este ejemplo recordará el segundo argumento de los comandos anteriores presionando Alt- Shift- Y. Puede elegir cualquier pulsación de tecla disponible que prefiera en lugar de esta. Puede presionarlo repetidamente para pasar por los anteriores.
Para probarlo, ingrese la macro en un indicador de Bash:
bind '"\eY": "\e2\e."'
Para hacerlo persistente, agregue esta línea a su ~/.inputrc
archivo:
"\eY": "\e2\e."
Desafortunadamente, esto no parece funcionar para arg 0 o números de argumentos negativos.
bind -lp
y mirar los enlaces actuales.-s
(nuevo en Bash 4) enumera las macros creadas con-x
.M-.
:Alt-3
Alt-Ctrl-y
por ejemplo, es igual a mantenerAlt
y escribir3.
. Si escribe3.
eso varias veces sin soltarloAlt
, revise los terceros argumentos de sus líneas de comando anteriores.!$
obtiene el último elemento del argumento anterior de la línea de comando.fuente
!:3
te consigue el tercero!!
te da todo el último comando. Útil si olvidó usarsudo
.!:1-2
te da todo menos el último de 3 argumentosecho foo{,bar} baz
, el comando se registra como impreso y luego se expande. Con lo anterior, el uso deecho !:1
after se resuelveecho foo{,bar}
y luego se expande aecho foo foobar
Para usar el primer argumento, puede usar
!^
o!:1
Ejemplo:
Como su pregunta es sobre el uso de cualquier otro argumento, aquí hay algunos útiles:
Las primeras cuatro formas se usan con más frecuencia. El formulario
!:2-
es algo contrario a la intuición, ya que no incluye el último argumento.fuente
file3
demv file1 file2 file3 target/
?Me gustó tanto la respuesta de @larsmans que tuve que aprender más. Agregar esta respuesta para ayudar a otros a encontrar la sección de la página de manual y saber para qué buscar en Google:
fuente
! ^ puede ser el comando para el primer argumento. No estoy seguro de si hay una manera de obtener el enésimo.
fuente
!:n
, pero contando desde el final en lugar del principio?¡También puede obtener argumentos de cualquier comando en su historial!
fuente
Probado en Ubuntu 18.04
Para insertar argumentos anteriores:
En Linux puedes repetir comandos para volver al historial
Ejemplo:
El último comando es:
mv
foo
mv foo
Atajos generales
Para iterar a través de los argumentos en un comando anterior
solo funciona en zsh
ejecutar o agregar esto a su
~/.zshrc
Ahora use Alt+ .para ir tan atrás como desee, luego use Alt+: para recorrer los argumentos
Asumiendo que el último comando es
5
4
3
2
1
echo
fuente: https://stackoverflow.com/a/34861762/3163120
Para ver todos los atajos disponibles
bind -lp
bindkey -L
Estoy manteniendo esto actualizado en esta esencia https://gist.github.com/madacol/da38e42d7e45c2949a9f425cc20543e9
fuente
Alt .
en Zsh en Mac está escribiendo≥
🤔bindkey -L
en zsh para ver todos los accesos directos vinculados, tal vez ayude a identificar el problema o incluso encontrar otros comandos útiles. En mi caso, por ejemplo: el enlaceAlt .
se define comobindkey "^[." insert-last-word
.Ctrl L
(para borrar la pantalla) ->bindkey "^L" clear-screen
.Alt+Ctrl h
->bindkey "^[^H" backward-kill-word
(igual queCtrl w
para eliminar la última palabra)bindkey "^[^_" copy-prev-word
Básicamente tiene un uso en arrancar argumentos anteriores (del comando) .
Por ejemplo, si se emite el siguiente comando:
entonces,
Hello,
será el primer argumento, ytoday?
el sexto , ese es el último; lo que significa que se puede hacer referencia al escribir:Alt+6 seguido por Ctrl-Alt-6
Ctrltradicionalmente se denota como un carácter de sombrero
^
antepuesto a los nombres de las teclas, y AltcomoM-
ese es el prefijo M eta .Por lo tanto, el acceso directo anterior se puede redefinir
^My
para tirar.Además, hay un acceso directo de sustitución de sombreros en la línea de comando:
para sustituir la primera cadena coincidente del comando anterior , lo que significa:
daría como resultado:
dejando el segundo partido (
hello
) sin cambios.Lo anterior es solo un atajo para:
La sustitución de nivel de evento (*) para la primera cadena encontrada (coincidente) en el comando anterior, mientras que el prefijo de la primera parte con el
g
interruptor se aplicará a toda la línea g lobally :como se suele hacer en otros comandos relacionados, como
sed
,vi
y enregex
(expresión regular), una forma estándar de búsqueda ( cadena de coincidencias ).Eso es lo que entendí al usarlo yo mismo y probar cosas por mi cuenta a partir de lo que leí de varias fuentes, incluidas páginas de manual, blogs y foros.
Espero que arroje algo de luz sobre formas misteriosas del
bash
shell Bourne-Again (un juego ensh
shell, que se llama Bourne shell después del apellido de su inventor), que es el shell predeterminado en muchas distribuciones, incluidos los servidores ( SO de servidor ).fuente
! ^ te dará el primer parámetro,! $ te dará el último parámetro,!: n te dará el enésimo elemento.
fuente
El método descrito al final de la respuesta aceptada también funciona con el argumento cero para mí. Tengo estas líneas en mi
~/.inputrc
:\e2\e.
tiene la ventaja de\e2\e\C-y
que recorre los comandos anteriores si se presiona repetidamente en lugar de insertar el segundo argumento del comando anterior varias veces.Para insertar todo el comando anterior, puede escribir
!!\e^
.\e^
eshistory-expand-line
.fuente
Si está en una Mac, tenderá a obtener caracteres extendidos con Ctrl + letra. Tengo mi clave de opción de barra de espacio derecho definida como meta en mi terminal (iTerm2) configurada. Esto significa que uso la tecla para navegar por palabra y extraer parámetros de comandos anteriores.
fuente