如何在emacs shell中运行上一个命令?


47

我在Ubuntu上处于终端模式,并且正在运行emacs,其中打开了2个缓冲区,一个是ruby文件,另一个是shell(通过键入Mx shell打开),当我切换到shell缓冲区时,我想要运行我之前运行的相同命令。我通常会在终端窗口中按向上箭头,但是在emacs中,它只是将光标向上移动了一行。

有谁知道从emacs shell中运行先前的shell命令的击键操作?

Answers:



24

除了M-p,您还可以使用C-up,我觉得更可取。补充键M-nC-down将使您获得历史记录中的下一个命令。


1
啊,ty。这似乎更自然。
利德米特

1
即使不是最初提出的问题,我也必须承认[C-up]和[C-down]在终端机(PuTTY)中在Emacs中不起作用。
2014年

1
我的Mac上似乎也无法使用;C-up映射到Mac专用功能。
AMO

对我来说C-up也映射到expose。而且M-p感觉更自然的我。
Indradhanush Gupta 2014年

5

您也可以将其添加到emacs初始化文件中:

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

2

thiagowfx解决方案对我而言更可取,因为我通常会尝试避免上下文依赖。但是,为了使其工作,我必须先添加加载comint模式:

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

再次检查您的文件。第二个define键应该导致语法错误,因为最后一个右括号与第一个不匹配。
vfclists
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.