Fuzzy finder(fzf+vim) 使用全指南

簡介

Fuzzy finder 是一款使用 GO 語言編寫的交互式的 Unix 命令行工具。能夠用來查找任何 列表 內容,文件、Git 分支、進程等。全部的命令行工具能夠生成列表輸出的均可以再經過管道 pipe 到 fzf 上進行搜索和查找php

優勢

  • GO 語言編寫,編譯完生成可執行文件沒有任何依賴
  • 搜索/查找速度飛快
  • 功能全面/可視化界面體驗很棒
  • 周邊插件豐富 (vim, tmux, fuzzy auto-completion)

安裝

以 macOS 爲例子,直接使用 homebrew 安裝便可node

brew install fzf
# 若是要使用內置的快捷鍵綁定和命令行自動完成功能的話能夠按需安裝
$(brew --prefix)/opt/fzf/install

使用

命令行下執行 fzf 便可展現當前目錄下全部文件列表,能夠用鍵盤上下鍵或者鼠標點出來選擇
fzf-normalgit

或許你會以爲這個查找提示看起來挺漂亮的,可是並無什麼卵用,由於查找出來就沒有而後了。其實這也是 Fuzzy finder 最核心的地方,他只是一個通用的下拉查找功能,本身自己並不關心你用它來作什麼,一般咱們須要組合使用纔會有很好的效果github

用 vim 打開文件

好比咱們用 vim 組合 fzf 來查找並打開目錄下的文件:shell

vim $(fzf)

fzf-vim

切換當前工做目錄

再好比進入到某個文件夾下面,使用 fzf 的過濾選擇真是太方便了vim

cd $(find * -type d | fzf)

這是個組合 (cd+find+fzf) 命令,完成切換到任意子目錄的功能。能夠看出來當 fzf 和其它命令組合使用時就能使得一些操做更方便:sass

  1. 使用 find 命令找出全部的子目錄
  2. 把子目錄列表 pipe 到 fzf 上進行選擇
  3. 再把結果以子命令的形式傳給 cd

fzf-find-cd

切換 git 分支

git checkout $(git branch -r | fzf)

fzf-git-branch

不過這樣組合使用命令的實在太長了,若是你不使用自動補全的話巧起來很累的。建議把經常使用的 alias 放在 .zshrc 中管理嘛bash

shell 命令行補全

fzf 默認使用 ** 來補全 shell 命令,比起默認的 tab 補全,fzf 補全不知道高到哪裏去了。cd, vim, kill, ssh, export... 通通都能補全,好用哭了 🤣ssh

fzf-completion

配置

fzf 提供了兩個 環境變量 配置參數,來分別設置默認的調用命令和 fzf 默認配置參數ide

核心命令 FZF_DEFAULT_COMMAND

對於使用 fzf 來查找文件的狀況,fzf 其實底層是調用的 Unix 系統 find 命令,若是你以爲 find 很差用也可使用其它查找文件的命令行工具「我使用 fd」。注意:對原始命令添加一些參數應該在這個環境變量裏面添加

好比說咱們通常都會查找文件 -type f,一般會忽略一些文件夾/目錄 --exclude=...,下面是個人變量值:

export FZF_DEFAULT_COMMAND="fd --exclude={.git,.idea,.vscode,.sass-cache,node_modules,build} --type f"

界面展現 FZF_DEFAULT_OPTS

界面展現這些參數在 fzf --help 中都有,按需配置便可

export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --preview '(highlight -O ansi {} || cat {}) 2> /dev/null | head -500'"

界面配置參數加上後就漂亮多了
fzf-with-preview

--preview 表示在右側顯示文件的預覽界面,語法高亮的設置使用了 highlight 若是 highlight 失敗則使用最多見的 cat 命令來查看文件內容

highlight 安裝可能會有個小插曲。highlight 須要手動編譯安裝,默認安裝目錄在 /usr/bin, /usr/share 下面。然而在 macOS 中因爲 <abbr title="System Integrity Protection">SIP</abbr> 保護,用戶安裝的程序不能在這幾個目錄下面「即便有 sudo 權限也不行」。咱們能夠手動更改下 highlight 源代碼中 makefile 中的參數便可

# PREFIX = /usr
PREFIX = /usr/local

PREFIX = /usr 改爲 PREFIX = /usr/local,而後 makesudo make install 就能夠了

觸發命令行補全 FZF_COMPLETION_TRIGGER

默認是 **,通常不用修改

VIM fzf 插件

若是你使用 vim,那麼官方提供的插件會讓你的 vim 使用更加流暢

安裝插件

若是你本地安裝過 fzf 命令行工具了,只須要在 .vimrc 裏面添加下面兩個插件配置便可

Plug '/usr/local/opt/fzf'
Plug 'junegunn/fzf.vim'

注意:使用了 vim-plug 插件管理

插件主要對 fzf 集成綁定了一些和 vim 相關的功能,好比:查找當前 Buffer、Tag、Marks。甚至切換 window 更換 vim 主題配色等

命令模式下敲 Files 便可選擇當前目錄下全部文件,Buffers 能夠過濾當前全部 vim buffer 內容

fzf-vim-plugin

再配置幾個經常使用快捷鍵就能夠直接取代 CtrlP 插件了 🤔

  • Ctrl + p 查看文件列表
  • Ctrl + e 查看當前 Buffer,兩次 Ctrl + e 快速切換上次打開的 Buffer
nmap <C-p> :Files<CR>
nmap <C-e> :Buffers<CR>
let g:fzf_action = { 'ctrl-e': 'edit' }

結語

固然 fzf 還能夠在不少其它場景下用來。若是你想使用可視化的列表選擇而不是咣咣敲命令,那就本身搭配一些組合來使用吧

博客原文同步:https://keelii.com/2018/08/12/fuzzy-finder-full-guide/

相關文章
相關標籤/搜索