Monorepo下Telescope的file_ignore_patterns切换子项目时失效如何解决
问题原因
Telescope 的 file_ignore_patterns 采用 Lua 模式匹配语法,不支持通用 glob 通配符,你尝试写的 **/node_modules 规则不会生效。
另外你遇到的不同子目录规则生效不一致的问题,大概率是因为 Telescope 的文件查找默认调用外部工具(fd/rg),这类工具会优先读取当前工作目录下的 .gitignore/.ignore 规则,优先级高于 Telescope 自身配置的忽略规则。如果你从 Monorepo 根目录启动 Neovim 且没有自动切换工作目录,切换到子目录打开文件时,外部工具读取的还是根目录的忽略规则,根目录没有声明忽略 node_modules 就会出现规则失效的问题。
解决方案
方案1:强制应用 Telescope 自身忽略规则
修改配置让外部工具跳过自带的忽略逻辑,完全使用 Telescope 配置的规则即可,修改后的配置参考:
require('telescope').setup{ defaults = { file_ignore_patterns = {"dist", "node_modules[/\\\\]", ".git"}, shorten_path = true, color_devicons = true, vimgrep_arguments = { 'rg', '--color=never', '--no-heading', '--with-filename', '--line-number', '--column', '--smart-case', '--no-ignore' -- 禁用rg自带的忽略规则 }, pickers = { find_files = { find_command = {'fd', '--type', 'f', '--no-ignore'} -- 禁用fd自带的忽略规则 } } } }
注:规则里的[/\\\\]是为了兼容Windows和Unix系统的路径分隔符,精准匹配node_modules目录,避免匹配到文件名包含node_modules的正常文件。
方案2:补充根目录忽略规则
直接在 Monorepo 根目录新增 .gitignore 文件,写入全局需要忽略的目录即可:
node_modules dist .git
外部工具会自动向上查找根目录的忽略规则,不管在哪个子目录下都会生效。
方案3:自动切换工作目录
安装 project.nvim 这类自动切换工作目录的插件,打开文件时自动将工作目录切换到当前子项目(web/server)的根路径,外部工具会自动读取子目录下的忽略规则,也可以解决规则不一致的问题。
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

