命令行模糊搜索神器-fzf
标签:vim
command line fuzzy finder
Search syntax
语法和正则表达式类似:^
表示开头,$
表示最后,!
表示取反.不同点是:'
开头表示精确匹配,还支持|(或)
multi-select mode
fzf支持多个选中.打开界面,移动到目标行,TAB
选中即可
trigger fzf
打开界面的方式:
- COMMAND [DIRECTORY/][FUZZY_PATTERN]**
- CTRL+T
file preview
export FZF_DEFAULT_OPTS='--border --preview "[[ $(file --mime {}) =~ binary ]] &&
echo {} is a binary file ||(bat --style=numbers --color=always --theme=TwoDark {}) 2> /dev/null | head -1000"'
如果文件不是binary,bat读取文件,head
输出前1000行
如果想默认关闭preview,FZF_DEFAULT_OPTS
后面加上
export FZF_DEFAULT_OPTS='...--preview-window "hidden"'
preview bind key
export FZF_DEFAULT_OPTS='--border --preview "[[ $(file --mime {}) =~ binary ]] &&
echo {} is a binary file ||(bat --style=numbers --color=always --theme=TwoDark {}) 2> /dev/null | head -1000"
--bind "?:toggle-preview,up:preview-up,down:preview-down"
'
通过--bind
参数
- 绑定快捷键
?
,触发&关闭preview - 绑定上,下箭头,上下移动preview的内容
directory preview
ALT-C
打开目录选择界面
export FZF_ALT_C_OPTS="--preview 'tree -C {} | head -200' --bind '?:toggle-preview,up:preview-up,down:preview-down'"
和上面file preview绑定一样,通过--bind
参数
- 绑定快捷键
?
,触发&关闭preview - 绑定上,下箭头,上下移动preview的内容
ignore file
fzf默认用find
查找,可以替换为其他工具,如fd,以避免不想看到的文件出现在fzf结果中
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
演示
fzf.vim
文件快速打开和全文搜索之前用的是
Plug 'ctrlpvim/ctrlp.vim'
Plug 'mileszs/ack.vim'
map <leader>a :Ack!<space>
现在这两个可以换成
Plug '~/.fzf'
Plug 'junegunn/fzf.vim'
map <leader>a :Ag!<space>
nnoremap <C-p> :Files<Cr>
A code-searching tool similar to ack, but faster
:Files
类似于ctrlp
.
由于调用了fzf命令
,会用到上面的配置,所以也可以通过上面绑定的快捷键preview
ag preview
ag
全文搜索的结果也可以preview
command! -bang -nargs=* Ag
\ call fzf#vim#ag(<q-args>,
\ <bang>0 ? fzf#vim#with_preview('up:60%')
\ : fzf#vim#with_preview('right:50%:hidden', '?'),
\ <bang>0)
和上面fzf preview绑定一样
- 绑定快捷键
?
,触发&关闭preview - 绑定上,下箭头,上下移动preview的内容
效果
不定期更新