问题描述:
我在.bashrc
文件设置了export INPUTRC=~/.config/.inputrc
,结果导致了我向终端粘贴时,终端显示异常
原因分析:
经过排查,发现只有在我粘贴带中文字符的内容时,才会发生异常行为。而且,如果注释掉 INPUTRC 变量,即使粘贴带有中文字符也是正常的。所以我怀疑是我设置的 INPUTRC 变量指示的文件覆盖了原有的全局设置。经查阅相关文档,发现确实该变量覆盖了 /etc/inputrc 文件中的设置。
解决:
readline文档表示,如果存在~/.inputrc
文件,或者 INPUTRC 变量,那么/etc/inputrc
文件中的内容将被覆盖。所以我这里直接执行cat /etc/inputrc >> ~/.config/inputrc
将 /etc/inputrc 文件中的内容追加到 INPUTRC 指示的文件中即可。
或者更好的方式是使用 bind 命令,在
~/.bashrc
文件中设置bind -f ~/.config/.inputrc
不仅 ~/.config/.inputrc 文件中的设置会生效,而且也不会覆盖 /etc/inputrc 文件中的设置。
更进一步,我最终定位到粘贴中文字符异常主要是以下变量的值未设置,而 /etc/inputrc 文件中对这些变量进行了设定,INPUTRC 变量指定的文件覆盖了此文件中的设置,所以这些变量的值失效了。
set meta-flag on # 允许从终端输入中文,否则的话终端会过滤掉每个字节的最高位; set input-meta on # 允许向终端直接输入中文 set convert-meta off # 设置不将中文字符转化为转义序列,因为中文是两个字节表示的,第一字节的最高位是1开头的,可以能同于某个转义字符; set output-meta on # 允许向终端直接输出中文
参考文献:
/etc/inputrc 详解