[TOC]
介紹
fzf 的主要功能有 查找文件
歷史命令查詢
快速進入目錄
文件預覽
官方 wiki https://github.com/junegunn/fzf/wiki
官方源碼地址https://github.com/junegunn/fzf
使用前注意
- fzf 本身沒有運行依賴,但是依賴本地 CLI 環境,如果你是原生 bash 體驗提升不會太大
- fzf 某些功能需要 ruby 的支持,建議先調整好本地 ruby 環境
祝使用愉快
安裝 fzf
我這里使用了 zsh + oh-my-zsh 怎么安裝見 http://www.lxweimin.com/p/0d265d9f914b
# for Mac
# install fd & fzf
$ brew install fd fzf
# bind default key-binding 這里會提示你綁定默認快捷鍵
$ /usr/local/opt/fzf/install
# 輸出這個命令后,根據提示一路回車
# 生效配置
$ source ~/.zshrc
# alter filefind to fd 設置環境變量,如果已經自動設置了,就不用重復設置
$ vim ~/.zshrc
export FZF_DEFAULT_COMMAND='fd --type file'
export FZF_CTRL_T_COMMAND=$FZF_DEFAULT_COMMAND
export FZF_ALT_C_COMMAND="fd -t d . "
$ source ~/.zshrc
# 修改自定義快捷鍵
# Ctrl+R History command; Ctrl+R file catalog
# if you want to DIY key of like 'Atl + C'
# maybe line-num is not 65, but must nearby 在 65 行或者附近,找到后改一下
$ vim /usr/local/opt/fzf/shell/key-bindings.zsh
- 65 bindkey '\ec' fzf-cd-widget
+ 65 bindkey '^\' fzf-cd-widget
# 生效改動
$ source /usr/local/opt/fzf/shell/key-bindings.zsh
注意這里把 快速進入目錄 alt+c 快鍵改為
ctrl+\
這樣可以區分一下 容易按錯的 alt+c
fzf默認環境變量
FZF_DEFAULT_ COMMAND
設定默認輸入
比如 `export FZF_DEFAULT_ COMMAND='ag -g ""'FZF_DEFAULT_OPTS
設定默認選項
比如`export FZF_DEFAULT_OPTS="--reverse --inline-info"
fzf 常用操作
fz f默認會從 STDIN 讀入數據,然后將結果輸出到 STDOUT
# 從find的搜索結果中讀入,輸出到文件 fzfSelected 中
find * -type f | fzf > fzfSelected
fzf 常用快捷鍵
-
ctrl-K/ctrl-P
可以用來將光標上移動 -
ctrl-J/ctrl-N
可以用來將光標下移動 - enter 鍵用來選中條目
- ctrl-C/ctrl-G/Esc 用來退出
- 在
多選模式下(-m)
, TAB 和 Shift-TAB 用來多選 - 鼠標: 上下滾動
- 鼠標: 選中, 雙擊
- shift-click 或 shift-scoll 用于多選模式
搜索語法
fzf默認會以 extened-search
模式啟動, 這種模式下你可以輸入多個以空格分隔的搜索關鍵詞
Token | Match type | Description |
---|---|---|
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結尾 |
如果你不想用fuzzy match, 可以用
-
fzf -e
做精確匹配 -
|
做or匹配 比如,^core go$|rb$|py$
快速預覽歷史命令 ctrl-r
這個會覆蓋原有命令行的歷史命令,不過確實好用
在命令行下按下ctrl-r, fzf會列出history命令,選中條目并離開fzf的話, 選中條目會被拷到命令行上
如果想在 zsh 種執行可以這樣配置 ~/.fzf
fzf-history-widget-accept() {
fzf-history-widget
zle accept-line
}
zle -N fzf-history-widget-accept
bindkey '^X^R' fzf-history-widget-accept
快速選擇目錄條目 ctrl-t
命令行下按下ctrl-t會打開fzf窗口,如果你選中某個條目并按下Enter, 選中的條目會被拷貝到命令行上
如果想同時預覽文件內容,可以使用 --preview
選項
export FZF_CTRL_T_OPTS="--preview '(highlight -O ansi -l {} 2> /dev/null || cat {} || tree -C {}) 2> /dev/null | head -200'"
也可以用
--select-1
如果只有一個條目,那么自動選中并退出fzf
--exit-0
如果條目為空,自動退出
這兩個選項對快速進入目錄 默認快捷鍵 alt-c 也適用(當然被我們改成
ctrl+\
)
命令行下的模糊完成
默認可以通過 ** 來觸發文件或目錄
的自動完成
比如
vim **<tab>
# 輸入 vim ** 按下 tab 鍵
vim ../multi**<TAB>
快速進入目錄 alt-c [快捷鍵已經改為 ctrl+\]
在命令行上按下 alt-c
, 會列出當前文件夾下的目錄,選中條目會自動進入到相應目錄
fzf快速預覽Preview
利用fzf --preview 完成對文件的預覽
安裝 rougify coderay
(先安裝ruby)
gem install rouge
gem install coderay
# set alias
$ vim ~/.zshrc
fzfp() {
fzf --preview '[[ $(file --mime {}) =~ binary ]] && echo {} is a binary file || (rougify {} || highlight -O ansi -l {} || coderay {} || cat {}) 2> /dev/null | head -500'
}
alias pp='fzf --preview '"'"'[[ $(file --mime {}) =~ binary ]] && echo {} is a binary file || (highlight -O ansi -l {} || coderay {} || rougify {} || cat {}) 2> /dev/null | head -500'"'"
$ source ~/.zshrc
# 使用方法,目錄直接鍵入 pp
# 使用 ctrl-J/ctrl-K/ctrl-N/ctrlk-N可以用來將光標上下移動
# enter 鍵用來選中條目
# ctrl-c/ctrl-g/Esc 用來退出
預覽功能文檔見 https://github.com/junegunn/fzf
fzf 美化
修改布局
fzf默認全屏模式,你可以定制高度
vim $(fzf --height 40%)
或者 通過 $FZF_DEFAULT_OPTS
來設定默認值
export FZF_DEFAULT_OPTS='--height 40% --reverse --border'