Терминал с кнопкой «повторить последнее»

Терминал с кнопкой «повторить последнее»

Я часто компилирую вещи и, следовательно, повторяю одну и ту же команду снова и снова, поэтому я хотел бы воспользоваться своей "зрительной памятью" и иметь своего рода кнопку "повторить последнюю команду", прикрепленную к терминалу. Точнее, вот как я это вижу:

  • Мой "специальный" терминал будет похож на стандартный эмулятор терминала, с дополнительной строкой ввода внизу, к которой будет прикреплена кнопка "запустить". Нажатие кнопки запустит командубезстираю его.
  • Возможно, можно было бы объединить в стек даже произвольное количество таких команд (поскольку мне часто приходится чередовать 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.

Связанный контент