如何在PowerShell中配置fzf模糊查找器使用ripgrep加速?
让fzf在PowerShell中用ripgrep提速的配置方案
要让PowerShell里按Ctrl+T调用的fzf用上ripgrep提升搜索速度,需要调整PSFzf的专属配置,只设置FZF_DEFAULT_COMMAND无法生效,具体操作如下:
修改PowerShell配置文件
更新你的PowerShell_profile.ps1,替换原有PSfzf相关配置为以下内容:
# PSReadLine Set-PSReadLineOption -PredictionSource History Set-PSReadLineOption -PredictionViewStyle ListView Set-PSReadLineOption -EditMode Windows Set-PSReadLineKeyHandler -Key Tab -Function Complete # PSfzf Import-Module PSFzf # 定义ripgrep作为fzf的默认文件搜索命令,忽略指定目录 $env:FZF_DEFAULT_COMMAND = 'rg --files --hidden --follow --glob "!.git/*" --glob "!.vscode/*"' # 强制PSFzf的Ctrl+T调用使用ripgrep命令 Set-PsFzfOption -PSReadlineChordProvider 'Ctrl+t' ` -PSReadlineChordReverseHistory 'Ctrl+r' ` -ProviderCommand $env:FZF_DEFAULT_COMMAND # 覆盖默认tab补全 Set-PSReadLineKeyHandler -Key Tab -ScriptBlock { Invoke-FzfTabCompletion }
关键说明
- PSFzf默认不会自动读取
FZF_DEFAULT_COMMAND环境变量作为文件搜索的执行命令,必须通过-ProviderCommand参数把ripgrep命令明确指定给PSFzf的文件搜索Provider。 - 可以通过添加更多
--glob "!xxx/*"规则来忽略不需要扫描的目录(如node_modules、dist等),进一步减少扫描时间。 - 如果想避免重复扫描提升速度,可以添加缓存机制(注意缓存需要定期更新,否则会找不到新文件):
# 可选:添加文件缓存,仅首次扫描生成缓存 $cachePath = "$env:TEMP\fzf_file_cache.txt" $env:FZF_DEFAULT_COMMAND = @" if (Test-Path $cachePath) { Get-Content $cachePath } else { rg --files --hidden --follow --glob "!.git/*" | Tee-Object -FilePath $cachePath } "@
验证效果
保存配置文件后重启Windows Terminal,按下Ctrl+T,此时fzf会调用ripgrep执行文件搜索,速度会明显优于默认的文件扫描方式。
内容的提问来源于stack exchange,提问作者Lernkurve
相关产品推荐
相关产品推荐

