假设我A在文本编辑器中按下键,这会a
在文档中插入字符并将其显示在屏幕上。我知道编辑器应用程序没有直接与硬件通信(中间有内核和其他东西),那么我的计算机内部发生了什么?
我们是否有一个键绑定表来翻译所有指代按键的方式?我正在使用zsh
,但我认为如果有这样的表,它将适用于任何外壳。
我问的原因是我想分配一些键绑定,但我不知道如何引用它们(除非我要窃取一个已经定义的)。
例如,在“zbindkey”中,我们有这样的事情:
[[ "$terminfo[kend]" == " O"* ]] && \
bindkey -M emacs "${terminfo[kend]/O/[}" end-of-line
Run Code Online (Sandbox Code Playgroud)
...我可以猜到“kend”意味着这是指End钥匙。
交叉检查bindkey
我看到这些行:
"^E" end-of-line
"^[OF" end-of-line
"^[[F" end-of-line
Run Code Online (Sandbox Code Playgroud)
...所以我相信其中一行是指End密钥。哪一个?
我们在“bindkey”文件中也有这个:
bindkey "\e[A" history-beginning-search-backward
Run Code Online (Sandbox Code Playgroud)
现在,我碰巧知道那是Up Arrow关键,但如果我不知道,我怎么知道呢?
$ bindkey (at CLI)
Run Code Online (Sandbox Code Playgroud)
... 为同一个键提供了不同的语言:
"^[[A" history-beginning-search-backward
Run Code Online (Sandbox Code Playgroud)
...但至少现在我知道 ^[[A
在 bindkey-at-CLI 中说话与\e[A
在 bindkey-in-zbindkey 中说话是一样的。这很容易。在过去的DOS下,Up Arrow 是0;72
-你会发现每一个法律按键的扫描码,有仅仅是一种语言。
有桌子吗?或者能够选择击键并知道如何terminfo[]
在“bindkey-in-zbindkey”中……在“bindkey-at-CLI”和/或任何其他语言中引用它的其他方式碰巧是?
同样,在 DOS 中有scancode
程序——键入一个键,你就得到了扫描码。这太容易了。
从答案中我猜想没有办法打印出所有可能绑定的表格?无论如何'bindkey'几乎可以满足我的要求:
pts/2 HP-y5-10-Debian1 root /aWorking/Docs $ bindkey -L
bindkey …
Run Code Online (Sandbox Code Playgroud) 网络 ( 1 , 2 , 3 ) 中的资源声称某些组合键(其中Ctrl-Shift-letter, Ctrl-number, Ctrl-i/ Tab, Ctrl-m/ Enter, Esc/ Ctrl-[)无法在 Vim 中可靠地映射,因为终端无法将它们与未修改的对应项区分开来(更多背景信息请参见Gilles ' 答案和这篇 ASCII 表文章)。作为一个具体的例子,地图
nnoremap <Tab> :!echo A<CR>
noremap <C-S-X> :!echo B<CR>
noremap <C-1> :!echo C<CR>
noremap <C-F1> :!echo D<CR>
Run Code Online (Sandbox Code Playgroud)
导致Tab和Ctrl-i打印 A (也在 Gvim 中),并且 和Ctrl-x打印Ctrl-Shift-xB. Ctrl-{1,2,...}和Ctrl-{F1,F2,...}无法映射,前者甚至在 Gvim 中也不能映射。
这是“如何以不同方式映射 Ctrl-a 和 Ctrl-Shift-a?”的答案。简短地描述了 Xterm 的解决方案,但它缺少一些可能会被忽略的棘手细节。这是试图提供更完整的答案。
尽管这是一个以 Vim …
转义序列与 ASCII 控制字符有常见的配对,例如 Ctrl-C 和 Ctrl-Z 分别与 ETX 和 SUB 配对。
在维基百科控制代码页面上,有最多的配对,但没有引用的参考。
控制字符和键序列配对是标准的一部分吗?
Linux 和其他操作系统的列表在哪里?
是否有手册页列出了这些配对?
它们纯粹是几十年的不成文约定吗?
参考
stty -a
列出了一些