doom emacs在windows下无法使用ripgrep

之前是manjaro+spacemacs 现在切换到windows感觉spacemacs有点慢了,想试试doom doom(develop)+GNU Emacs 28.0.50 (build 1, x86_64-w64-mingw32) of 2020-02-10 安装完以后,发现rg无法使用,提示error 2

图片

  1. 网上搜了一下,发现之前类似的问题与counsel-rg相关,启动后,counsel-rg-base-command如下: ("rg" "-M" "240" "--with-filename" "--no-heading" "--line-number" "--color" "never" "%s" "--path-separator" "//" ".") 尝试修改counsel-rg-base-command参数,没有作用

  2. doom配置中切换ivy为helm,也没有效果

  3. manjaro上试了下doom,同样配置是没问题的

windows命令行直接rg是没问题的,在spacemacs中也是正常的

1 个赞

我在windows 7下是可以用的,用的ivy。emacs 27.09,rg是小一点的那个版本。你这个错误好像见过,可能是传的参数问题。你可以调试跟踪一下看看传了些什么参数到rg

嗯,我用processmonitor看了命令行参数,和配置的是一致的,且在cmd里面执行是ok的 修改配置只使用rg命令不带参数,也是同样的error

你用默认的doom配置试试看,windows下是可正常用的

“–path-separator” “//” 的问题。

这个//是适合在msys2的bash里启动emacs的。 cmd/powershell的话,得就用/

确定是这个原因造成,修改下面代码,把"//“改成”/"就可以用了。

      ;; REVIEW Fix #3215: prevents mingw on Windows throwing an error trying to
      ;;        expand / to an absolute path. Remove this when it is fixed upstream
      ;;        in counsel.
      (when (and (memq system-type '(windows-nt ms-dos))
                 (listp counsel-rg-base-command)
                 (member "--path-separator" counsel-rg-base-command))
        (setf (cadr (member "--path-separator" counsel-rg-base-command))
              "//"))

我不懂lisp,本来准备直接setq修改counsel-rg-base-command,后来发现这个变量是一个list 查了下list怎么修改,通过下面的代码可以实现不修改counsel.el文件

(after! counsel
  (if (and (eq system-type 'windows-nt)
           (fboundp 'w32-shell-execute))
      (setcar (member "//" counsel-rg-base-command) "/")                   ;
    )
  )
2 个赞

你好,请问这个是加在哪个文件里?

应该加到这个文件里面就行

~/.doom.d/init.el

doom已经修复了,使用最新develop就行。虽然它一直引入新的bug。。。

1 个赞

不行啊,折腾了一晚上,配置counsel-rg-base-command,无论是/还是//都无法使用。还有flycheck怎么弄也用不了。。求助。。

真牛。。。。。

用带counsel的最小环境配置试了一下,结果在这里https://github.com/hlissner/doom-emacs/issues/3038#issuecomment-687503164

我这边发现的问题是ivy-prescient的锅。应该是ivy +prescient后,构造的搜索正则,交给rg去执行,出错。