如何将 ^[ 或 M-[ 快捷方式绑定到 nano 中的操作?

如何将 ^[ 或 M-[ 快捷方式绑定到 nano 中的操作?

我一直在尝试将快捷方式绑定CTRL-[到 unindent 函数,但似乎如果您在 nanorc 中输入bind ^[ unindent main( CTRL-[),文本的格式仍将是红色,而不是通常的绿色,告诉您绑定可以工作。我尝试将其更改为bind M-[ unindent mainALT-[),但仍然不起作用。奇怪的是,两者都CTRL-]有效ALT-]。有办法解决这个问题吗?

答案1

你不能。

终端发送字符,而不是按键。 (看键盘输入和文本输出如何工作?了解更多详细信息。)但并非所有按键都有相应的字符。当您按下没有相应字符的键或键和弦时,终端会发送代表该字符的字符序列,或者在某些情况下会发送不可打印的字符序列控制字符)。这些序列总是以特定字符开头,该字符称为逃脱特点。这个字符也是Ctrl+[发送的。

因此,如果您可以绑定^[( Ctrl+ [),则会破坏所有发送转义序列的键。例如,Up发送三个字符 ( ^[, [, A) 或三个字符 ( ^[, O, A),具体取决于终端。如果您可以重新绑定^[,则该Up键将执行 的操作^[,然后插入[A

Alt+char发送转义字符,后跟字符。因此,如果您反弹M-[,您实际上会重新绑定两个字符序列(^[[),这会破坏一些光标和功能键。

Nano 技术上允许重新绑定^[(从版本 2.5.3 开始),但这没有任何效果,因为当它读取 时^[,它将其归类为转义序列的开始(我稍微简化了一点)并且它从不查找 的绑定^[。 Nano 明确禁止重新绑定M-[

有办法解决这个问题一些终端,但只有少数编辑者利用它们。 Nano是一个相对简单的编辑器,主要针对不使用存在这种方式的终端的用户,并且不支持此功能。

相关内容