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

用counsel-rg在win10下搜索中文,搞不定了,求助各位大神: 1、emacs 26.3,counsel-rg搜索英文OK,搜索中文显示nothing match; 2、在cmd下用rg搜索中文,也搜不到东西;但增加-E gbk后可以正常搜索中文;搜索结果也正常; 3、用cygwin下的mintty搜索中英文都OK;

感觉应该是windows命令行的编码问题;所以修改了counsel-rg-base-command的命令,增加-E gbk选项;这下可搜到东西了,行号和位置都对,但是所有中文是乱码;

我的感觉是counsel-rg已经可以搜索中文了,但是输出的编码有问题;可是这个在命令行下输出的结果正常,看起来就是gbk,为啥在counsel中显示就不对了呢? 另外我用counsel-rg搜索英文,同一行中的中文显示也正常;感觉counsel本身对中文的处理是没问题的,只是对中文进行了encoding后,输出才变化了;

不知道该如何调整参数了,各位大神帮帮忙啊?

多谢;

也许有用

1 个赞

我以前为了搜索中文,设编码(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 个赞