(windmove-default-keybindings 'meta)提供在 emacs 窗口之间移动的命令(例如M-<up>向上移动窗口)。emacs -nw当在终端中运行时它们对我来说工作得很好,但在 tmux 中它们失败了。
各个命令有效,例如winmove-up;当运行时他们告诉我:
您可以运行命令 winmove-up
M-<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
有想法吗?
在 @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>工作正常)。