🧩 Vim 集成 fzf/ag 基本配置和用法
1. 📚 fzf/ag 简介
fzf(Fuzzy Finder) 是一款交互式命令行模糊查找工具,适用于快速查找文件、命令、历史记录等。
ag(The Silver Searcher) 是一种类似 grep
的快速搜索工具,专为代码工程设计,搜索速度极快,并且支持正则表达式。
集成了 Ctags + fzf/Ag 的 Vim 可以快速浏览十万行以下的小型C语言项目或C++项目。
Ctags 相关的配置和用法详见
Vim 集成 Ctags 基本配置和用法
2. ⚙️ fzf/ag 安装流程
🐧 Linux 环境下安装
-
打开终端,输入命令安装 fzf 和 ag :
sudo apt install fzf silversearcher-ag
-
验证是否安装成功:
fzf --version ag --version
若输出版本信息,说明安装成功。
-
打开 vimrc 配置文件,在 vim-plug 插件管理器中添加 fzf/ag 的插件(如果是Windows系统请将
~/.vim/plugged
替换成~/vimfiles/plugged
):call plug#begin('~/.vim/plugged') Plug 'junegunn/fzf' Plug 'junegunn/fzf.vim' Plug 'rking/ag.vim' call plug#end
保存退出后重新打开 Vim ,执行
:PlugInstall
安装插件
🚃 Windows 环境下安装
-
打开 PowerShell 终端,输入并执行以下命令安装 Scoop 软件:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser iwr -useb get.scoop.sh | iex
-
继续在 PowerShell 终端输入并执行以下命令安装 fzf 和 ag :
scoop install fzf scoop install ag
scoop 默认会自动配置好环境变量,命令在终端里直接可用。
-
在 PowerShell 终端中输入并执行以下命令验证安装是否成功:
fzf --version ag --version
如果成功显示版本号说明已经安装成功
3. 🚗 基本使用方式
-
在项目根目录打开 Vim ,输入
:Files
指令,在弹出的窗口中输入文件名模糊匹配文件,通过Ctrl + j
和Ctrl + k
上下移动光标选择文件,按下Enter
打开文件进行浏览。 -
浏览的时候,输入
:Ag
指令,在弹出的窗口中输入想要在项目中全局查找的变量名或函数名,通过Ctrl + j
和Ctrl + k
上下移动光标选择条目,按下Enter
打开文件并跳转到变量名或函数名所在行
4. 🌟 Vim 集成配置与常用命令
🧾 vimrc 配置示例:
let $FZF_DEFAULT_COMMAND = 'ag -g ""'
let g:fzf_preview_window = ['right:50%', 'ctrl-/']
command! -nargs=? Ag call fzf#vim#ag(<q-args>, '', fzf#vim#with_preview(), <bang>0)
说明:
- let $FZF_DEFAULT_COMMAND = ‘ag -g “”’:默认使用 ag 提供搜索结果给 fzf 。
- let g:fzf_preview_window = [‘right:50%’, ‘ctrl-/’]:打开预览窗口,放在右边,大小为50%。
- command! -bang -nargs=? Ag call fzf#vim#ag(, ‘’, fzf#vim#with_preview(), 0):定义
:Ag
命令,执行:Ag
命令可以打开预览窗口。
🔰 fzf/ag 常用命令一览
命令 | 功能说明 |
---|---|
:Ag | 模糊匹配当前目录下的文件内容(相当于grep) |
:Files | 模糊查找当前目录下的文件 |
:Buffers | 查找当前已打开的缓冲区文件 |
:Lines | 所有已打开文件的内容行模糊搜索 |
:BLines | 当前文件行搜索 |
:GFiles | Git 跟踪文件搜索 |
:History | 历史命令查找 |
:Commands | Vim 命令模糊搜索 |
:Maps | 映射快捷键查找 |
5. ⚠️ 注意事项
💥 :Ag
命令无法弹出窗口
在完成 fzf/ag 的安装和 Vim 插件的配置后,打开 Vim 输入 :Ag
命令,可能会出现无法弹出窗口的情况,同时 Vim 会提示以下信息
Usage: ':Ag {pattern}' (or just :Ag to search for the word under the cursor). See ':help :Ag' for more information.
这种情况可能是由于fzf插件加载的较慢导致这条命令:
command! -nargs=1 Ag call fzf#vim#ag(<q-args>, '', fzf#vim#with_preview(), <bang>0)
在fzf插件完成加载前就被执行了(没有生效)。
在 vimrc 文件中将这条命令改成以下形式(加1秒的延时),让 Vim 在 fzf 插件完成加载后再执行这条命令,就能解决这个问题了
function! DefineAgCommand(timer)
command! -bang -nargs=? Ag call fzf#vim#ag(<q-args>, '', fzf#vim#with_preview(), <bang>0)
endfunction
if has('timers')
call timer_start(1000, 'DefineAgCommand')
endif
📥 Scoop 安装问题
使用普通用户权限打开 PowerShell 安装 Scoop 即可,Windows 系统下用管理员权限的 PowerShell 安装 Scoop 可能会导致安装失败。
📚 参考资料:
fzf GitHub 项目地址
fzf.vim GitHub 项目地址
ag GitHub 项目地址
ag.vim GitHub 项目地址