Win10 开Unicode support秒解一切Emacs相关中文编码问题(代价是某些游戏可能会出现编码不兼容)
以前在ivy的issue区里长篇大论过这个问题,然而似乎没什么人有兴趣
Win10 开Unicode support秒解一切Emacs相关中文编码问题(代价是某些游戏可能会出现编码不兼容)
以前在ivy的issue区里长篇大论过这个问题,然而似乎没什么人有兴趣
各位道友,我为什么我win10使用color-rg,总是报错:wrong type argument:stringp,nil这个错误呢?谁能告诉我问题在哪里啊。我系统都重新安装了,之前确定是可以使用的,并且我使用counsel-rg都是可以正常搜索中英文的。
你的问题是 ripgrep 运行的时候编码错误,导致进程输出的字符串无法被Emacs正常分割,你需要研究一下为啥你的编码有问题。
我从来不用Windows,没法复现你说的问题。
现在我都没有更改编码了,直接就是windows默认的编码
不是迫不得已,谁也不会去用win
感谢 @manateelazycat 和 @xhcoding 的中文搜索补丁,我更新测试了windows10搜索中文可行,系统本身是gbk时编码成gbk可以的,“\262\342\312\324”,这段不是乱码感觉没必要修正
给 color-rg-open-file
增加了一个可选的 stay
参数,以及增加了一个 color-rg-open-file-and-stay
函数,允许光标停留在刚刚打开的文件,就像 magit:
不知大家有没有同样的需求:
因为 color-rg-open-file 是一个内部函数,不光是RET按键,包括 color-rg-jump-next-keyword 和 color-rg-jump-prev-keyword 都会调用 color-rg-open-file
如果 color-rg-open-file-and-stay 只是临时在 color-rg buffer 里面调用一下,我觉得补丁可以直接合并到 color-rg.
如果默认就要停留在打开的文件,会导致跨文件查阅关键字的效率降低,这种行为要认真思考一下。
建议直接想好后直接提交PR,大家可以一起维护。
已提 PR。
magit 的情况跟你说的几乎一样。差别在于按键绑定,也正是考虑到按键对使用体验影响很大,所以我在 PR 里没有修改默认行为和按键绑定。
不过我还蛮赞同 magit 的按键定义。RET 表示更大的决心要进到 diff 窗口作长时间停留,SPC则是蜻蜓点水一样打开 diff 窗口立即返回 log 窗口继续操作。
谢谢,已经合并。 你说的挺有道理的,我已经把Return改成 color-rg-open-file-and-stay ,SPC改成 color-rg-open-file.
在我的win10,emacs26.3上做了尝试,发现这个方案不是特别完美; 第一是命令行中有乱码,这个就忍了 第二是搜索对于gbk编码的文件出结果时,对于utf8的文件就搜不出来了;在windows上用emacs的人,估计大部分都是两种编码文件都有的吧;我是在org中都是gbk,代码文件都是utf8,所以这种方式不适用于我;
想了一个办法,就是检查发起搜索的文件的编码属性,然后对rg的命令行增加编码选项,来适配不同编码格式的文件。这个方法有一个假设是搜索目录中的所有文件,都是统一的编码,否则也会出现乱码;好在我的文件在一个目录下基本上不出现混用的情况;
增加了一个函数: +(defun color-rg-buffer-add-encoding-param () (let ((sys (coding-system-plist buffer-file-coding-system))) (if (memq (plist-get sys :name) '(chinese-gbk)) “–encoding gbk” ;; (downcase (symbol-name (plist-get sys :name))) “” )))
然后在color-rg-build-command中,增加对这个函数的调用:
(let ((command-line (append
(list (color-rg-buffer-add-encoding-param))
目前在我这里还算正常,欢迎大家一起试一试看看。
问题找到了,就是我的win10环境变量路径如果有空格的话,就会导致,emacs里面找不到对应的程序。还是感谢楼主的帮助。
我那个补丁只是保证 rg 这条命令能够正常的编码执行,并没有处理 rg 内部搜索用的编码。
还是统一编码吧,gbk感觉早晚要出问题,我测试了目录里面同时有gbk和utf-8两种编码搜索中文的情况,只能搜索出utf8的文件,然后用notepad+,vsc来搜索,也是一样的情况,不能两种编码混合搜索中文,其它编辑器也都这样,感觉就没必要去解决它
evil 的话,可以采用陈斌在一年里提的 git-timemachine 案例
;; https://emacs.stackexchange.com/a/10588/22102
(eval-after-load 'color-rg
'(progn
(evil-make-overriding-map color-rg-mode-map 'normal)
;; force update evil keymaps after git-timemachine-mode loaded
(add-hook 'color-rg-mode-hook #'evil-normalize-keymaps)))
这样冲突的快捷键就以 color-rg 为主
在 替换的模式下,如果来点 这些替换快捷键提示 ,就更好了。
最新版顶部就有啊
不是这个提示,比如 按 r 进入替换后,再按 RET 开始替换, 现在就在提示: “ 按 y 或者 n 来表示是否替换当前行,按!替换所有。”
纯属小白个人建议
有计划支持preview feature吗?counsel-rg可以边输入边查看搜索结果,然后如果需要再打开buffer,这个功能挺实用的
snails