tmux 干扰 emacs 命令?(windmove-默认键绑定)

Dia*_*gon 5 emacs screen tmux

(windmove-default-keybindings 'meta)提供在 emacs 窗口之间移动的命令(例如M-<up>向上移动窗口)。emacs -nw当在终端中运行时它们对我来说工作得很好,但在 tmux 中它们失败了。

各个命令有效,例如winmove-up;当运行时他们告诉我:

您可以运行命令 winmove-upM-<up>

但就M-<up>其本身而言,我得到:

ESC <up>未定义

任何其他前缀键 ( shift, control) 都有同样的问题。

这分别位于 Ubuntu 12.04 和 14.04 下的 tmux 1.9a/emacs 23.3.1 和 tmux 2.0/emacs 24.5.1 中。在第一种情况下,我使用“gnome-terminal”。在第二个中......我正在 ssh'ing 进入服务器,并且 TERM 环境变量是“xterm”。一旦我启动 tmux,它就会变成“screen-256color”;那是因为我用过set -g default-terminal

有想法吗?

Dia*_*gon 4

在 @Random832 的帮助下,这个问题的答案和这个问题的第一个答案,以及有关 emacs 如何处理这个问题的答案中的功能键的一些有用信息,有两种方法:

方法#1: 在您的 中.tmux.conf,使用xterm-keys on,而且,如果您使用 256 种颜色,请default-terminal正确设置:

set -g xterm-keys on
set -g default-terminal "xterm-256color"
Run Code Online (Sandbox Code Playgroud)

方法 #2: 在终端上运行,cat然后键入M-<up>etc 以查找输出。就我而言,它是:(^[[1;3A以及 B & C & D)。然后,在您的.emacs文件中使用以下代码:

(add-hook 'term-setup-hook
  '(lambda ()
     (define-key function-key-map "\e[1;3A" [M-up])
     (define-key function-key-map "\e[1;3B" [M-down])
     (define-key function-key-map "\e[1;3C" [M-right])
     (define-key function-key-map "\e[1;3D" [M-left])))
Run Code Online (Sandbox Code Playgroud)

请注意,第二种方法也适用于其他前缀键 ( Shift, Control),并且同样的问题出现在screen.

另请注意,除了在gnus文章摘要缓冲区中,一切似乎都运行良好,其中M-<up>和 的M-<dn>行为类似于<up><dn>(尽管M-<rt>M-<lft>工作正常)。