为什么我的 readline / .inputrc 配置被忽略?

为什么我的 readline / .inputrc 配置被忽略?

我的中有一个配置行.inputrc

set enable-bracketed-paste on  # Insert paste as a string rather than possibly running it

在命令行中输入以下内容时有效:

bind 'set enable-bracketed-paste on'

但是,当我开始时,该变量并未被设置bash v4.4.23

为什么这一行被忽略?

答案1

长话短说:

将注释放在配置的单独行中。

行尾的注释会导致readline默默地忽略全线如果该行在其他情况下有效。


手动的确实说:

Lines beginning with a ‘#’ are comments.

它并没有说注释会导致其他有效的配置行被忽略。

这很奇怪,因为该行:

set foobar on  # baz

结果是:

readline: /home/ravi/.config/readline/inputrc: line 34: foobar: unknown variable name

这意味着#末尾带有 a 的行确实被解析为有效性。如果它们是有效的,它们就会被忽略。

答案2

readline 的解析器似乎不太好:

 $ bind 'set "enable-bracketed-paste" "on" '; echo $?; bind -v | grep 'bracketed'
 0
 readline: "enable-bracketed-paste": unknown variable name

 $ bind 'set enable-bracketed-paste "on" '; echo $?; bind -v | grep 'bracketed'
 0
 set enable-bracketed-paste off

 $ bind 'set enable-bracketed-paste on '; echo $?; bind -v | grep 'bracketed'
 0
 set enable-bracketed-paste on

 $ bind 'set enable-bracketed-paste on .'; echo $?; bind -v | grep 'bracketed'
 0
 set enable-bracketed-paste off

似乎选项后面的任何字符串都被视为选项的一部分(也许?)。

手册指出注释是仅有的位于该行的开头,因此,我建议您遵守该规则。相反,使用:

 # Insert paste as a string rather than possibly running it
 set enable-bracketed-paste on

相关内容