
Я часто компилирую вещи и, следовательно, повторяю одну и ту же команду снова и снова, поэтому я хотел бы воспользоваться своей "зрительной памятью" и иметь своего рода кнопку "повторить последнюю команду", прикрепленную к терминалу. Точнее, вот как я это вижу:
- Мой "специальный" терминал будет похож на стандартный эмулятор терминала, с дополнительной строкой ввода внизу, к которой будет прикреплена кнопка "запустить". Нажатие кнопки запустит командубезстираю его.
- Возможно, можно было бы объединить в стек даже произвольное количество таких команд (поскольку мне часто приходится чередовать 2 или 3 команды).
Я знаю, что могу использовать только ↑Enterклавиатуру, чтобы повторить последнюю команду, но часто случается так, что я забываю, что мне просто нужно было набрать другую команду (чтобы что-то исправить или что-то еще), поэтому ↑не вывожу нужную команду из истории. Поэтому вместо рефлекса мне приходится фактически читать (хотя бы бегло просматривать) команду, прежде чем нажать Enter.
Есть ли где-нибудь такая штуковина? Я часто использую несколько терминалов именно для того, чтобы убедиться, что в каждом всегда есть "правильная" команда в конце, но мои навыки Alt+ Tabобычно заставляют меня переходить в неправильное окно. И мне нужна информация о терминале, такая как среда и cwd, поэтому я не могу просто попытаться "интегрировать" ее в свой редактор кода. Я имею в виду, что использование Alt+ F2, а затем Enterне сработает (так как мне также нужно прочитать вывод с терминала). Я просто хочу иметь возможность использовать лучшее из клавиатурной и визуальной памяти (через щелчки) одновременно.
решение1
Я думаю, что расширение истории может быть здесь очень полезным. Например, ввод !p
выполнит последнюю команду, начинающуюся с 'p'. Аналогично !vi
выполнит последнюю команду, начинающуюся с 'vi', и так далее. Подробнеездесь. Если вы не уверены, какой из них был последним, вы можете установить опцию оболочки histverify
( shopt -s histverify
), чтобы вы все равно могли редактировать (или проверять) команду перед ее выполнением. Подробнее об этомздесь.
В качестве альтернативы вы можете использовать функцию поиска по истории. В bash нажмите Ctrl+R
и введите команду, которую вы хотите найти в истории (начиная с самой последней, которая соответствует критериям). Ctrl+R
Повторное нажатие затем вернет более старые команды, которые соответствуют вашим критериям. Дополнительная информацияздесьиздесь
Если вы заинтересованы, вы можете изменить inputrc вашего readline, так что стрелки вверх/вниз будут выполнять поиск истории за вас. Дополнительная информацияздесьиздесь.
решение2
Взгляните на историю функциональности вашей оболочки. В моем zsh:
!!
повторяет последнюю команду.
Введите текст history
, чтобы просмотреть последние несколько записей.
Чтобы получить нужный буфер в оболочке:
man zshzle
или
man readline
Также вы можете развернуть вкладку завершения
make long_target
ls some_path
...
make l<TAB> # prints 'make long_target' without running it
используйте подстановочные знаки, расширения... ни один фрагмент вашего варианта использования не должен выходить за рамки этой функциональности.
решение3
Используя zsh
вы можете сделать это с помощью Esc+ A. Введите команду, затем нажмите Esc+ Aвместо Enter. Команда будет выполнена, и эта же команда будет в буфере строки после завершения команды.
решение4
Похоже, вам нужен очень простой ответ. Поскольку вы упомянули Alt+ Tab, я предполагаю, что вы используете (X)windows. Вы выделяете команду мышью, прежде чем нажать «Enter». Она автоматически копируется в буфер обмена, когда вы ее выделяете. Чтобы вставить ее, нажмите среднюю кнопку мыши (колесо прокрутки) или введите Shift+ Insert.