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


47

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

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

Ответы:



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)

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))

Проверьте свой файл еще раз. Второй ключ определения должен вызывать синтаксическую ошибку, поскольку последняя закрывающая скобка не соответствует первой.
vfclists
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.