Me gustaría mejorar un poco mi flujo de trabajo con Bash, y me doy cuenta de que a menudo quiero ejecutar el mismo comando en un ejecutable diferente.
Algunos ejemplos:
Git (donde me gustaría cambiar rápidamente la segunda palabra):
git diff foo/bar.c
git checkout foo/bar.c
Cat / rm (donde solo se debe cambiar la primera palabra):
cat foo/is/a/very/long/path/to/bar.c
rm foo/is/a/very/long/path/to/bar.c
Sé que puedo presionar Ctrl+ y aluego Deleliminar la primera palabra, pero me pregunto si hay una manera más rápida de hacerlo.
Respuestas:
!$
se expande a la última palabra de su comando anterior.Entonces podrías hacer:
o:
Tus ejemplos solo repetían la última palabra, así que
!$
funcionó bien. Si realmente tuvieras muchos argumentos que quisieras repetir, y solo quisieras cambiar la primera palabra, podrías usar!*
, que se expande a todas las palabras del comando anterior excepto el cero.Consulte la sección "EXPANSIÓN DE HISTORIA" de la
bash
página del manual. Hay mucha flexibilidad allí.fuente
!$
usted no tiene un control visual completo de la línea que está ejecutando . Esto puede resultar dañino a veces. Especialmente si incurres en un error tipográfico. Toma dehistory
qué expandirse. Entonces, si escribe el último comando con un espacio en blanco al principio, probablemente este comando no termine en el historial. Cuando ejecute su nuevo comando con!$
el shell, no tomará los parámetros de la última línea de comando escrita, sino solo de la última del historial. Aquí las mismas palabras más.#
o unaecho
para poder lo veo y entra en la historia para que pueda recuperarlo y ejecutarlo nuevamente sin el prefijo de desactivación.Ctrl+ apara ir al comienzo de la línea, luego Alt+ dpara eliminar la primera palabra.
fuente
Meta+D
solo es válido siemacs
está habilitado (a travésset -o emacs
o simplemente por defecto). No funcionará en el modo de editor inferior o siemacs
está deshabilitado.C-a
yM-d
es mucho más rápido escribir si sus manos ya están en posición de escritura.cat
y compare lo que obtiene al presionar Inicio (^[[H
aquí) y al presionar Ctrl + a (^A
).No estoy seguro de si realmente sería más rápido o no, pero vea este artículo, particularmente el punto # .3:
fuente
Alt+.
Si solo necesita repetir la última parte de uno de los comandos anteriores, puede usar Alt+ .que pegará el último argumento tomado de la última línea del historial.
Si se presiona más de una vez, sustituirá lo que acaba de pegar con el último argumento de la línea anterior ...
Por ejemplo, si los últimos 2 comandos fueron:
En el shell escribo
rm
y presiono Alt+ .aparecerá:si presiono nuevamente Alt+ .aparecerá en su lugar
y así...
fuente
bash
. Por cierto, ¿estás seguro de que estás usando bash como shell ?≥
Además de la respuesta @jjlin, puede que le interesen los siguientes consejos:
$_
contiene el último argumento de la línea de comando anteriorPara obtener más información sobre estos, busque la sección "Nombres de comandos de Readline" de la página de
bash
manual.p.ej:
fuente
n
palabras en el comando,n = 1
en el primer ejemplo yn = 2
en el segundo. La respuesta de jjlin muestra cómo eliminar la primera palabra (y al volver a aplicar el acceso directo, eliminar hastan
palabras). Su respuesta enumera algunos atajos de Bash (que de hecho son útiles), pero ninguno de ellos son formas eficientes de eliminar las primerasn
palabras.$_
parámetro probablemente funcionaría si solo hay un argumento (es decir, sin = m - 1
dóndem
está el número total de argumentos). Sin embargo, el resto de los atajos es irrelevante para la pregunta.Si eres experto en vi, puedes activar los enlaces de vi en bash (¿la mayoría de los shells?) Usando el comando
set -o vi
. Luego, puede usar las teclas vi normales para editar su comando. En su primer ejemplo, podría hacer ^wcwpara eliminar "diff", luego cambiarlo a finalizar la compra.Puede que no valga la pena aprender las combinaciones de teclas vi solo para editar la línea de comando, pero si ya las conoce, es un buen refuerzo de productividad.
fuente
set -o vi
fue como viví! Incluso hago esto en mis indicaciones de bash también.bindkey -v
para zsh.Esc
0
c
w
¡Hay muchas maneras de pelar a este gato!
Para reemplazar una cadena específica,
^old^new^extra
se llevará a su comando anterior, reemplaceold
connew
, y anexarextra
. Puedes parar tan pronto como quieras; por ejemplo^old
, reemplazaráold
con la cadena vacía y agregará la cadena vacía (esencialmente eliminandoold
y no haciendo nada más).Variante especialmente útil de esto:
Para reemplazar una palabra específica, puede usar
!m:n-p
para referirse a las palabras an
travésp
del comandom
(use números negativos para contar desde el comando actual). Puede omitir la-p
parte para referirse a una sola palabra, y omitir la:m-p
parte para referirse a un comando completo. Las formas especiales!!
para!-1
,!$
para la última palabra del comando anterior, y!*
para los argumentos (todos menos la palabra0
) del comando anterior son bastante útiles.A menudo uso ambos; zsh es especialmente agradable aquí, ya que presionar la pestaña expandirá las cosas crípticas para asegurarte de que lo has hecho bien.
También hay muchas maneras de hacer esto con la edición de línea. Lea sobre las combinaciones de teclas de su shell.
fuente
La mayoría de los programas de terminal admiten ...
<Up-Arrow>
según sea necesario para volver a mostrar una de las líneas de comando anteriores del historial.<Down-Arrow>
según sea necesario para avanzar por la lista del historial.<Left-Arrow>
según sea necesario para mover el cursor al final de la segunda palabra.<Backspace>
según sea necesario para borrar la segunda palabra.<Right-Arrow>
/<Left-Arrow>
según sea necesario para reposicionar para más cambios.<RETURN>
para ejecutar el comandoSi la línea de comando que desea no era reciente, realice una búsqueda inversa
<Ctrl-r>
como se describe en la pregunta ...¿Hay alguna forma de usar ctrl-r después de escribir parte del comando en bash?
Luego edite con las teclas de flecha según sea necesario.
fuente
Lo que hago (Ubuntu / bash):
1)
Arrow up
hey para regresar el comando anterior2)
Home
tecla para regresar al comienzo3) Modificar el comando según sea necesario.
A prueba de idiotas y especialmente útil para comandos de varias líneas.
fuente