fzf 命令行文本增強工具使用

[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'

參考
如何給碼農的Mac開光
模糊搜索神器fzf

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容

  • fzf是目前最快的fuzzy finder。使用golang編寫。結合其他工具(比如ag和fasd)可以完成非常多...
    佛心看世界閱讀 2,392評論 0 2
  • 一、Python簡介和環境搭建以及pip的安裝 4課時實驗課主要內容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,776評論 0 10
  • 返回上次光標的位置Ctrl+Alt+ left/right 返回至上次瀏覽的位置 Alt+回車 導入包,自動修正C...
    請叫我四爺閱讀 1,959評論 1 2
  • 左手拿起碗,打上洗潔精,右手拿起抹布,沿碗廓慢慢抹一圈,小心翼翼地把碗翻過來,沿碗底讓布再旋轉一圈。我每天幫忙...
    Keizer閱讀 288評論 2 3
  • 最近看了丁云生的《重疾不重》,對于才知道重大疾病和我們的關系,才知道重疾險對于我們的重要作用。 曾經有一位腫瘤專家...
    蔣瑩閱讀 378評論 0 0