从缓冲区外部更改缓冲区模式。以另一个缓冲区为幌子

时间:2013-12-19 07:51:10

标签: emacs terminal

如何在外部更改缓冲区的模式,即在另一个缓冲区中,可能使用eval

问题出在term-char-mode时我无法操作 M-x 。事实上,退出缓冲区并不是一件容易的事。有效的选项从模式行

更改为line mode

enter image description here

enter image description here

然后使用 M-x ,但这看起来非常笨拙和粗糙。还有别的吗?

基本上执行操作或从缓冲区外部传递命令,例如 X ,但假装是 X

3 个答案:

答案 0 :(得分:3)

这并不能直接解决您的问题,但请注意,在term-line-modeterm-char-modeterm-mode之间进行更改非常容易:

默认情况下,您在term-char-mode。要进入term-line-mode,请输入

C-c C-j

term-line-mode中,您可以使用常用的键绑定,包括 M-x

要返回term-char-mode,请输入

C-c C-k

另请注意,通常以 C-x 开头的键盘快捷键在term-char-mode中可用作 C-c ,例如find-file变为 C-c C-f 。但这对 M-x 没有帮助。

答案 1 :(得分:2)

您可以使用宏with-current-buffer轻松“伪装另一个缓冲区”。来自帮助:

(with-current-buffer BUFFER-OR-NAME &rest BODY)

Execute the forms in BODY with BUFFER-OR-NAME temporarily current.
BUFFER-OR-NAME must be a buffer or the name of an existing buffer.

它接受缓冲区名称或缓冲区引用这一事实非常方便。就个人而言,我发现宏名称中的“当前”部分有点反直觉,因为BODY不会在当前缓冲区中执行,而是在另一个缓冲区中执行,就好像它是当前缓冲区一样。

答案 2 :(得分:1)

您可以添加

(define-key term-raw-map (kbd "M-x") 'execute-extended-command)

到你的.emacs M-x char模式下工作。对于 C-x ,请使用

(add-hook 'term-mode-hook (lambda ()
                            (let (term-escape-char)
                              (term-set-escape-char ?\C-x)))

或使用ansi-term代替term来打开终端。这将允许您使用 C-x b 将缓冲区保留在 char模式

如果您需要将 Cx Cc 发送到 term 中的某个应用程序,您可以使用 Cc Cx Cc Cc

相关问题