Yggdroot / LeaderF

An efficient fuzzy finder that helps to locate files, buffers, mrus, gtags, etc. on the fly for both vim and neovim.
Apache License 2.0
2.14k stars 180 forks source link

Leaderf Rg 过滤问题 #1076

Closed keeferwu closed 2 months ago

keeferwu commented 2 months ago
配置 g:Lf_RgConfig = [ "--glob=!target/*" ]

使用  Leader rg -e abc -g '*.c'                             -----> 任然可以搜索到 target 目录下的文件
rg  --glob=!target/*  --no-config --no-ignore-messages --no-heading --with-filename --color never --line-number -S --context-separator=... -g "*.c" -e "abc" 

使用 Leader rg -e abc                                          ----> 可以过滤掉target 目录
rg  --glob=!target/*  --no-config --no-ignore-messages --no-heading --with-filename --color never --line-number -S --context-separator=...  -e "abc" 

使用 Leader rg -e abc -g '*.c' -g "!target/*"         ----->可以过滤掉target 目录
rg  --glob=!target/*  --no-config --no-ignore-messages --no-heading --with-filename --color never --line-number -S --context-separator=... -g "*.c"  -g "!target/*" -e "abc" 

可见 如果 rg 中使用了参数 -g '*.c' 会导致 g:Lf_RgConfig 中的 --glob=!target/* 失效
可否在执行rg时让 g:Lf_RgConfig 中的参数放于 -g '*.c'  之后?
Yggdroot commented 2 months ago

g:Lf_RgConfig里面的相当于默认配置,我觉得手输参数的优先级要高于默认配置。 换一个思路,假如g:Lf_RgConfig里面有-g *.c, 而我用Leader rg -e abc -g "!target/*"时,会发现我添加的-g "!target/*"没有任何效果,怎么办呢?

keeferwu commented 2 months ago

g:Lf_RgConfig里面的相当于默认配置,我觉得手输参数的优先级要高于默认配置。 换一个思路,假如g:Lf_RgConfig里面有-g .c, 而我用Leader rg -e abc -g "!target/"时,会发现我添加的-g "!target/*"没有任何效果,怎么办呢? ----->

Leader rg -e abc -g '*.c' -g "!target/*" ----->-g "!target/ 有作用 Leader rg -e abc -g "!target/*" -g '*.c' ----->-g "!target/ 无作用

可以定义一个 单独的变量和 g:Lf_RgConfig 独立开,让用户来用于 exclude 文件或目录

Yggdroot commented 2 months ago

对呀,谁在后面谁起作用。

keeferwu commented 2 months ago

leaderf#Rg#Interactive() ----> g:Lf_RgConfig 中的类似-g "!target/*的过滤条件对这个函数搜索无效

主要是因为项目中有些目录有权限问题,想通过配置 g:Lf_RgConfig skip 掉,如果使用 Leader rg -g '*.c' 指定文件后缀名,搜索就会报错, 除非将想skip的文件目录在命令中再写一遍, 多个目录就得写多个,有点麻烦。rg 中好像并没有过滤权限的选项,有没有好的办法来过滤掉有权限问题的目录和文件?

Yggdroot commented 2 months ago

leaderf#Rg#Interactive() ----> g:Lf_RgConfig 中的类似-g "!target/*的过滤条件对这个函数搜索无效

默认只支持vim支持的glob。如果想实现类似的需求,可以自己封装一下。

Yggdroot commented 2 months ago

主要是因为项目中有些目录有权限问题,想通过配置 g:Lf_RgConfig skip 掉,如果使用 Leader rg -g '*.c' 指定文件后缀名,搜索就会报错, 除非将想skip的文件目录在命令中再写一遍, 多个目录就得写多个,有点麻烦。rg 中好像并没有过滤权限的选项,有没有好的办法来过滤掉有权限问题的目录和文件?

如果仅仅是你这个需求的话,因为没有权限rg就没法进去搜,可以加上--no-messages, 就不会报错了。

keeferwu commented 2 months ago

自己修了一下 image