VIM FZF 安裝和使用

news/2025/2/23 13:59:27

在 Vim 中安装和使用 fzf 进行文件、函数、变量、宏定义的模糊匹配

以下是详细步骤:


vim__6">1. 安装 fzf 和 fzf.vim 插件

1.1 安装 fzf 工具

fzf 是一个命令行模糊查找工具,必须先安装它。根据你的操作系统选择安装方式:

  • macOS:

    brew install fzf
    $(brew --prefix)/opt/fzf/install
    
  • Linux (Debian/Ubuntu):

    sudo apt update
    sudo apt install fzf
    
  • Windows:
    使用 Scoop 或 Chocolatey:

    scoop install fzf
    choco install fzf
    
  • 从源码安装(适用于所有平台)

    git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
    ~/.fzf/install
    
vim__36">1.2 安装 fzf.vim 插件

fzf.vim 是 fzf 的 Vim 集成插件,提供文件、函数、变量等模糊匹配功能。

使用 vim-plug 安装:
.vimrc 中添加:

vim">call plug#begin('~/.vim/plugged')
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
call plug#end()

然后在 Vim 中运行:

vim">:PlugInstall

使用 Vundle 安装:
.vimrc 中添加:

vim">call vundle#begin()
Plugin 'junegunn/fzf'
Plugin 'junegunn/fzf.vim'
call vundle#end()

然后在 Vim 中运行:

vim">:PluginInstall

2. 使用 fzf 在 Vim 中模糊匹配

2.1 文件模糊匹配
  • 使用 :Files 命令打开当前目录的文件列表并进行模糊搜索。
  • 输入部分文件名,fzf 会实时显示匹配结果。
  • 按回车打开选中的文件。

快捷键绑定:
.vimrc 中添加快捷键:

vim">nmap  :Files

按下 `` 即可快速启动文件搜索。


2.2 函数、变量、宏定义的模糊匹配

fzf 支持通过 ctags 文件进行代码符号(如函数、变量、宏定义)的模糊搜索。

步骤:
  1. 安装 ctags 工具(生成代码符号索引):

    • macOS:
      brew install ctags
      
    • Linux (Debian/Ubuntu):
      sudo apt install exuberant-ctags
      
    • Windows:
      使用 Scoop 或 Chocolatey 安装 Universal Ctags。
  2. 生成 tags 文件:
    在项目根目录运行以下命令,生成包含函数、变量等符号的 tags 文件:

    ctags -R .
    
  3. 使用 :Tags 命令查找符号:

    • 在 Vim 中运行:
      vim">:Tags
      
    • 输入部分函数或变量名称进行模糊搜索,按回车跳转到定义位置。
  4. 快捷键绑定:
    .vimrc 中添加:

    vim">nmap  :Tags
    

    按下 `` 可快速启动符号搜索。


2.3 全局内容搜索(基于 ripgrep 或 ag)

如果需要查找代码中所有包含某个关键词的地方,可以结合 ripgrepag 工具使用 :Rg 命令。

安装 ripgrep 或 ag:
  • ripgrep (推荐):
    sudo apt install ripgrep    # Linux (Debian/Ubuntu)
    brew install ripgrep        # macOS
    
  • ag (The Silver Searcher):
    sudo apt install silversearcher-ag    # Linux (Debian/Ubuntu)
    brew install the_silver_searcher      # macOS
    
使用 :Rg 命令全局搜索:

在项目中运行以下命令:

vim">:Rg 

例如:

vim">:Rg my_function_name

这会列出所有包含 my_function_name 的代码位置,选择结果后按回车跳转。

快捷键绑定:
.vimrc 中添加:

vim">nmap  :Rg

按下 `` 可快速启动全局内容搜索。


3. 配置和优化

3.1 自定义 FZF 默认命令(提高效率)

默认情况下,fzf 使用 find 查找文件。如果需要更快的查找工具,可以改为 fdag

.bashrc.zshrc 中添加:

export FZF_DEFAULT_COMMAND="fd --type f --hidden --exclude .git"

或者:

export FZF_DEFAULT_COMMAND="ag --hidden --ignore .git -g ''"
3.2 启用文件预览功能

.vimrc 中配置预览窗口:

vim">let g:fzf_preview_window = ['right:50%', 'ctrl-/']

这样,在搜索时可以预览选中文件的内容。


4. 总结常用命令

命令功能描述
:Files模糊查找当前目录中的文件
:Buffers模糊查找当前打开的缓冲区
:Tags模糊查找代码中的函数、变量或宏定义(需 ctags)
:Rg全局内容搜索(需 ripgrep 或 ag 支持)
``快速启动文件查找(需绑定快捷键)
``快速启动符号查找(需绑定快捷键)

通过以上配置,你可以高效地使用 fzf 在 Vim 中进行文件、函数、变量和宏定义的模糊匹配。

Citations:
[1] https://blog.csdn.net/qq_46039512/article/details/137696023
[2] https://blog.csdn.net/weixin_45696455/article/details/137143350
[3] https://juejin.cn/post/6905741816205672456
[4] https://blog.csdn.net/yuhan61659/article/details/82712760
[5] https://blog.csdn.net/KALIOUWEN/article/details/139264314
[6] https://www.zhihu.com/question/26248191/answer/2680677733
[7] https://keelii.com/2018/08/13/fuzzy-finder-full-guide
[8] https://github.com/solomonxie/solomonxie.github.io/issues/25


http://www.niftyadmin.cn/n/5863455.html

相关文章

2502C++,C++继承的多态性

构 A{单 向量<串>记;元<类 T>静 空 ff(串&a){清理(记);名向量(a,记);串 b{"---ff---"};打印(b);T::g();} };构 B:公 A{元<类 T>静 空 f(){串 a{"错误.txt"};ff<T>(a);} };构 C:公 A{元<类 T>静 空 f(){串 a{"a12.c…

极简入门,本地部署dify低代码平台构建AI Agent大模型全流程(使用教程、微案例、配置详解、架构图解析)

文章目录 一、环境搭建1.1 安装VMware-workstationCentOS7.91.2 安装宝塔1.3 安装docker及改镜像、安装dify1.4 配置模型供应商 二、dify快速上手体验2.1 知识库2.2 微案例&#xff1a;基于知识库的助手 三、dify知识库配置详解3.1 分片策略3.2 父子分段3.3 索引方法3.4 检索结…

std::lock_guard、std::unique_lock、std::shared_lock

在C中&#xff0c;std::lock_guard、std::unique_lock和std::shared_lock是用于管理互斥量的RAII类&#xff0c;确保锁的正确获取和释放&#xff08;避免忘记释放锁导致的死锁问题&#xff09;。以下是它们的详细介绍、区别及使用场景&#xff1a; 1. std::lock_guard 功能&am…

LeetCode 2506.统计相似字符串对的数目:哈希表+位运算

【LetMeFly】2506.统计相似字符串对的数目&#xff1a;哈希表位运算 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-pairs-of-similar-strings/ 给你一个下标从 0 开始的字符串数组 words 。 如果两个字符串由相同的字符组成&#xff0c;则认为这两个字符串 …

【多模态处理篇三】【DeepSeek语音合成:TTS音色克隆技术揭秘】

最近帮某明星工作室做AI语音助手时遇到魔幻需求——要求用5秒的咳嗽声克隆出完整音色!传统TTS系统直接翻车,生成的语音像得了重感冒的电音怪物。直到祭出DeepSeek的TTS音色克隆黑科技,才让AI语音从"机器朗读"进化到"声临其境"。今天我们就来扒开这个声音…

【Leetcode 每日一题 - 扩展】1512. 好数对的数目

问题背景 给你一个整数数组 n u m s nums nums。 如果一组数字 ( i , j ) (i,j) (i,j) 满足 n u m s [ i ] n u m s [ j ] nums[i] nums[j] nums[i]nums[j] 且 i < j i < j i<j&#xff0c;就可以认为这是一组 好数对 。 返回好数对的数目。 数据约束 1 ≤ n …

vivado修改下载器下载速率

Error Launching Program X Error while launching program: fpga configuration failed. DONE PIN is not HIGH 原因是下载器速度太快了。先从任务管理器中关闭hw_server.exe试一下,要是不行就按下面三种方法解决。 第一种方法可以不用修改下载速度,直接先从vivado中将bit流…

ESP32-S3 实战指南:BOOT-KEY 按键驱动开发全解析

一、基础知识 本篇我们使用 BOOT 按键来学习一下 GPIO 功能&#xff0c;首先补充一下相关术语介绍。 1、GPIO&#xff08;General Purpose Input/Output&#xff09; GPIO 是微控制器上的通用引脚&#xff0c;既可以作为输入&#xff08;读取外部信号&#xff09;&#xff0…