43

Я нахожусь в режиме терминала в Ubuntu, и я запускаю emacs с 2 открытыми буферами, один - файл ruby, а другой - оболочка (открывается с помощью ввода Mx shell), и когда я переключаюсь в буфер оболочки, я хочу выполнить ту же команду, что я запускал раньше. Обычно я просто нажимаю стрелку вверх в окне терминала, но в emacs он просто помещает курсор на одну строку вверх.

Кто-нибудь знает о нажатии клавиш для запуска предыдущей команды оболочки из оболочки emacs?

5 ответов5

59

M-p делает работу

24

В дополнение к Mp, вы также можете использовать C-up, который я считаю предпочтительным. Дополнительные клавиши Mn или C-down дадут вам следующую команду в истории.

5

Вы также можете добавить это в файл инициализации emacs:

(define-key comint-mode-map (kbd "<up>") 'comint-previous-input)
(define-key comint-mode-map (kbd "<down>") 'comint-next-input)
2

Решение thiagowfx предпочтительнее для меня, так как я обычно стараюсь избегать зависимостей от контекста. Однако для того, чтобы это работало, мне сначала нужно было добавить режим загрузки:

(progn(require 'comint)
(define-key comint-mode-map (kbd "<up>") 'comint-previous-input)
(define-key comint-mode-map (kbd "<down>") 'comint-next-input))
0

Ответ DeLorean88 работал для меня, но только со второй закрывающей скобкой в строке "progn":

(progn(require 'comint))
(define-key comint-mode-map (kbd "<up>") 'comint-previous-input)
(define-key comint-mode-map (kbd "<down>") 'comint-next-input))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .