我如何在iterm2中发送Ctrl-;?

How do I send Ctrl-; in iterm2?


问题

我怎样才能在iterm2(emacs)中发送 Ctrl + ;

这里似乎有一个解决方案 , 这里 这里

这些都接近我想要的,但我还是无法使它工作。

将我的答案改编成第三个链接,并发送 0x1B 0x3B 不起作用?
谢谢你的回答。我试了一下,发现0x1B = ESC不是控制?(emacs认为它是M-;而不是C-;)
答案1

我让这些组合键工作的方法是,去iTerm prefs的 Keys 部分,为 ^; 创建一个快捷键,发送一些转义序列,如 ^[[aa (你可以用任何东西代替 aa ,但要注意,有些东西是映射到实际按键的)。然后在你的 .emacs 中,为你想让它映射到的东西创建一个键盘快捷键,比如

(global-set-key (kbd "C-[ [ a a") 'the-function-you-want-to-map-to)
你在iTerm中到底要做什么?当绑定到`^;^时,我有一个动作字段可以设置。我应该把它设置为 "发送逃生序列 "吗?然后下一个字段应该是什么?
是的,使用 "Send Escape Sequence",然后添加没有 ^[ 的代码(在我的例子中是 [aa )。 ^[ (Control-[)控制代码是 "转义"。
谢谢你,这很好用! 然而,当输入一个转义序列时,iTerm显示 ESC + [ _your escape sequence_ ] ,表明它实际上将发送一个转义键而不是ctrl键。(在我的例子中,ESC似乎映射为alt/ M- )。只是有些奇怪。
Control-[ (control-left bracket)和ESC是一回事,至少就终端而言是这样的(ESC在emacs中也叫M-,通常被映射到alt/option)。你可以在emacs中测试一下。 ESC-fC-[ f 都是做同样的事情(事实上,如果你输入 C-[ ,它应该在底部显示 ESC )。
不,在我的iTerm上不是用 emacs -nw 。对我来说,ESC肯定和按alt/option是一样的(我从来没有有意识地改变过),尽管它确实显示为例如ESC-f而不是M-f。
答案2

如何在Iterm2的控制键上绑定按键序列

  1. 从应用程序商店下载免费的应用程序 "Key Codes"。从下面的链接安装它,然后打开它。

  2. 按下 Ctrl + s ome键 在这种情况下,我将使用 Ctrl + w

    How to get the hex code

  3. 红色方块中的代码是我们要发送至终端的代码

  4. 现在使用iterm中的preferences->Keys->+映射的按键序列。

How to map the command to the hex code

  1. 现在这将把opt+←delete映射到终端的 Ctrl + w ,但你可以用它来映射任何键到另一个。我知道 Ctrl + w 对Emacs来说是个不好的例子,因为它不支持 Ctrl + w ,但你可以用这个方法来实现Emacs兼容的快捷键。
我认为你粘贴的unicode语法不被支持。
答案3

最简单的方法是 Preferences -> Profiles -> Keys --> 切换到 Report modifiers using CSI u .

这里有 这个选项的文档 更多关于CSI u 的内容。

在这个 线程 中有一些详细的讨论。

如果有更多的支持信息,你的答案可以得到改进。请 编辑 ,添加进一步的细节,如引文或文件,以便其他人能够确认你的答案是正确的。你可以在帮助中心 找到更多关于如何写好答案 的信息。
相同问题还可以参考: How do I send Ctrl-; in iterm2?