我刚接触 vim,了解到其中最好的模糊搜索工具之一是 fzf,已开始使用。但每当我输入 :Ag 命令时,出现 ag is not found
的提示,我不知道它是什么意思,也不知道该如何解决。
如果你使用的是 Mac,需要安装ag:
brew install the_silver_searcher
作为测试 fzf 的另一种选择,你也可以使用 ctrl p 调用以下映射::Files
。
nnoremap <c-p> :Files<CR>
当您调用:Files
时,您可以使用ripgrep,为此您需要修改默认的FZF_DEFAULT_COMMAND
:
export FZF_DEFAULT_COMMAND='rg --files --no-ignore --hidden --follow --glob "!.git/*"'
默认情况下,fzf使用系统的"find"命令。你可以通过更改环境变量$FZF_DEFAULT_COMMAND为第三方实用程序来改变它。使用这些工具的优点是它们遵循忽略文件。如果使用silver searcher(即ag),则默认命令看起来类似于以下内容:
$echo $FZF_DEFAULT_COMMAND
ag -l --path-to-ignore ~/.ignore --nocolor --hidden -g ""
无论使用什么FZF命令,在shell中都会收集与标准匹配的文件名称。
FZF+Vim是fzf的一个额外插件,提供了一个:Ag命令可在(g)vim中使用。:Ag命令允许你搜索文件的内容,而不是仅仅搜索文件名。
使用FZF+Vim时,您可能需要一些.vimrc自定义设置。例如,我喜欢的微调选项是使用全屏搜索和预览窗口运行:Ag命令(使用:Ag!代替:Ag):
command! -bang -nargs=* Ag
\ call fzf#vim#ag(<q-args>,
\ <bang>0 ? fzf#vim#with_preview('up:60%')
\ : fzf#vim#with_preview('right:50%:hidden', '?'),
\ <bang>0)
command! -bang -nargs=* Ag
\ call fzf#vim#grep(
\ 'ag --column --numbers --noheading --color --smart-case '.shellescape(<q-args>), 1,
\ fzf#vim#with_preview(), <bang>0)
然后使用:Ag mySearchTerm
命令,在右侧预览结果。
你也可以将ctrl-g
映射为该命令,以方便使用:
map <C-g> :Ag