Как вы выполняете предыдущую команду в оболочке emacs?

47

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

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

Lidmith
источник

Ответы:

63

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

Вава
источник
Благодарность! Я немного искал, но не смог найти.
Лидмит
24

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

Пракаш К
источник
1
Ах, ты. Это кажется более естественным.
Лидмит
1
Хотя это и не было поставлено в первоначальном вопросе, я должен признать, что [C-up] и [C-down] не работают в Emacs через терминал (PuTTY).
AVP
1
Это также, кажется, не работает на моем Mac; C-up сопоставлен с определенной для Mac функцией.
amo
Для меня тоже C-upотображается expose. И M-pчувствует себя более естественно для меня.
Индрадхануш Гупта
5

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

(define-key comint-mode-map (kbd "<up>") 'comint-previous-input)
(define-key comint-mode-map (kbd "<down>") 'comint-next-input)
thiagowfx
источник
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))
DeLorean88
источник
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))
Кевин Бартлетт
источник
Проверьте свой файл еще раз. Второй ключ определения должен вызывать синтаксическую ошибку, поскольку последняя закрывающая скобка не соответствует первой.
vfclists