我的中有一个配置行.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