Я использую Emacs и M-xterm
для терминала. Так как мой типичный рабочий процесс выглядит так:
- отредактируйте код
- C-x oв буфер терминала (или C-x b
term[Enter]
что-то еще) - нажмите Upклавишу, чтобы использовать последнюю команду
- нажмите Enter, чтобы запустить его
- C-x oвернуться назад
Я хочу связать все это (кроме первого шага... может быть) с одной командой. Я считаю, что Emacs достаточно хорош для этого :-)
Итак, команда должна:
- перейти в буфер с терминалом (возможно, он вообще не должен менять окна, возможно, он должен разделить окно по вертикали (если оно еще не разделено) и использовать правую сторону)
- выполнить последнюю команду, что было выполнено там
- вернуться к последнему буферу/части экрана
Спасибо! Я не очень привык к системе скриптов Emacs, и я надеюсь, что кто-то мне поможет, а кто-то другой сможет использовать ответ для улучшения своего рабочего процесса, так как я считаю, что это довольно распространенная проблема.
Примеры команд:
python manage.py test
python manage.py test stats
python solve.py # for project-euler puzzles :-)
первый и второй иногда запускаются через ssh (в терминале) (мне нравится разрабатывать с помощью vagrant
)
Я понимаю, что легко связать первое и третье, но второе меняется слишком часто - я бы просто хотел "выполнить последнюю команду"
решение1
Быстро и грязно — определение макроса:
F3
C-x b term RET
UP RET
C-x b RET
F4
Теперь F4
повторное нажатие повторит действия, которые вы сделали между последней парой F3
/ F4
. Вы можете сделать гораздо больше с макросами, включая наличие более одного макроса, редактирование макросов, сохранение макросов в .emacs
и т. д. Для получения дополнительной информации см.EmacsWikiиРуководство по Emacs.
решение2
Не M-x compile
позволяет сделать что-то подобное? Позволяет ввести пользовательскую команду и запустить ее, а затем повторить это в следующий раз...
Ну, вероятно, возникнут проблемы с интерактивными командами (вот почему вы хотели бы использовать термин), а также, возможно, с постоянным многоразовым ssh-соединением (но TRAMP мог бы здесь помочь: cd REMOTELOCATION; your_cmd
мог бы работать).
Так что, по крайней мере, вы можете взглянуть на compile
исходный код, чтобы узнать, как управляются буферы для такого сценария и как выполняются команды.