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

tmux干扰emacs命令?(windmove默认键绑定),emacs,screen,tmux,Emacs,Screen,Tmux,(windmove default keybindings'meta)提供在emacs窗口之间移动的命令(例如M-向上移动窗口)。当emacs-nw在终端中运行时,它们对我来说工作正常,但在tmux中它们失败了 单个命令可以工作,例如winmove-up;跑步时,他们告诉我: 您可以使用M- 但是对于M-本身,我得到: ESC未定义 任何其他前缀键(shift,control)也存在同样的问题 这分别在Ubuntu12.04和14.04下的tmux 1.9a/emacs 23.3.1和tmux

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

单个命令可以工作,例如
winmove-up
;跑步时,他们告诉我:

您可以使用
M-

但是对于
M-
本身,我得到:

ESC
未定义

任何其他前缀键(
shift
control
)也存在同样的问题

这分别在Ubuntu12.04和14.04下的tmux 1.9a/emacs 23.3.1和tmux 2.0/emacs 24.5.1中。在第一种情况下,我使用的是“gnome终端”。在第二天。。。我正在ssh’ing到一个服务器中,术语环境变量是“xterm”。一旦我启动tmux,它就会变成“screen-256color”;那是因为我使用了
set-g默认终端


想法?

Emacs并不总是正确地翻译功能键上的修饰符

首先,查看tmux选项
set-gxterm keys on
是否有任何区别。(这可能需要一个新的terminfo条目才能完全发挥作用;如果它做出任何更改,即使是说
ESC
以外的话,请在评论中说)

此外,在未启用xterm键的情况下,请尝试以下位置的键翻译:

(定义键输入解码映射“\e\eOA”(kbd“)
(定义键输入解码映射“\e\eOB”(kbd“))
xterm键
解决方案的优点是,如果它可以工作,它也可以用于shift和ctrl键

在启用xterm键的情况下,您可以使用适当的键安装新的terminfo条目,而不是修改功能键映射:

#注意:tmux确实将Home和End(\EOH、\EOF)转换为\E[1~,\E[4~
#但保留修改后的版本(\E[1;?H等)。
xterm+modkeys | xterm样式修改器键,
kb2=\EOE,kent=\EOM,
种类=\E[1;2B,kri=\E[1;2A,
kf13=\E[1;2P,kf14=\E[1;2Q,kf15=\E[1;2R,kf16=\E[1;2S,
kf17=\E[15;2~,kf18=\E[17;2~,kf19=\E[18;2~,kf20=\E[19;2~,
kf21=\E[20;2~,kf22=\E[21;2~,kf23=\E[23;2~,kf24=\E[24;2~,
kf25=\E[1;5P,kf26=\E[1;5Q,kf27=\E[1;5R,kf28=\E[1;5S,
kf29=\E[15;5~,kf30=\E[17;5~,kf31=\E[18;5~,kf32=\E[19;5~,
kf33=\E[20;5~,kf34=\E[21;5~,kf35=\E[23;5~,kf36=\E[24;5~,
kf37=\E[1;6P,kf38=\E[1;6Q,kf39=\E[1;6R,kf40=\E[1;6S,
kf41=\E[15;6~,kf42=\E[17;6~,kf43=\E[18;6~,kf44=\E[19;6~,
kf45=\E[20;6~,kf46=\E[21;6~,kf47=\E[23;6~,kf48=\E[24;6~,
kf49=\E[1;3P,kf50=\E[1;3Q,kf51=\E[1;3R,kf52=\E[1;3S,
kf53=\E[15;3~,kf54=\E[17;3~,kf55=\E[18;3~,kf56=\E[19;3~,
kf57=\E[20;3~,kf58=\E[21;3~,kf59=\E[23;3~,kf60=\E[24;3~,
kf61=\E[1;4P,kf62=\E[1;4Q,kf63=\E[1;4R,
kDC=\E[3;2~,kDC3=\E[3;3~,kDC4=\E[3;4~,kDC5=\E[3;5~,kDC6=\E[3;6~,kDC7=\E[3;7~,
kDN=\E[1;2B,kDN3=\E[1;3B,kDN4=\E[1;4B,kDN5=\E[1;5B,kDN6=\E[1;6B,kDN7=\E[1;7B,
kEND=\E[1;2F,kEND3=\E[1;3F,kEND4=\E[1;4F,kEND5=\E[1;5F,kEND6=\E[1;6F,kEND7=\E[1;7F,
kHOM=\E[1;2H,kHOM3=\E[1;3H,kHOM4=\E[1;4H,kHOM5=\E[1;5H,kHOM6=\E[1;6H,kHOM7=\E[1;7H,
kIC=\E[2;2~,kIC3=\E[2;3~,kIC4=\E[2;4~,kIC5=\E[2;5~,kIC6=\E[2;6~,kIC7=\E[2;7~,
kLFT=\E[1;2D,kLFT3=\E[1;3D,kLFT4=\E[1;4D,kLFT5=\E[1;5D,kLFT6=\E[1;6D,kLFT7=\E[1;7D,
kNXT=\E[6;2~,kNXT3=\E[6;3~,kNXT4=\E[6;4~,kNXT5=\E[6;5~,kNXT6=\E[6;6~,kNXT7=\E[6;7~,
kPRV=\E[5;2~,kPRV3=\E[5;3~,kPRV4=\E[5;4~,kPRV5=\E[5;5~,kPRV6=\E[5;6~,kPRV7=\E[5;7~,
kRIT=\E[1;2C,kRIT3=\E[1;3C,kRIT4=\E[1;4C,kRIT5=\E[1;5C,kRIT6=\E[1;6C,kRIT7=\E[1;7C,
kUP=\E[1;2A,kUP3=\E[1;3A,kUP4=\E[1;4A,kUP5=\E[1;5A,kUP6=\E[1;6A,kUP7=\E[1;7A,
屏幕xtermkeys |带有xterm样式修改键的屏幕,
use=xterm+modkeys,use=screen,
screen-xtermkeys-256color |带有xterm键和256色的屏幕,
use=xterm+modkeys,use=screen-256color,
tmux xtermkeys |带有xterm样式修改键的tmux,
use=xterm+modkeys,use=tmux,
tmux-xtermkeys-256color |带有xterm键和256色的tmux,
use=xterm+modkeys,use=tmux-256color,
使用
tic-x tmux xtermkeys.ti
编译,然后根据需要将TERM设置为
{tmux,screen}-xtermkeys{,-256color}
。我包含screen有两个原因:第一,默认情况下,emacs不会将tmux识别为256色终端。第二,一些系统版本的terminfo数据库太旧,无法包含tmux信息(删除这些条目以获取要编译的文件)

使用screen terminfo条目比使用xterm条目更好,因为tmux曾经建议使用screen,并且它的模拟与之更为匹配。在某些情况下,您可能会注意到一件事——如果是这样,请升级terminfo数据


这也适用于支持这些键的其他应用程序(即,它们现在在xterm中工作的大多数位置)。

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

方法#1:
.tmux.conf
中,使用
xterm键打开
,但如果使用256色,则正确设置
默认终端

set -g xterm-keys on
set -g default-terminal "xterm-256color"
方法#2:在终端运行
cat
,然后键入
M-
等以查找输出。在我的例子中是:
^[[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])))
请注意,第二种方法也适用于其他前缀键(
Shift
Control
),同样的问题出现在
屏幕中


还要注意的是,除了在
gnus
文章摘要缓冲区中,
M-
M-
的行为类似于
(虽然
M-
M-
工作正常)。

只有这对我有效:

在init.el中

;尝试移动