В Matlab есть очень хорошая функция, которая мне нравится. Предположим, я набрал команду очень длинная команда
, а затем несколько команд. Затем, если мне снова понадобится длинная команда, я просто набираю очень
и нажимаю клавишу со стрелкой вверх, появляется моя длинная команда. Он находит последнюю команду, которая начинается с очень
. Я не мог Делая то же самое в командной строке Unix, когда я пытаюсь это сделать, он игнорирует все, что я набрал, и возвращается к последним командам в хронологическом порядке. Есть ли способ сделать это?
В bash нажатие ctrl - r позволит вам выполнить поиск в истории:
$ echo 'something very long'
something very long
$ # blah
$ # many commands later...
(reverse-i-search)`ec': echo 'something very long'
В приведенном выше фрагменте я нажал ctrl - r в следующей строке после # многие команды позже ...
, а затем набрал e c , что вернуло меня к команда echo. В этот момент нажатие Enter выполнит команду.
Вы можете сделать то же самое, используя "!". Например:
$ echo "Hello"
Hello
$ !echo
echo "Hello"
Hello
Однако, как правило, делать такие вещи - плохая идея (что, если последняя команда сделала что-то разрушительное?). Если вы ожидаете, что будете использовать что-то повторно, то я предлагаю вам создать сценарий оболочки и сохранить его где-нибудь (всякий раз, когда я планирую что-то повторно использовать, я создаю сценарий в ~ / .local / bin).
В bash эта функциональность обеспечивается командами history-search-forward и history-search -backward, которые по умолчанию не привязаны к каким-либо ключам (см. здесь ). Если вы запустите
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
, он будет выполнять поиск по стрелке вверх и вниз по истории назад и вперед для строки символов между началом текущей строки и точкой. См. Также этот связанный вопрос о переполнении стека .