基于 ripgrep 的代码搜索和重构工具

Windows 代码页 问题。

启用win10的全局utf-8选项,虽然这是一个实验性选项,但我使用了一段时间了,除了少部分旧软件内置菜单和显示编码非unicode所以无法正常显示外,使用体验非常好。

windows 下无法进行中文搜索问(其实 日文 韩文 乃至法语等其他拉丁脚本也一样)其实不是emacs编码设置问题,而是emacs对subprocess的命令编码无论你如何设置,在传输到cmdproxy shell 的时候都会转换到你的 locale code page,通常对于中文用户就是gbk编码,因此 rg ag等默认接受utf-8参数的工具接到的是乱码,当然搜索不到。具体bug可以看这个mailing-list Passing unicode filenames to start-process on Windows?

启用后 添加如下片段到你的 启动配置中:

(when (and (eq system-type 'windows-nt)
           (eq w32-ansi-code-page 65001))
  (setq w32-system-coding-system 'utf-8)
  (define-coding-system-alias 'cp65001 'utf-8))
7 个赞

小文件用swiper,大文件和目录用rg

color-rg 能不能对 rg工具 增加参数的搜索? 比如 我实际用rg搜索的时候,会使用 -T, --type-not参数来 忽略某种文件类型, color-rg 有 可以设置这种参数的功能吗? 或者说 emacs下怎么实现这种功能?

C-h f color-rg-build-command

你可以改一下这个函数

感谢 确实有这个功能,能不能 举个例子怎么使用color-rg-build-command这个函数,我不会lisp

你把括号去掉 他就是python了

如果你想用 --type-not

只需要在 (list “–heading”) 后面加一行

(list “–type-not” “asm” “–type-not” “awk”)

然后 C-x C-s 保存

再然后 M-x eval-buffer

再然后 你就能去github提issue了

但是你这样不是灵活的啊,我想有可以灵活设置的功能。

那样啊

你可以 M-x info C-s elisp 回车 回车

只需要找 list 和 defcustom 相关的 就行了

你可以先搜索再过滤文件,看keymap

这里可以有def-custom

可以是个list 也可以是个function

你需要的功能是有现成的。直接在 color-rg buffer里面使用大写C。绑定到的函数是 color-rg-customized-search。就可以手动输入命令啦。你想传什么给rg都可以。

我想知道如何进行全局替换?我搜索之后,r输入我的目标字符,回车,然后并没有进行替换,我应该怎么操作才能进行全局替换?

权限问题?你的文件权限是啥?

➜  ccJSON git:(master) ls -l
total 424
-rw-r--r--  1 originals  staff    2394 11  7 22:37 TAGS
-rwxrwxrwx  1 originals  staff  136456 11  5 23:16 a.out
-rw-r--r--  1 originals  staff     348 11  7 22:37 all.json
-rw-r--r--  1 originals  staff    5997 11  7 22:37 ccjson.cpp
-rw-r--r--  1 originals  staff    3026 11  7 22:37 ccjson.h
-rw-r--r--  1 originals  staff    1001 11  7 22:37 debugprint.h
-rw-r--r--  1 originals  staff      22 11  7 22:37 error1.json
-rw-r--r--  1 originals  staff      21 11  7 22:37 error2.json
-rw-r--r--  1 originals  staff       3 11  7 22:37 error3.json
-rw-r--r--  1 originals  staff      46 11  7 22:37 error4.json
-rw-r--r--  1 originals  staff      48 11  7 22:37 error5.json
-rw-r--r--  1 originals  staff    1800 11  7 22:37 main.cpp
-rw-r--r--  1 originals  staff      49 11  7 22:37 makefile
-rw-r--r--  1 originals  staff     487 11  7 22:37 readme.md
-rw-r--r--  1 originals  staff      65 11  7 22:37 test.json
-rw-r--r--  1 originals  staff     112 11  7 22:37 test2.json
-rw-r--r--  1 originals  staff      59 11  7 22:37 test3.json
-rw-r--r--  1 originals  staff      60 11  7 22:37 test4.json
-rw-r--r--  1 originals  staff      54 11  7 22:37 test5.json

按r后直接输入你最终要替换的字符

这个功能 我这边也不行。按照你说的操作,也不行。 %E5%9B%BE%E7%89%87

最好详细描述一下重现步骤

20191108_180939

链接:https://pan.baidu.com/s/1A8POw9LZo3uE9lAxFNE7qQ 提取码:tzsa

这是视频

请问楼主这个和内置的wgrep比有什么明显的优点?

我平时一般counsel-rg搜索到想要的内容,然后C-c C-o把结果pop到一个grep buffer里,C-x C-q切换到可写的wgrep模式,随便修改,完毕以后C-x C-q提交修改结束。

2 个赞