Mik*_*nen 11 command-line bash keyboard-layout unicode-entry readline
我正在使用芬兰语键盘布局,该布局将AltGr+映射Space到不间断空格(NBSP、U+00A0)。总的来说,我对此很满意,但我发现在使用 bash 命令行时,我经常不小心在管道“ |”符号(用芬兰语键盘布局用AltGr+写)之后写了 NBSP 而不是正常空格<。我想这是由于我需要AltGr在输入管道时按住并在击中空间之前释放它的事实造成的。当我发布发布的时机不合适时,AltGr我最终会在命令行上出现不可见的错字和错误消息,例如
grep: command not found
Run Code Online (Sandbox Code Playgroud)
看起来很像
grep: command not found
Run Code Online (Sandbox Code Playgroud)
这使得第一次注意到这个问题有点困难。
我知道我可以禁用 NBSP,但我更喜欢仅在管道字符之后禁用它(使用AltGr+Space来生成常规空间),或者如果这不可能,总是在 bash 命令行或readline级别上。有没有什么简单的方法可以在不修改bash 的源代码readline或我的终端模拟器 ( gnome-terminal) 的情况下做到这一点?
另一个好的解决方案是将 NBSP 配置为在命令行上以某种方式可见,例如替换为另一个字符(例如 U+2423 ?)仅用于渲染。
Mik*_*nen 10
这可以通过readline两种不同的方式在级别上完成。
将以下内容放入.inputrc(用于 的配置文件readline):
# include default system config because ~/.inputrc overrides system config
$include /etc/inputrc
# map NBSP to regular space (left part has NBSP in quotes, right part has space)
" ":" "
Run Code Online (Sandbox Code Playgroud)
如果降价弄乱了上述内容,则必须按照注释中的说明将 NBSP 放在冒号左侧的引号中。这将使用常规空间映射输入流上出现的任何 NBSP。
将以下内容放入.inputrc:
# include default system config because ~/.inputrc overrides system config
$include /etc/inputrc
# map "pipe + NBSP" to "pipe + regular space" (left part has NBSP in quotes)
"| ":"| "
set keyseq-timeout 250
Run Code Online (Sandbox Code Playgroud)
这个想法是将键序列{pipe后跟NBSP}映射到{pipe后跟空格}。如果您在 250 毫秒内键入序列(可在上面配置),则此方法有效。但是,直到超时消失,单独输入管道符号不会输出任何内容。如果您键入序列太慢,则不会应用此修复程序。另请注意,超时是全局的,因此如果您打算使用任何其他序列,则必须将超时设置得足够长,以便能够键入最长的序列。( readline 库不够聪明,无法输入字符,然后在字符序列与配置匹配后替换已经可见的字符。)