如何在外部更改缓冲区的模式,即在另一个缓冲区中,可能使用eval
。
问题出在term-char-mode
时我无法操作 M-x 。事实上,退出缓冲区并不是一件容易的事。有效的选项从模式行
line mode
到
然后使用 M-x ,但这看起来非常笨拙和粗糙。还有别的吗?
基本上执行操作或从缓冲区外部传递命令,例如 X ,但假装是 X 。
答案 0 :(得分:3)
这并不能直接解决您的问题,但请注意,在term-line-mode
中term-char-mode
与term-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 。