如何从终端缓冲区切换到不同的缓冲区

luk*_*cki 52 emacs emacs23

我已经使用emacs几个星期了,它到目前为止一直很棒 - 来自vim比我想象的更容易(实际上 - emacs的键盘快捷键感觉更自然).

我添加了一些自定义项,例如在缓冲区之间移动,M-Left/Right/Up/Down因为C-x o当我一次打开四个文件时感觉有点太慢了.

到现在为止还挺好 :-)

但有一件事让我感到困惑:

  1. 我使用C-x 3和打开一些分裂C-x 2
  2. 我用其中一个打开终端 M-x term ENT
  3. 如何使用键盘切换到不同的分割?

通常的快捷方式显然不起作用 - 终端正在拦截每个emacs命令,我必须单击不同的缓冲区来激活它.

Jos*_*ews 127

在术语模式中,任何常规C-x whatever键绑定都会变为C-c whatever.

  • 有谁知道这是为什么呢?为什么不像往常一样使用Cx(stty -a命令未显示Cx的绑定)。 (3认同)

Tre*_*son 10

我不确定我理解你的问题.如果您运行M-x terminal,大多数关键事件都会发送到底层终端,因此标准C-x o绑定和您M-Left在终端中不可用.

尝试使用M-x shell在其中一个窗口中获取shell,并且您设置的导航绑定应该仍然有效.


off*_*by1 9

在术语模式下,键入C-c b RET以切换到其他缓冲区.

这就是Cx b RET通常做的事情.


小智 5

这应该可以让 Cx b 工作。您可能必须为任何自定义移动命令添加绑定。

(add-hook 'term-mode-hook
   (lambda ()
     ;; C-x is the prefix command, rather than C-c
     (term-set-escape-char ?\C-x)
     (define-key term-raw-map "\M-y" 'yank-pop)
     (define-key term-raw-map "\M-w" 'kill-ring-save)))
Run Code Online (Sandbox Code Playgroud)

顺便说一句,shell-mode 和 term-mode 之间有很大的区别。前者与 emacs 集成得更好(例如 cd 命令)。后者是一个完整的终端仿真,可以处理curses 程序。他们都有自己的位置。