Neovim中Telescope如何查找路径含两个独立子串的文件
Neovim Telescope 多子串文件搜索实现方案
默认配置下Telescope不会将空格识别为多子串AND匹配分隔符,要搜索路径同时包含多个独立子串的文件,可根据自身配置选择对应方法:
临时使用(无需修改配置)
- 用Telescope内置默认匹配器:输入第一个搜索子串后,按
Ctrl+Space再输入第二个子串,即可触发多子串AND匹配,仅展示同时包含所有输入子串的文件路径。如果该快捷键和系统输入法切换冲突,可自行在Telescope按键映射中调整触发键。 - 自定义
find_files底层用fd/ripgrep(rg)做搜索:在两个子串之间加入.*(正则通配符,匹配任意长度任意字符)即可。例如要搜索同时包含config和lua的文件,输入config.*lua即可匹配路径中两个子串按顺序出现的文件;如果要匹配两个子串不分先后的情况,输入.*config.*lua|.*lua.*config即可。
永久配置(直接支持空格分隔多子串搜索)
方案1:开启内置匹配器多匹配模式
在Telescope初始化配置中,给文件查找picker开启multi_match选项,配置片段参考:
require('telescope').setup{ pickers = { find_files = { -- 原有配置项保持不变即可 matcher = { multi_match = true, }, } } }
配置完成重启Neovim后,find_files弹窗内直接用空格分隔多个搜索子串,默认执行AND匹配,仅返回同时包含所有子串的文件。
方案2:使用fzf原生匹配拓展
如果安装了telescope-fzf-native拓展,只需在Telescope配置中加载该拓展,默认就支持空格分隔多子串AND匹配,匹配速度比内置匹配器更快,无需额外调整参数。
加载拓展的配置片段放在telescope.setup()调用之后即可:
require('telescope').load_extension('fzf')
注意:如果自定义find_files调用fd/rg时传入了禁用正则匹配的参数,上述正则通配符和多匹配规则可能不生效,请先检查自定义参数配置。
内容的提问来源于stack exchange,提问作者Cactus
相关产品推荐
相关产品推荐

