Извините, этот заголовок не самый элегантный, который я когда-либо придумывал.
Но я предполагаю, что многие люди будут удивлены этим, и мой вопрос может быть обманом ... все, что я могу сказать, я не нашел это.
Когда я говорю «прокрутка» вверх, я имею в виду использование клавиши «стрелка вверх» на клавиатуре, которая, очевидно, прокручивает вас по истории, начиная с самой последней команды.
Таким образом, вы находите команду, может быть, 30 команд назад ... и запускаете ее. И затем вы хотите запустить команду, которая первоначально пришла после нее ... Есть ли быстрый способ сделать это? Или как те, кто свободно говорит на BASH, делают это?
источник
vi
редактирование строки (с помощьюset -o vi
) илиemacs
? ПотомуCtrl-O
что не буду работать с первым, насколько я могу судить.bind "\C-o":operate-and-get-next
(или добавить все после того, какbind
к~/.inputrc
)Ответ Джона Рейнхолда великолепен, но я предлагаю гораздо более мощное решение. У меня также есть комментарий о гоче в ответе Джона, но у меня недостаточно репутации, чтобы иметь возможность комментировать напрямую, поэтому @Jon Reinhold, если вы прочитаете это, пожалуйста, отправьте мой комментарий ниже.
Bash включает команду
fc
, которая принимает в качестве параметров номера строк списка истории bash. Затем он открывает редактор по умолчанию с этими строками в виде текста. В этот момент вы можете при желании редактировать строки. Затем, когда вы выходите из редактора, bash выполняет эти строки!Примером редактирования, которое вы, возможно, захотите сделать, является добавление ко всем, кроме последней строки, что-то вроде "; read -p" next ... ". Это заставит bash выполнить каждую строку и запросит вас, прежде чем продолжить.
Комментарий для Джона Рейнхольда: отличный ответ, но вы должны его квалифицировать, потому что если пользователь установил переменную bash HISTCONTROL для включения
erasedups
, то после выполненияC-o
пользователь будет сбит с толку, поскольку вместо ожидаемой следующей команды в отображаемой истории, той, которая после этого будет отображаться. Это связано с тем, что bash удалил исходный экземпляр выполненной команды, и, следовательно, все команды впоследствии сместились на одну строку вверх, т.е. на один меньший индекс в списке истории.источник
fc
еще до какCtl-o
иbash
сам. (Вопреки этому ответу это также менее полезно.)erasedups
явно ошибкой bash ( в этой ситуации могли быть условия). Приятно знать, хотя.Другой способ добиться желаемого поведения было бы ознакомиться с ярлыками Баша (чтение строки из которых CTRL- oэто один я считаю) и история Баша поиском.
История поиска
CTRL- rвводит вас в поиск истории команд bash, где вы можете начать вводить команду, которую вы ищете, и bash автоматически выполнит команду за вас. Функциональность автозаполнения действительно очень хорошая. Когда команда, которую вы хотите выполнить, находится в строке ввода, вы можете ENTERзапустить команду или нажать CTRL-, eчтобы переместить курсор в конец командной строки и выйти из режима поиска истории.
Крутая вещь с CTRL- eна этом этапе, что буфер истории установлен контекстно для этой команды. Следующие и предыдущие команды теперь выполняются непосредственно перед и после строки, в которой находился поиск по истории. Вы можете нажать стрелки вверх или вниз и получить следующую команду.
Поиск в истории очень мощный и отличный способ избежать использования стрелки вверх, чтобы сначала вернуться к команде. Быстрый поиск по истории может сэкономить много времени при ручном поиске по истории, а затем вы можете продолжить CTRL- oкак указал Джон выше.
Readline Short Cuts
Если вы ищите общий bash-fu, я бы порекомендовал дать ярлык readline для клавиш со стрелками. Вы можете обнаружить, что они более удобны и позволяют увеличить скорость печати, но, конечно, YMMV. Вот еще несколько:
Эти ярлыки readline (наряду с CTRL- aначало строки и CTRL- eконец строки) увеличат вашу скорость и эффективность в командной строке imo.
источник