counsel-rg在win10中搜索中文的问题

我以前为了搜索中文,设编码(prefer-coding-system 'gbk) 这样在我这win10用可以counsel-rg搜中文,但其它地方又乱码,最后决定全部统一utf-8,(prefer-coding-system 'utf-8),然后counsel-rg就不能搜中文了

我解决了flycheck在window不能检查中文文件名的问题 flycheck语法检查在win7不支持中文文件名的问题,解决了 ,想用同样方法用到counsel-rg上,但好像行不通

最近在用懒猫的 GitHub - manateelazycat/color-rg: Search and refactoring tool based on ripgrep. ,感觉不错

@haoisli9 这个问题要解决,自已动手吧

刚刚给 color-rg 提了个 中文搜索的补丁,解决方法就是将 rg 那条命令编码成 gbk

(setq command-line "rg  --column --color=always -H --heading --max-columns 300 --smart-case -e \"有\" \"d:/Home/\"")
(setq comman-line (encode-coding-string command-line 'gbk))

@haoisli9 你可以试试

1 个赞

这个方法可能不行,修改command-line的编码,会导致要查询的中文同样在默认的编码中出现错误。 rg是可以携带编码参数扩展的,-E gbk可以正确搜索gbk编码的文件,但是对于utf-8的文件就会搜索出错了; rg的帮助中-E 可以携带auto选型来自动识别编码,可是我试了不好使;所以对于目录下统一编码格式的文件,可以携带不同编码,如果编码格式不一样,还没有想到好办法了。

这个方法可行,我测试了

windows下counsel-rg搜索中文乱码报错error2现在有解决方案吗?非win10平台

很奇怪的问题,某些简体繁体结果正常,有些就是乱码,然后就直接error2

可以试试下面的设置有没有效果

(setq-default default-process-coding-system `(utf-8-dos . ,locale-coding-system))

(add-to-list 'process-coding-system-alist '("rg" utf-8 . gbk)

我在win下用这个搜索中文没问题。

4 个赞

@xhcoding,@wsw

刚测试了,调用counsel-rg还是一样报错,准备试试看color-rg

color-rg可以正确搜索中文,不过还是习惯了counsel-rg的minibuffer实时显示,选择之后再跳转到想要的buffer

counsel-rg-basic-command:

"rg" "-M" "240" "--with-filename" "--no-heading" "--line-number" "--color" "never" "%s" "--path-separator" "/" "."

更新一下:

@wsw,已经正常了,原因是我之前的rg.exe有问题,重新下载了官方最新版本,加上你的配置,正常搜索中文,没有再乱码,感谢😊

1 个赞

再请教各位一下,windows下面我在dired里面新建文件和目录还是windows默认编码,有没有办法用elisp把dired里面新建的文件和目录默认utf8编码

修改windows需要改注册表,不方便

设置这一行试试

(prefer-coding-system 'utf-8)

可以是可以,但是我的bongo里面的中文媒体就不能播放了

还是有冲突,确切的说是mpv不能再识别现在的中文媒体文件了,难道还要改mpv的编码配置吗

;;默认设置cos的car是输出到buffer的编码,cdr是传给命令行程序的编码,其他函数的编码有可能要单独设置,
(set-default 'process-coding-system-alist
             '(
               ("[pP][lL][iI][nN][kK]" utf-8-dos . gbk-dos)
               ("[cC][mM][dD][pP][rR][oO][xX][yY]" utf-8-dos . gbk-dos)
               ))

(defun counsel-locate-coding (orig-fun &rest args)
  (let ((process-coding-system-alist '(
               ("[pP][lL][iI][nN][kK]" undecided-dos . gbk-dos)
               ("[cC][mM][dD][pP][rR][oO][xX][yY]" undecided-dos . gbk-dos)
               )))
    (apply orig-fun args)))

(advice-add 'counsel-locate :around #'counsel-locate-coding)

4 个赞

感谢,zsbd

请问我按照配置了这条语句之后,counsel-rg 确实没有问题,能够正确搜索中文了,但是使用 rg.el 搜索中文还是不行,请问有没有什么建议呀?因为 rg.el 改 options 之类的方便一些

最近在windows上用emacs,也遇到了这个问题。没有特别好的办法。后来看看代码,加了一个advice解决 :joy:

(defadvice rg-run (around rg-run (pattern files dir &optional literal confirm flags))
  (let ((coding-system-for-read 'utf-8))
    ad-do-it))
(ad-activate 'rg-run)

1 个赞

感谢,这个设置解决了我在 Windows 下使用 consult-ripgrep 时无法搜索中文的问题。

2 个赞
;; win32平台解决rg.el无法正常搜索中文,在调用rg.exe前使用本地编码修改pattern 
(advice-add 'rg-run :around  
            (lambda (orig-fun &rest args)  
              (let ((pattern (car args)))  
                (apply orig-fun  
                       (encode-coding-string pattern locale-coding-system)  
                       (cdr args)))))
1 个赞