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

是的,聚焦单文件以后,ripgrep 的速度秒杀 swiper/moccur这种。

1 个赞

swiper属于增长型搜索吧

其实你用多了,发现增长性搜索只是看着很酷,更像探索性的操作。

但是平常编程一般都是自己的代码,搜索和重构之前想输入啥都清清楚楚,目标很明确,而且往往就是光标处的符号。

这时候color-rg这种又能搜文件和目录,同时还内置批量重构功能的插件更为实用。

rg --column --color=always -H --heading --smart-case -e “可以给单词着色。”

c:/Users/yzl/AppData/Roaming/.emacs.d/README.md warning: extra args ignored after ‘rg --column --color=always -H --heading --smart-case -e "可以给单词着色。’

color-rg finished with no matches found at Thu May 16 09:35:31

color-rg的中文搜索怎么不给力? 需要单独额外的配置?明明光标下就有该词组(windows系统)

中文是可以搜索的,检查一下你Emacs的编码设置,可能和你终端的编码设置不一样。

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后直接输入你最终要替换的字符