Macos 终端元箭头键绑定中的emacs

Macos 终端元箭头键绑定中的emacs,macos,emacs,terminal,Macos,Emacs,Terminal,我刚刚从使用Emacs.app切换到使用iterm2作为终端仿真器的终端模式下的Emacs服务器和EmacClient。不过,我在一些键绑定方面遇到了一些问题。特别是M-左箭头打印字符D,M-右箭头打印字符C,M-向上箭头打印字符A,M-向下箭头打印字符B。M-ret似乎可以工作,至少在组织模式下是这样。我在iterm2中使用xterm默认键,并将左选项键和右选项键绑定到+Esc。我可以在组织模式下使用Esc left或Esc right获得M-left功能,这在组织模式下尤其令人讨厌。我需要重

我刚刚从使用Emacs.app切换到使用iterm2作为终端仿真器的终端模式下的Emacs服务器和EmacClient。不过,我在一些键绑定方面遇到了一些问题。特别是M-左箭头打印字符D,M-右箭头打印字符C,M-向上箭头打印字符A,M-向下箭头打印字符B。M-ret似乎可以工作,至少在组织模式下是这样。我在iterm2中使用xterm默认键,并将左选项键和右选项键绑定到+Esc。我可以在组织模式下使用Esc left或Esc right获得M-left功能,这在组织模式下尤其令人讨厌。我需要重新绑定.emacs中的键吗?我该怎么做呢

我已经看过了,但我不明白为什么终端中的箭头键不可用

编辑:

Cat meta up:
^[[1;9A
Cat meta down:
^[[1;9B
Cat元权限:
^[[1;9C
Cat meta left:
^[[1;9D


主要问题已解决,但我现在在上移方面遇到了问题。
未定义“
。我尝试了一个类似的映射,使用从
cat
获得的转义序列:
^[[1;2A
。不愿意为类似问题创建另一个问题。

解决方案1

根据您提供的信息,这里有一件事您可以尝试。您可以告诉emacs将这些转义序列映射到正确的键序列:

(add-hook 'term-setup-hook
  '(lambda ()
     (define-key function-key-map "\e[1;9A" [M-up])
     (define-key function-key-map "\e[1;9B" [M-down])
     (define-key function-key-map "\e[1;9C" [M-right])
     (define-key function-key-map "\e[1;9D" [M-left])))
解决方案2

我还通过谷歌搜索找到了另一个可能的解决方案:重新定义iTerm绑定,以匹配emacs的需求

引自上页:

返回iTerm2下的概要文件键绑定,并为以下内容添加绑定:


我回答你的“主要问题已解决,但新问题”编辑

我找到了这家伙关于这个问题的博文: -


基本上,您可以使用“run cat”和按钮技巧查看系统/终端发送的转义码,然后添加“define key”行来定义M-{up,down,right,left}和M-S-{up,down,right,left}.

在命令提示符下键入
cat
,然后按元箭头键。这将显示箭头键输出的esc序列。请将这些添加到您的问题中。例如,在我的终端M-up输出上:
^[^[[A
。好的,这似乎与我尝试使用metaHmm时在emacs中得到的输出一致。不,键入
cat
,按enter键,然后按箭头键。啊,好的,谢谢,现在应该修复了。我以前曾尝试通过iterm重新映射它,但我一定是做错了什么。钩子成功了。谢谢!谢谢你这正是我所需要的。似乎每个人的字符代码都略有不同。上面使用了[1;4x]。那篇博文显示了[1;3x]。但我的是[1;9x]。非常混乱。
M-up      : Esc-[1;4A
M-down    : Esc-[1;4B
M-right   : Esc-[1;4C
M-left    : Esc-[1;4D