问题描述
我想将我经常在终端中执行的命令绑定到组合键。该bind
命令一开始似乎有效。
但是,当我使用组合键时,最终我在终端中输入的字母是不可见的,并且按 Enter 不会创建新行。我的猜测是,它可能与 less 寻呼机有某种关系。
stty --all
问题开始之前和之后执行揭示了终端线设置差异:
echo
->-echo
(echo input characters
) 现在已关闭,因此我输入的所有内容都是不可见的。icrnl
->-icrnl
(translate carriage return to newline
)icanon
->-icanon
(enable special characters: erase, kill, werase, rprnt
)lnext = ^V
->lnext = <undef>
(CHAR will enter the next character quoted
) 无法再先键入 ctrl+v,然后再键入 Esc 来输入转义字符。flush = ^O
->flush = <undef>
(https://man.openbsd.org/stty.1#flush)
为什么会出现这种情况?是否可以使用自定义终端组合键而不会出现不可见问题?
如何重现
我已经在多个终端上进行了测试,包括lxterminal
、kitty
和alpine
。
- 绑定组合键,例如将+
bind -x '"\ea":"ls"'
绑定到命令。Altals
- 查看文件
less
- Ctrl使用+退出寻呼机c
- 按Alt+ a。这应该执行该
ls
命令。 less
再次查看文件- Ctrl使用+退出寻呼机c
- 按Alt+ a。这应该
ls
再次执行该命令。之后键入的字母就看不见了。
我不知道为什么这个问题只在我用+退出后第二次按Alt+时发生,也不知道为什么会发生。aless
Ctrlc