如何让Neovim的Telescope模糊查找器遍历嵌套Git仓库文件?
解决Telescope无法搜索子Git仓库文件的问题
Telescope的find_files默认会跳过包含.git目录的子文件夹(也就是独立的Git仓库),因为它默认遵循Git的忽略逻辑。下面给你几个实用的解决办法:
方法1:临时关闭忽略规则(简单粗暴)
直接修改你的映射,调用find_files时加上no_ignore = true参数,这样会遍历所有文件,包括子仓库里的内容,但同时也会搜出.gitignore里标记的文件:
vim.keymap.set('n', '<leader>ff', function() builtin.find_files({ no_ignore = true }) end, {})
方法2:精准包含指定子仓库
如果不想搜所有被忽略的文件,只想包含特定的子仓库目录,可以用additional_args添加--glob规则,既排除.git内部文件,又包含目标子仓库:
比如你的子仓库在drivers/third-party-chip目录下,配置如下:
vim.keymap.set('n', '<leader>ff', function() builtin.find_files({ additional_args = function() return { '--glob', '!**/.git/*', '--glob', '**/drivers/third-party-chip/**' } end }) end, {})
方法3:全局配置默认遍历子仓库
如果希望find_files默认就能搜索所有子仓库,同时跳过每个仓库里的.git目录(避免搜内部垃圾文件),可以修改Telescope的全局配置:
如果你用fd作为查找工具(推荐,速度更快)
require('telescope').setup{ pickers = { find_files = { find_command = { 'fd', '--type', 'f', '--strip-cwd-prefix', '--glob', '!**/.git/*' } } } }
如果你用系统默认的find命令
require('telescope').setup{ pickers = { find_files = { find_command = { 'find', '.', '-type', 'f', '-not', '-path', '*/.git/*' } } } }
配置完后,原来的<leader>ff映射不用改,就能直接搜到所有子仓库里的文件了。
内容的提问来源于stack exchange,提问作者Patrick Gordon
相关产品推荐
相关产品推荐

