摘要:讓你通過輸入模糊的關鍵詞就可以定位文件或文件夾。當你的思維也習慣了模糊匹配后,在工作中可以大幅提高你的工作效率。模糊搜索的概念如下,你記得文件名含有,那么你只需要把所有文件送給然后在窗口里輸入就可以了,不管實現名是還是都會匹配上。
前言
fzf是目前最快的fuzzy finder。使用golang編寫。結合其他工具(比如ag和fasd)可以完成非常多的工作。
讓你通過輸入模糊的關鍵詞就可以定位文件或文件夾。當你的思維也習慣了模糊匹配后,在工作中可以大幅提高你的工作效率。
模糊搜索的概念如下,你記得文件名含有con, te, go, 那么你只需要把所有文件送給fzf, 然后在窗口里輸入con te go就可以了,不管實現名是test_continus_go還是go_cont_test都會匹配上。
使用git
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install升級
cd ~/.fzf && git pull && ./install原生使用
fzf默認會從STDIN讀入數據,然后將結果輸出到STDOUT
find * -type f | fzf > selected
上面命令從find的搜索結果中讀入,輸出到文件selected中
fzf里的快捷鍵在finder(輸出交換窗口)里,
Ctrl-J/Ctrl-K/Ctrl-N/Ctrlk-N可以用來將光標上下移動
Enter鍵用來選中條目, Ctrl-C/Ctrl-G/Esc用來退出
在多選模式下(-m), TAB和Shift-TAB用來多選
Mouse: 上下滾動, 選中, 雙擊; Shift-click或shift-scoll用于多選模式
布局fzf默認全屏模式,你可以定制高度
vim $(fzf --height 40%)
你可以通過$FZF_DEFAULT_OPTS來設定默認值
export FZF_DEFAULT_OPTS="--height 40% --reverse --border"搜索語法
fzf默認會以“extened-search"模式啟動, 這種模式下你可以輸入多個以空格分隔的搜索關鍵詞, 如^music .mp3$, sbtrkt !fire.
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$
表示以core開頭,以go或rb或py結尾的
環境變量
FZF_DEFAULT_ COMMAND
設定默認輸入
比如`export FZF_DEFAULT_ COMMAND="ag -g """
FZF_DEFAULT_OPTS
設定默認選項
比如`export FZF_DEFAULT_OPTS="--reverse --inline-info"
命令行下的快捷鍵 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和--exit-0
前者是如果只有一個條目,那么自動選中并退出fzf
后者是如果條目為空,自動退出
上面兩個選項對ALT-C也有用
在命令行下按下ctrl-r, fzf會列出history命令,選中條目并離開fzf的話, 選中條目會被拷到命令行上
在zsh下可以使用下面的方法來按下C-XC-R來直接執行
fzf-history-widget-accept() { fzf-history-widget zle accept-line } zle -N fzf-history-widget-accept bindkey "^X^R" fzf-history-widget-acceptALT-C
在命令行上按下alt-c, 會列出當前文件夾下的目錄,選中條目會自動進入到相應目錄
默認可以通過**來觸發文件或目錄的自動完成
COMMAND [DIRECTORY/][FUZZY_PATTERN]**
比如
vim **預覽窗口vim ../mult** cd ~/github/fzf**
如果使用--preview選項, fzf會自動用外部程序打開現在條目的文件, {}會被fzf選中行內容代替
fzf --preview "cat {}"
建議安裝rougify(先安裝ruby, 然后gem intall rouge)
然后在.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 tt="fzf --preview """""[[ $(file --mime {}) =~ binary ]] && echo {} is a binary file || (rougify {} || highlight -O ansi -l {} || coderay {} || cat {}) 2> /dev/null | head -500""""
函數是更好的方式, 用alias的話,為了繞開"的問題,需要用一個雙引號加一個間引號再加一個雙引號才能生成一個單引號
上圖左側是文件列表,右側是rougify生成的預覽窗口,可以用鼠標上下滾動,遺憾的是用鍵盤沒法移動光標到右側窗口進行上下滾動。
安裝
wget https://github.com/changyuheng/zsh-interactive-cd/blob/master/zsh-interactive-cd.plugin.zsh cp zsh-interactive-cd.plugin.zsh ~/.fzf/shell echo "source ~/.fzf/shell/zsh-interactive-cd.plugin.zsh" >> ~/.zshrc
cd后按ctrl-i就會打開fzf finder窗口
# fasd & fzf change directory - jump using `fasd` if given argument, filter output of `fasd` using `fzf` else z() { [ $# -gt 0 ] && fasd_cd -d "$*" && return local dir dir="$(fasd -Rdl "$1" | fzf -1 -0 --no-sort +m)" && cd "${dir}" || return 1 }changing directory
# fd - cd to selected directory fd() { local dir dir=$(find ${1:-.} -path "*/.*" -prune -o -type d -print 2> /dev/null | fzf +m) && cd "$dir" }
# fda - including hidden directories fda() { local dir dir=$(find ${1:-.} -type d 2> /dev/null | fzf +m) && cd "$dir" }
# fdr - cd to selected parent directory fdr() { local declare dirs=() get_parent_dirs() { if [[ -d "${1}" ]]; then dirs+=("$1"); else return; fi if [[ "${1}" == "/" ]]; then for _dir in "${dirs[@]}"; do echo $_dir; done else get_parent_dirs $(dirname "$1") fi } local DIR=$(get_parent_dirs $(realpath "${1:-$PWD}") | fzf-tmux --tac) cd "$DIR" }
# cf - fuzzy cd from anywhere # ex: cf word1 word2 ... (even part of a file name) # zsh autoload function cf() { local file file="$(locate -Ai -0 $@ | grep -z -vE "~$" | fzf --read0 -0 -1)" if [[ -n $file ]] then if [[ -d $file ]] then cd -- $file else cd -- ${file:h} fi fi }v
# fasd & fzf change directory - open best matched file using `fasd` if given argument, filter output of `fasd` using `fzf` else v() { [ $# -gt 0 ] && fasd -f -e ${EDITOR} "$*" && return local file file="$(fasd -Rfl "$1" | fzf -1 -0 --no-sort +m)" && vi "${file}" || return 1 }fzf的vim插件
在.vimrc里用vunble安裝
set rtp+=/home/harriszh/.fzf/ ... Plugin "junegunn/fzf.vim" ...
然后FZF等命令就可以使用了
建議要安裝ag,并把FZF_DEFAULT_COMMAND改成ag
如果對FZF和vim和結合感興趣可以看: VIM與模糊搜索神器FZF的集成用法 - 從簡單到高級
如果對FZF和各種工具的配合使用請看: 模糊搜索神器FZF番外篇
fzf是非常強大的膠水工具,利用它和ag, fasd及shell command可以實現非常絢爛的功能。更多例子見wiki
如果上文有錯誤的地方,歡迎聯系作者
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24954.html
摘要:比如下表是它可用的所有選項是一個函數,用來創建自己的自動補全功能。如果第一個參數是一個命令字符或一個那么它會被用作對于高級用戶,可以傳入一個字典選項。希望大家可以結合創造出更多的使用方法。 FZF and VIM 前言 fzf本身并不是一個vim 插件,本來作者只提供了基本的wrapper函數(比如fzf#run). 但后來作者發現很多人并不熟悉VIMScript, 所以就創建一個默認...
摘要:參考官網參考使用全指南安裝直接在插件管理器中其中會把命令行軟件安裝到本機的目錄中,然后在中就可以直接通過執行來使用命令搜索文件了。使用最簡單的話,直接在中輸入命令就會彈出當前目錄下的所有文件列表,然后可以各種模糊搜索,按和上下選擇。 不同于Command-T只能用于VIM,大名鼎鼎的fzf是命令行工具,而且只在VIM中使用的話也不需要手動去編譯任何依賴,直接用插件管理器安裝即可立馬使用...
閱讀 2427·2021-11-23 09:51
閱讀 2457·2021-11-11 17:21
閱讀 3097·2021-09-04 16:45
閱讀 2379·2021-08-09 13:42
閱讀 2218·2019-08-29 18:39
閱讀 2878·2019-08-29 14:12
閱讀 1279·2019-08-29 13:49
閱讀 3362·2019-08-29 11:17