现在我都没有更改编码了,直接就是windows默认的编码
不是迫不得已,谁也不会去用win
感谢 @manateelazycat 和 @xhcoding 的中文搜索补丁,我更新测试了windows10搜索中文可行,系统本身是gbk时编码成gbk可以的,“\262\342\312\324”,这段不是乱码感觉没必要修正
给 color-rg-open-file
增加了一个可选的 stay
参数,以及增加了一个 color-rg-open-file-and-stay
函数,允许光标停留在刚刚打开的文件,就像 magit:
- SPC 打开 diff 窗口,光标回 log 窗口。
- RET 打开 diff 窗口,光标停留原地。
不知大家有没有同样的需求:
因为 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
多谢!
提个意见,希望可以将每个backend的一些hardcode的prefix长度改成可以设置的变量。比方说这里https://github.com/manateelazycat/snails/blob/master/snails-backend-rg.el#L94。6个字符太长了。
然后麻烦再请教个问题, 目前是没有办法在snails下,将搜索的结果打开成为一个buffer吗?比方说ivy里C-c C-o就是ivy-occur。将snails rg 的结果直接打开成color-rg的buffer,应该蛮有用的。
你要的是ivy,直接用ivy吧
color-rg 和 snails 有自己的设计目标,不会什么都兼顾的
我的是win7,编码设置也比较奇怪,实测了magit,ORG,eshell后得出的:
(prefer-coding-system ‘utf-8)
(set-default 'process-coding-system-alist
'(("[pP][lL][iI][nN][kK]" utf-8 . gbk-dos)
("[cC][mM][dD][pP][rR][oO][xX][yY]" utf-8 . gbk-dos)
("grep" utf-8 . gbk-dos)
("cmd" gbk-dos . gbk-dos)
("ag" utf-8-dos . gbk-dos)
("rg" utf-8-dos . gbk-dos)
("diff" utf-8-dos . gbk-dos)
("sdcv" utf-8 . gbk-dos)
("find" utf-8 . gbk-dos)))
在使用color-rg时编码也出现问题,要将下面这句注释掉才正常,应该是多加了一次编码。
(when (memq system-type '(cygwin windows-nt ms-dos))
(setq command-line (encode-coding-string command-line locale-coding-system)))