我最近不得不从 tcsh 切换到 bash shell。为了在 bash shell 上使用 tcsh 的 ESC+p 和 setcomplete=enhance
,我在 bash shell 的 .inputrc
文件中添加了以下三个命令:
bind 'set completion-ignore-case on'
bind '""\ep": history-search-backward'
bind '"\en": history-search-forward'
之后,我获取了 .inputrc,并且得到了这些命令的预期行为。但我注意到一个奇怪的问题,如果我在命令提示符下输入“b”,它就会转换为 \en": History-search-forward'
。
然后我注释掉了 .inputrc 中的最后两个命令并再次获取它。然后同样的问题再次出现,这次“b”转换为“设置完成忽略大小写”。如果我注释掉 .inputrc 和 source 中的所有三个命令,那么“b”就会正确输入。
我从中唯一了解到的是,无论最后一个绑定(bind)命令附加到什么,'b' 只是切换到那个。
请帮助我,我不知道如何摆脱这个问题。
另请注意,如果我删除“bind”并简单地编写如下命令,那么当我获取它时,它会说 bash shell 命令未找到:
set completion-ignore-case on
""\ep": history-search-backward
"\en": history-search-forward
谢谢。
西蒙
最佳答案
.inputrc
文件不是 shell 脚本。您不通过 shell 运行它(这意味着您不使用 .
或 source
)。
我相信,在 inputrc 文件(如默认的 .inputrc
)中,您的后一个(bind
-less)版本是正确的,您应该简单地允许bash/readline 在 shell init 时自动加载该文件(或使用 C-x C-r 告诉 readline 实时重新读取 inputrc 文件)。
话虽如此,除了双引号之外,我相信这些原始行在通过 bash 获取/运行时应该可以正常工作(尽管不在 .inputrc
文件中)。
关于bash shell .inputrc 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24785904/