我想在 bash 中输入波浪号,但按 F10 会给我“1~”而不是“~”

use*_*163 1 terminal cygwin bash conemu

以前,我可以通过按 来在我的 bash 终端中输出波浪号F10。现在,当我按下时,F10我得到两个字符:1~. 这同样适用于F9/ F11/ F12。奇怪的是,其他功能键F1-F8给我一个波浪号,但我想F10成为我的波浪号键。

任何想法如何解决这一问题?

use*_*686 8

这些键都不是波浪号键。他们都产生多个字符序列,如ESC [24~F12关键,或ESC [15~F5关键(虽然F1-F4都略有不同),甚至ESC [5~PgUp关键。

你的唯一原因一个波浪是因为bash的关键序列分析器消耗它知道(公共部分ESC [2),并停止,因为它知道,一旦该全序列将是未知的。接下来的所有内容(不一定是波浪号!)都被单独解释。

请注意,这种行为在基于终端的程序之间可能有所不同:Bash (readline) 有自己的解释特殊键的代码,Vim 有自己的代码,Irssi 也有自己的代码。某些程序可能会将您的按键完全识别为 F10(因此忽略它)。


要在全局(操作系统范围内)制作F10实际的波浪号键,请搜索“键重新映射器”工具(可能是 AutoHotkey)。


F10在所有基于终端的程序中制作波浪号键,请搜索终端的设置。(本例中的“终端”指的是 ConEmu。)

终端可能有自己的功能来重新定义单个键,或者可能创建“宏”。(ConEmu文档建议用print(…)动作定义一个宏。)


F10在 Bash 中创建波浪号键(但仅限 Bash):

  1. 确保您的终端模拟器 (ConEmu) 没有将 F10 绑定到它自己的某些功能。(普通的 F10 通常不绑定任何东西——但是,Shift+F10 是打开“右键单击”菜单的标准键。)

  2. 在 bash 中,按CtrlV(literal insert)然后按 F10。您将看到类似^[[21~.

    (首字母^[代表 ESC,其余的只是文字符号。)

    如果在这一点上,关键不插入任何顺序可言,它已经接管了终端本身或其他程序的手段-回到步骤1。

  3. ~/.inputrc在文本编辑器中打开(或创建)文件。

  4. 添加这一行,从步骤 #2 中获取序列并替换^[\e

    "\e[21~": "~"
    
    Run Code Online (Sandbox Code Playgroud)

    这告诉 inputrc~在接收时插入 a ESC [21~

  5. 重新打开 Bash shell(或按CtrlX,CtrlR重新加载 inputrc)。