shayne's blog

Vim 插件介紹 - fzf

2019/02/12 Share

fzf是非常強大的Vim套件,非常非常建議裝,其具備以下功能:

  1. (模糊)輸入關鍵字後快速找到檔案開啟,類似功能的插件有ctrlpNerdtree
  2. 全域搜尋資料夾的關鍵字,類似grep -rni或VSCode中的ctrl+shift+F
  3. 快速尋找某些關鍵字出現在哪行,也可搭配Ctags快速查找symbols
  4. 可結合git commits, snippets等非常多的功能

安裝

安裝很迅速,只要在init.vim中插入下面的代碼(以Vim-plug為例),並用:PlugInstall安裝即可

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

基本配置

暫時先參考fzf.vim中的基本配置即可,將下面代碼放入init.vim

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
" fzf settings
" 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'],
\ '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'

讓fzf搜尋時配合.gitignore

如果沒特別設置filter,搜尋檔案時可能各種附檔名都會被包含進來。

參考fzf文檔,必須先安裝fd指令 (fd可想成是優化的find指令)。安裝完後在terminal測試是否已有fd指令,接著在~/.fzf.bash~/.fzf.zsh最下面加入:

1
2
export FZF_DEFAULT_COMMAND='fd --type f'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

接著在~/.zshrc最下面加入(bash同理):

1
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh

完成後重新source ~/.zshrc再使用fzf時應該會代入.gitignore的filter了,其他設定可再參考文檔。

快捷鍵配置

根據此表中的敘述,將自己經常用到的命令設置快捷鍵

1
2
3
4
5
6
7
8
nnoremap <leader>fl :Lines 
nnoremap <leader>fb :BLines
nnoremap <leader>ff :Files
nnoremap <leader>fg :GFiles
nnoremap <leader>f? :GFiles?
nnoremap <leader>ft :Tags<cr>
nnoremap <leader>fa :Ag
nnoremap <leader>fc :Commits

例如我輸入,ff就能快速開啟檔案搜尋視窗、輸入,fa後可以快速開啟全域搜尋的視窗。:Files後面可以接路徑,:Ag後面也可以直接接要搜尋的關鍵字,所以有些命令我有加<cr>而有些沒加。

以下為使用:Files準備搜尋並開啟檔案的情形,也可發現模糊搜尋的用處


附註

  • 如要使用fzf中的全域搜尋功能,需先安裝silversearcher-ag套件
CATALOG
  1. 1. 安裝
  2. 2. 基本配置
    1. 2.1. 讓fzf搜尋時配合.gitignore
  3. 3. 快捷鍵配置
  4. 4. 附註