Existem muitas maneiras de esfolar esse gato!
Para substituir uma string específica, ^old^new^extra receberá o comando anterior, substituirá old por new e acrescente extra . Você pode parar o quanto quiser; por exemplo. ^old substituirá old pela string vazia e anexará a string vazia (essencialmente excluindo old e não fazendo mais nada).
1. ^diff^checkout
2. ^cat^rm
Variante especialmente útil disso:
for i in 'seq 1 10'; do echo something complicated; done
# inspect the output to see if it looks right
^echo
Para substituir uma palavra específica, você pode usar !m:n-p para se referir às palavras n a p do comando m (use números negativos para contar de volta a partir do comando atual). Você pode omitir a parte -p para se referir a uma única palavra e omitir a parte :m-p para se referir a um comando inteiro. Formulários especiais !! para !-1 , !$ para a última palavra do comando anterior e !* para os argumentos (todos menos a palavra 0 ) do comando anterior são muito úteis.
1. !!:0 checkout !!:2-
2. rm !*
Eu geralmente uso os dois; O zsh é especialmente legal aqui, já que clicar na guia expandirá as informações ocultas para garantir que você acertou.
Existem também muitas maneiras de fazer isso com a edição de linha. Leia os atalhos de teclado do seu shell.