Есть несколько способов сделать то, что вы хотите.
Современные (и самые популярные) оболочки, такие как bash и zsh, используют GNU readline в качестве входной библиотеки. См. man 3 readline, раздел Редактирование команд. Есть два режима: emacs и vi.
set -o emacs
Ответ @sebasth охватывает эту часть.
CTRL+ P(или UP): Последняя команда
ALT+ B: Слово назад
ALT + F: Слово вперед
ALT+ D: Удалить следующее слово
ALT+ Backspace: Удалить предыдущее слово
CTRL+ A: начало строки
CTRL+ E: конец строки
set -o vi
Нажмите Iдля перехода в режим вставки и ESCдля перехода в командный режим. Перейдите в командный режим и затем:
K: Последняя команда
B: Слово назад
W: Слово вперед
DW: Удалить следующее слово
] DB: Удалить предыдущее слово
0: Начало строки
$: Конец строки
fc
вставит ваше последняя команда (вы также можете указать другую команду в своей истории) в вашем любимом редакторе (см. переменную $EDITOR). Команда будет запущена при выходе из редактора.
Когда командная строка становится все длиннее и длиннее, вы можете захотеть использовать настоящий редактор вместо строки чтения оболочки. В качестве бонуса вы можете сохранить его как файл сценария на вашем диске.
Использование ^before^after
позволяет заменить строку до
на после
.
Например:
abitbol@localhost $ echo 1 2 3 4 5 6 7
1 2 3 4 5 6 7
abitbol@localhost $ ^3^42
echo 1 2 42 4 5 6 7
1 2 42 4 5 6 7