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

Automatically expand the block of matching keywords in org files and … · manateelazycat/color-rg@30e9cba · GitHub 今天写了个补丁, 更好的支持 org 文件内容搜索, 主要增强了:

1.搜索 org 文件的时候, 自动展开org文件中匹配关键字的区域, 以前需要手动按Tab展开

2.当关键字在 org link 语法块内会自动进行位置修正, 比如 [[file link]] 会向前移动两个字符的位置, 比如关键字在 http link 的连接字符串中 [[ link content ] [ link title]] , 而不是在标题区域, 会自动跳转到连接字符串的开头位置

上面的两个增强会让 color-rg.el 对 org 文件内容的搜索更加方便.

还遗留的问题是, 在 org 文件中, 如果有中英文混合的情况下, move-to-column 的位置不正确, 还在想办法解决, 如果有哪位高手有方案, 欢迎分享解决方案. :wink:

1 个赞

应该现做两个实验

@node VHDL程序组件

搜索 “VH” 的时候应该是 行:7

搜索 “组件” 的时候应该是 行:17

因为我用的是utf-8的编码,得到这个结果的原因是因为一个中文可能是三个char编码而成的

还有就是index是从1开始,而不是从0开始

move-to-column 他把中文当成2个char

解决这个问题可以从两方面着手

1.修改rg的代码,让他对utf-8编码的计数不是按三个char,而是按2个char

2.分析buffer中的当前行,分别将中文字符按3个、2个char计数,得到与rg对应的那个column

今天写了个补丁 Jump to correct column positions in multi-byte strings, such as, mixe… · manateelazycat/color-rg@95fcfca · GitHub

终于解决了中英混排时正确定位到 ripgrep 输出的关键字列位置.

1 个赞

不用那么麻烦,直接用string-bytes函数就可以了

今天写了一个小补丁: 跳转匹配的时候, 显示匹配行所在的函数名

使用场景: 经常需要在大型项目中查看某个变量的引用情况, 如果这个变量在多个文件中都有, 而且所处行的函数非常长, 这个小特性就非常有用, 在分析变量引用的同时不用滚动窗口就知道所处的函数区域, 加快源码分析的速度.

2 个赞

能和

结合一下吗?

让他可以使用color-rg的搜索结果作为数据源

我只用我自己的lazy-search , 不开发我不用的功能,没时间,抱歉,但是我欢迎任何人的补丁。

1 个赞

好吧

理解

可能是我想多了

好像发现了一个bug

c语言的代码一般都有tab 在我的电脑上tab是8个空格

在有tab的行跳转到的column会出偏差

给可重现样本发到 issue 里面去吧,谢谢

把move-to-column 改成 goto-char就可以了

先给我一个重现文件吧,这个要多测试一下

搜索 debug-enable

我测试了你的文件,move-to-column 没有问题。 我觉得你最好用 github 的 issue, 把你的配置,你遇到的问题,重现环境,甚至你觉得正确的PR一次提交,这样在论坛每次只说一句话效率很低,也耽误看帖子人的事件。

如果只是我一个人有这个问题

那很有可能是误报了 可能是因为我的配置太乱了

抱歉

多测试一下吧,如果是bug,欢迎提交issue。

还有就是,你用的是你自己改造的版本还是我的版本?至从你上次提交PR以后我又写了很多补丁。

确实是我的问题

我用的还是我的版本

在你的版本中 color-rg-jump-to-column 应该是连中文的问题都解决了

不过 现在还是不能同时搜索两个关键字吗?

那个功能不难实现的吧!

是的,最新版支持中文跳转和Org-Link连接的跳转,现在已经比较智能的跳转到对应的位置,其他 ripgrep 工具都不支持中文列跳转。

不难, 只是不知道同时搜索两个关键字的初衷是啥?

1 个赞

三个函数 函数pub 调用了pri1和pri2

我想知道pub函数被用在了哪里 及另外两个函数的实现

在搜索pub的color-rg里 我删除了一些不想要的文件 这个时候我又想搜索classa的用法 但怎么保留我的修改

其实我最想要的是保存当前搜索的结果

当然 是得编辑之后的

但鉴于你对数据库的态度 我觉得还是得自己来