我在另一篇文章中读到,您可以在终端中输入CtrlJ或CtrlM来代替按键,这很棒。Return但我想要做的是将其更改为另一种组合,例如:Ctrlspacebar.我尝试过重新映射F1密钥,但没有成功。
这可能吗?
答案1
取决于你到底想做什么。
终端有两种主要模式,这两种模式都可以通过额外设置进行微调:
- 熟/规范模式。在该模式下,终端附带一个内部行编辑器,其中
^H
(或^?
)、、^W
(^U
或@
)、^V
(或\
) 字符可用于编辑行。在^J
接收到字符之前,不会向从终端设备读取的应用程序发送任何内容。 - 生的模式。每个字符都可用于在输入后立即或在延迟后或在输入了这么多字符后读取终端设备的应用程序,具体取决于时间和分钟参数,但无论如何,不是使用内部行编辑器。
在这两种情况下,^M
(CR) 字符都可以自动转换为^J
(LF)(或者对于那些在按 Enter 时同时发送 CR 和 LF 的终端来说被忽略)。
第一种模式是终端的默认模式。第二种模式由zsh
、bash
或vi
想要控制行编辑的应用程序使用。
在第一种模式中,您无法更改用于接受该行的字符。
但是您可以告诉您的终端^J
在按这个或那个键时发送字符。例如,通过xterm
,您可以使用translations
X11 资源来更改键映射并告诉它在按下给定按键时发送您想要的任何内容。如果您的终端不支持重新映射键盘,您仍然可以使用 GNUscreen
来为您进行翻译。例如,如果您的终端^[OP
在按 时发送字符序列F1,您可以添加
bindkey \033OP "\012"
告诉你~/screenrc
当你按下时发送 LFF1
对于第二种情况,即应用程序控制输入,您仍然可以使用与上面相同的方法,但您也可以配置每个单独的应用程序来执行此操作,以及当您按F1
例如,对于zsh
,LF 字符绑定到accept-line
zsh
小部件。你可以这样做:
bindkey "^[OA" accept-line
绑定F1到同一个小部件。
请注意,Ctrl+Space通常发送 NUL 字符,您可以将其称为\0
或^@
。