MinGW/msys的Shell或终端无法输入'e'或'P'

7
我曾成功安装并使用MinGW和msys编译和链接Windows可执行文件。但在32位Vista上进行全新安装时(与我之前成功的平台相同),我遇到了一些令人发狂的问题:当我在提供的shell环境中键入小写字母“e”或大写字母“P”时,会听到一个响声,但没有字符出现!这意味着我不能输入“make”或“echo”,然后运行这些命令。例如,它变成了m-a-k-BEEP!
在通过安装程序生成的快捷方式调用msys时打开的shell中,不会发生此类“无e”哔哔声,并且在通过导航到c:\ msys \ 1.0 \ bin并双击bash.exe,sh.exe,rxvt.exe(实际上,它更像是闷响声而不是清脆的哔哔声)的shell中也是如此,但始终无法回显小写字母“e”和大写字母“P”(或者shell?显然我对这些术语的区别没有掌握)。
我尝试过自动化的MinGW和msys安装程序,以及手动重新安装,但结果相同。
由于我对shell以及它们启动时的环境演变不太了解,因此我不知道从哪里开始寻找这种古怪行为的根源。

在Windows上使用git shell时遇到了同样的问题,但在新的MinGW bash上没有。相同的修复方法奏效了...也许这只是特定于某些MSys版本的问题? - Kos
2个回答

12

我假设你正在使用Bash。听起来键绑定可能因某些原因出了问题。

如果您执行此命令:

bind -p|grep -i '"[pE]"'

你应该得到这个结果:

"E": self-insert
"e": self-insert
"P": self-insert
"p": self-insert

如果“P”和“e”的条目缺失,则尝试使用以下命令。

bind '"e":self-insert'
bind '"P":self-insert'

显然,你无法输入这些字符,因此输入它们的反向大小写版本,按左箭头,然后按Alt-u以大写小写字母“p”或按Alt-l(那是一个小写字母“L”)以小写大写字母“E”(您需要针对第一个命令中的每个“e”执行此操作)。

如果这样可以,请检查~/.inputrc文件中是否存在无效的键绑定。还要检查启动文件,例如~/.bashrc等。问题很可能是由于引号缺失或放置不当而导致的,可能是某个类似于\eP的键绑定,默认情况下绑定到readline函数do-lowercase-version


您的指示完美地起作用了。我能够看到确实“P”和“e”没有自插入绑定,将它们添加进去后一切都正常了。然后我开始四处寻找,果然在我的“~/.inputrc”文件中发现了我添加的有问题的行,认为它们是无害的:“echo $PATH”和“PATH=$PATH:/c/MinGW/msys/1.0/bin:.”以及“echo $PATH”,由于某种原因导致了问题,当它们被删除时问题得到了解决。谢谢! - dim fish
1
@dim fish:是的,~/.inputrc不是可执行文件,因此您无法在其中放置命令。 - Dennis Williamson
@DennisWilliamson 我和“b”有同样的问题。我之前也遇到过“e”的问题,通过从.inputrc中删除所有设置来解决了这个问题。在插入一个双引号之前,“b”只插入一个双引号,现在按下“b”会插入无限数量的双引号,直到我按下ctrl-c。我将bind '"b":self-insert'放入inputrc中,但没有任何变化。我的msys非常简单,除了coreutils之外几乎没有其他软件包。 - otonvm
1
@otonvm:bind是一个shell命令,因此您可以在shell脚本(例如~/.bashrc)中使用它。但是,在~/.inputrc中添加键绑定时,请省略bind命令和外部一组单引号。还要注意,点是名称.inputrc的第一个字符。 - Dennis Williamson
2
@DennisWilliamson 哦,我现在明白了!我只是假设 .inputrc 和 .profile 或 .bash_profile 是一样的。现在很明显了。谢谢!(我应该更好地阅读评论,抱歉!) - otonvm

0
在目录C:\Documents and Settings\yourusername中,您可以找到一个名为'.bashrc'的文件 添加以下2行 bind '"e":self-insert' bind '"P":self-insert'
Dennis Williamson,非常感谢!这个问题困扰我很长时间了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接