2

在常规 cmd.exe 或 cygwin termal 上键入此命令会得到预期的结果:

$ ack hello

(我有 ack.bat 在我的 PATH 中执行 ack.pl)

但是,当我从 Emacs 中的 shell 或 eshell 运行相同的命令时,它给了我这个错误:

c:\Users\Martin>"C:\cygwin\bin\perl" /cygdrive/c/Users/Martin/Desktop/ack.pl hello 
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LC_ALL = (unset),
    LANG = "ENU"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

我试图通过 SETENV 将这两个变量都修复为 en_US.UTF-8 但是当我再次运行它时,它没有给我任何结果,而是冻结了。

更新:我终于找到了解决这个问题的方法。我需要的只是添加< NUL到命令的末尾,因为它将 Linux 风格的 NULL DEVICE 解析为默认值。

现在,如果我输入:

ack hello < NUL

它会给我预期的结果。

4

1 回答 1

0

这个问题与 ack 本身无关,而是珍珠,Ack 是用这种语言编写的。perl 报告的是,您运行 emacs 的环境没有设置语言环境设置。将以下行添加到您运行 emacs 的任何环境中:

export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

注意:运行ack hello < NUL只会掩盖问题,并不能解决问题。

于 2019-06-27T00:55:12.290 回答