0%

vim 搜索插件 fzf.vim

文件搜索可以使用 ctrlp.vimctrlsf.vim 等插件
搜索 tags 发现两个插件 fzf.vimLeaderF,选择使用 fzf.vim

fzf

fzf 是目前最快的 fuzzy finder。使用 golang 编写。结合其他工具 ( 比如 ag 和 fasd ) 可以完成非常多的工作。 让你通过输入模糊的关键词就可以定位文件或文件夹。
vim 中搭配 fzf.vim 使用

安装

Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' }
Plug 'junegunn/fzf.vim'

如果不支持安装,可以在插件安装之后手动完成 fzf 安装

$ cd ~/.vim/bundle/fzf
$ ./install --bin

配置

""""""""""""""""""""""""""""""
" FZF
""""""""""""""""""""""""""""""
if isdirectory(expand("~/.vim/bundle/fzf/"))
    let g:fzf_command_prefix = 'Fzf'

    " This is the default extra key bindings
    let g:fzf_action = {
                \ 'ctrl-t': 'tab split',
                \ 'ctrl-x': 'split',
                \ 'ctrl-v': 'vsplit' }

    " Default fzf layout
    " - down / up / left / right
    let g:fzf_layout = { 'down': '~40%' }

    " Customize fzf colors to match your color scheme
    let g:fzf_colors =
                \ { 'fg':      ['fg', 'Normal'],
                \ 'bg':      ['bg', 'Normal'],
                \ 'hl':      ['fg', 'Comment'],
                \ 'fg+':     ['fg', 'CursorLine', 'CursorColumn', 'Normal'],
                \ 'bg+':     ['bg', 'CursorLine', 'CursorColumn'],
                \ 'hl+':     ['fg', 'Statement'],
                \ 'info':    ['fg', 'PreProc'],
                \ 'border':  ['fg', 'Ignore'],
                \ 'prompt':  ['fg', 'Conditional'],
                \ 'pointer': ['fg', 'Exception'],
                \ 'marker':  ['fg', 'Keyword'],
                \ 'spinner': ['fg', 'Label'],
                \ 'header':  ['fg', 'Comment'] }

    " Enable per-command history.
    " CTRL-N and CTRL-P will be automatically bound to next-history and
    " previous-history instead of down and up. If you don't like the change,
    " explicitly bind the keys to down and up in your $FZF_DEFAULT_OPTS.
    let g:fzf_history_dir = '~/.local/share/fzf-history'

    function! s:fzf_statusline()
        " Override statusline as you like
        highlight fzf1 ctermfg=161 ctermbg=251
        highlight fzf2 ctermfg=23 ctermbg=251
        highlight fzf3 ctermfg=237 ctermbg=251
        setlocal statusline=%#fzf1#\ >\ %#fzf2#fz%#fzf3#f
    endfunction

    autocmd! User FzfStatusLine call <SID>fzf_statusline()

    nnoremap <leader><leader>x :FzfTags<cr>
endif

设置 let g:fzf_command_prefix = 'Fzf' 之后,可以使用 FzfTags 来搜索 tagsFzfFiles 来搜索文件等

搜索语法

fzf 默认会以 extened-search 模式启动, 这种模式下你可以输入多个以空格分隔的搜索关键词, 如 ^music .mp3$, sbtrkt !fire.

  • sbtrkt fuzzy-match 匹配 sbtrkt
  • ^music prefix-exact-match 以 music 开头
  • .mp3$ suffix-exact-match 以.mp3 结尾
  • 'wild exact-match(quoted) 精确包含 wild
  • !fire inverse-exact-match 不包含 fire
  • !.mp3$ inverse-suffix-exact-match 不以.mp3 结尾

快捷键

  • Ctrl-J/Ctrl-K/Up/Down 可以用来将光标上下移动
  • Enter 键用来选中条目, Ctrl-C/Ctrl-G/Esc 用来退出
  • 在多选模式下 (-m) , TABShift-TAB 用来多选
  • Mouse : 上下滚动, 选中, 双击; Shift-clickshift-scoll 用于多选模式

有哪些工具可以方便的和 FZF 一起使用

  • Find (目录搜索)
  • Grep (文本搜索)
  • Ag (文本搜索)
  • fd (目录搜索)
  • ripgrep (文本搜索)

后两个是最新出的两个搜索方面的新秀,应该是目前速度最快的。

忽略某些文件

Respecting .gitignore

export FZF_DEFAULT_COMMAND="fd --type f --exclude '*.a' --exclude '*.bmp' --exclude '*.png'"

使用命令 FZF_DEFAULT_COMMAND 来完成一些文件的排除

Ref

  1. fzf
  2. fzf.vim
  3. 模糊搜索神器 fzf
  4. 模糊搜索神器 FZF 番外篇
  5. FZF and VIM
  6. 在 Vim 中使用 fzf
  7. how do I exclude files from fzf leader-t command?