Есть много способов снять шкуру с этой кошки!
Чтобы заменить определенную строку, ^old^new^extra
будет принимать вашу предыдущую команду, замените old
с new
, и присоединять extra
. Вы можете остановиться как угодно; Например ^old
, заменит old
пустую строку и добавит пустую строку (по сути, удаляя old
и больше ничего не делая).
1. ^diff^checkout
2. ^cat^rm
Особенно полезный вариант этого:
for i in `seq 1 10`; do echo something complicated; done
# inspect the output to see if it looks right
^echo
Чтобы заменить определенное слово, вы можете использовать !m:n-p
для ссылки на слова n
через p
команду m
(используйте отрицательные числа для обратного отсчета от текущей команды). Вы можете опустить -p
часть, чтобы ссылаться на одно слово, и опустить :m-p
часть, чтобы сослаться на всю команду. Специальные формы !!
для !-1
, !$
для последнего слова предыдущей команды, и !*
для аргументов (все , кроме слов 0
) из предыдущей команды довольно удобно.
1. !!:0 checkout !!:2-
2. rm !*
Я часто использую оба из них; zsh особенно хорош здесь, поскольку нажатие на вкладку раскроет загадочные вещи, чтобы убедиться, что вы правильно поняли.
Есть также так много способов сделать это с редактированием строки. Читайте о сочетаниях клавиш вашей оболочки.