我一直在尝试将快捷方式绑定CTRL-[到 unindent 函数,但似乎如果您在 nanorc 中输入bind ^[ unindent main
( CTRL-[),文本的格式仍将是红色,而不是通常的绿色,告诉您绑定可以工作。我尝试将其更改为bind M-[ unindent main
(ALT-[),但仍然不起作用。奇怪的是,两者都CTRL-]有效ALT-]。有办法解决这个问题吗?
答案1
你不能。
终端发送字符,而不是按键。 (看键盘输入和文本输出如何工作?了解更多详细信息。)但并非所有按键都有相应的字符。当您按下没有相应字符的键或键和弦时,终端会发送代表该字符的字符序列,或者在某些情况下会发送不可打印的字符序列控制字符)。这些序列总是以特定字符开头,该字符称为逃脱特点。这个字符也是Ctrl+[发送的。
因此,如果您可以绑定^[
( Ctrl+ [),则会破坏所有发送转义序列的键。例如,Up发送三个字符 ( ^[
, [
, A
) 或三个字符 ( ^[
, O
, A
),具体取决于终端。如果您可以重新绑定^[
,则该Up键将执行 的操作^[
,然后插入[
和A
。
Alt+char发送转义字符,后跟字符。因此,如果您反弹M-[
,您实际上会重新绑定两个字符序列(^[
,[
),这会破坏一些光标和功能键。
Nano 技术上允许重新绑定^[
(从版本 2.5.3 开始),但这没有任何效果,因为当它读取 时^[
,它将其归类为转义序列的开始(我稍微简化了一点)并且它从不查找 的绑定^[
。 Nano 明确禁止重新绑定M-[
。
有办法解决这个问题一些终端,但只有少数编辑者利用它们。 Nano是一个相对简单的编辑器,主要针对不使用存在这种方式的终端的用户,并且不支持此功能。