[已解决] 安装好 ag 后,使用helm-ag 插件搜索出错?

大家好,我是新人,刚接触emacs不久,看子龙山人的视频开始学习的。刚看到第六集,里面安装ag后,使用hlm-ag搜索不到对应了内容。报错如图,路过的帮忙解决下,thx

报错提示找不到 ag。你需要把 ag 放到你的 PATH 中。

要怎么把ag配置到path中?麻烦贴代码看看

那是属于安装的一部份,不同环境下安装方法不一,你应该自己参考相应的安装文档。另外,应该也可以在 helm-ag 中设置 ag 的完整路径,具体是哪个选项参考 helm-ag 的文档。

先看看在 shell 中能不能找到 ag 的路径,例如:

$ which ag
/usr/local/bin/ag

然后在 init.el 中:

(add-to-list 'exec-path "/usr/local/bin")

如果 shell 中找不到 ag

  • 方法1,解决 shellPATH 问题
  • 方法2,直接 (add-to-list 'exec-path "ag所在目录")
3 个赞

推荐 @twlz0ne 说的第二个方法,直接修改 exec-path,不管你在 shell 中是否可以找到 ag,应该 helm-ag 都可以找到 ag 了。

注意 PATHexec-path 并不是同一个东西。exec-path 是 Emacs 直接查找某个命令的时候使用的,比如 helm-ag 内部实现使用的 start-file-processPATH 则是你在 Emacs 中调用 shell 命令的时候使用的,比如 M-!。Emacs 启动的时候会根据 PATH 设置 exec-path 的值。所以这两者的值开始的时候应该是一样的。

解决你的这个问题只需要修改 exec-path,但是我还是建议最好同时修改 PATHexec-path,这样不容易造成困惑

(let ((my-path "/path/to/whatever"))
  (setenv "PATH" (concat my-path ":" (getenv "PATH"))) ; Assume ":" is the separator
  (add-to-list 'exec-path my-path))

另外可以参考 melpa 上的 exec-path-from-shell,这样你在 .bashrc.zshrc 里设置的 PATH 可以被读取到 GUI 的 Emacs 中,不需要在 Emacs 中自己手动设置以上两个变量了。

6 个赞

可以了,谢谢

我也遇到这个问题M-x helm-do-ag-project-root 然后无论搜索什么都有下面的问题

尝试 shell 里输入which ag 显示 which: no ag in 一堆 PATH 请问应该怎么办呢?