成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

模糊搜索神器fzf

miqt / 2730人閱讀

摘要:讓你通過(guò)輸入模糊的關(guān)鍵詞就可以定位文件或文件夾。當(dāng)你的思維也習(xí)慣了模糊匹配后,在工作中可以大幅提高你的工作效率。模糊搜索的概念如下,你記得文件名含有,那么你只需要把所有文件送給然后在窗口里輸入就可以了,不管實(shí)現(xiàn)名是還是都會(huì)匹配上。

前言

fzf是目前最快的fuzzy finder。使用golang編寫(xiě)。結(jié)合其他工具(比如ag和fasd)可以完成非常多的工作。
讓你通過(guò)輸入模糊的關(guān)鍵詞就可以定位文件或文件夾。當(dāng)你的思維也習(xí)慣了模糊匹配后,在工作中可以大幅提高你的工作效率。
模糊搜索的概念如下,你記得文件名含有con, te, go, 那么你只需要把所有文件送給fzf, 然后在窗口里輸入con te go就可以了,不管實(shí)現(xiàn)名是test_continus_go還是go_cont_test都會(huì)匹配上。

安裝

使用git

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
升級(jí)
cd ~/.fzf && git pull && ./install
原生使用

fzf默認(rèn)會(huì)從STDIN讀入數(shù)據(jù),然后將結(jié)果輸出到STDOUT

find * -type f | fzf > selected

上面命令從find的搜索結(jié)果中讀入,輸出到文件selected中

fzf里的快捷鍵

在finder(輸出交換窗口)里,

Ctrl-J/Ctrl-K/Ctrl-N/Ctrlk-N可以用來(lái)將光標(biāo)上下移動(dòng)

Enter鍵用來(lái)選中條目, Ctrl-C/Ctrl-G/Esc用來(lái)退出

在多選模式下(-m), TAB和Shift-TAB用來(lái)多選

Mouse: 上下滾動(dòng), 選中, 雙擊; Shift-click或shift-scoll用于多選模式

布局

fzf默認(rèn)全屏模式,你可以定制高度

vim $(fzf --height 40%)

你可以通過(guò)$FZF_DEFAULT_OPTS來(lái)設(shè)定默認(rèn)值

export FZF_DEFAULT_OPTS="--height 40% --reverse --border"
搜索語(yǔ)法

fzf默認(rèn)會(huì)以“extened-search"模式啟動(dòng), 這種模式下你可以輸入多個(gè)以空格分隔的搜索關(guān)鍵詞, 如^music .mp3$, sbtrkt !fire.

Token Match type Description
sbtrkt fuzzy-match 匹配sbtrkt
^music prefix-exact-match 以music開(kāi)頭
.mp3$ suffix-exact-match 以.mp3結(jié)尾
"wild exact-match(quoted) 精確包含wild
!fire inverse-exact-match 不包含fire
!.mp3$ inverse-suffix-exact-match 不以.mp3結(jié)尾

如果你不想用fuzzy match, 可以用fzf -e做精確匹配
|可以做or匹配, 比如

^core go$|rb$|py$

表示以core開(kāi)頭,以go或rb或py結(jié)尾的

環(huán)境變量

FZF_DEFAULT_ COMMAND

設(shè)定默認(rèn)輸入

比如`export FZF_DEFAULT_ COMMAND="ag -g """

FZF_DEFAULT_OPTS

設(shè)定默認(rèn)選項(xiàng)

比如`export FZF_DEFAULT_OPTS="--reverse --inline-info"

命令行下的快捷鍵 CTRL-T

在命令行下按下ctrl-t會(huì)打開(kāi)fzf窗口,如果你選中某個(gè)條目并按下Enter, 選中的條目會(huì)被拷貝到命令行上
如果想同時(shí)預(yù)覽文件內(nèi)容,可以使用--preview選項(xiàng)

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
前者是如果只有一個(gè)條目,那么自動(dòng)選中并退出fzf
后者是如果條目為空,自動(dòng)退出
上面兩個(gè)選項(xiàng)對(duì)ALT-C也有用

CTRL-R

在命令行下按下ctrl-r, fzf會(huì)列出history命令,選中條目并離開(kāi)fzf的話, 選中條目會(huì)被拷到命令行上
在zsh下可以使用下面的方法來(lái)按下C-XC-R來(lái)直接執(zhí)行

fzf-history-widget-accept() {
  fzf-history-widget
  zle accept-line
}
zle    -N    fzf-history-widget-accept
bindkey "^X^R" fzf-history-widget-accept
ALT-C

在命令行上按下alt-c, 會(huì)列出當(dāng)前文件夾下的目錄,選中條目會(huì)自動(dòng)進(jìn)入到相應(yīng)目錄

命令行下的模糊完成

默認(rèn)可以通過(guò)**來(lái)觸發(fā)文件或目錄的自動(dòng)完成

COMMAND [DIRECTORY/][FUZZY_PATTERN]**

比如

vim **
vim ../mult**
cd ~/github/fzf**
預(yù)覽窗口

如果使用--preview選項(xiàng), fzf會(huì)自動(dòng)用外部程序打開(kāi)現(xiàn)在條目的文件, {}會(huì)被fzf選中行內(nèi)容代替

fzf --preview "cat {}"

建議安裝rougify(先安裝ruby, 然后gem intall rouge)
然后在.zshrc里用函數(shù)或別名

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""""

函數(shù)是更好的方式, 用alias的話,為了繞開(kāi)"的問(wèn)題,需要用一個(gè)雙引號(hào)加一個(gè)間引號(hào)再加一個(gè)雙引號(hào)才能生成一個(gè)單引號(hào)

上圖左側(cè)是文件列表,右側(cè)是rougify生成的預(yù)覽窗口,可以用鼠標(biāo)上下滾動(dòng),遺憾的是用鍵盤(pán)沒(méi)法移動(dòng)光標(biāo)到右側(cè)窗口進(jìn)行上下滾動(dòng)。

fzf示例 interactive cd

安裝

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就會(huì)打開(kāi)fzf finder窗口

z
# 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

更多信息

如果對(duì)FZF和vim和結(jié)合感興趣可以看: VIM與模糊搜索神器FZF的集成用法 - 從簡(jiǎn)單到高級(jí)
如果對(duì)FZF和各種工具的配合使用請(qǐng)看: 模糊搜索神器FZF番外篇

后言

fzf是非常強(qiáng)大的膠水工具,利用它和ag, fasd及shell command可以實(shí)現(xiàn)非常絢爛的功能。更多例子見(jiàn)wiki
如果上文有錯(cuò)誤的地方,歡迎聯(lián)系作者

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24954.html

相關(guān)文章

  • VIM與模糊搜索神器FZF的集成用法 - 從簡(jiǎn)單到高級(jí)

    摘要:比如下表是它可用的所有選項(xiàng)是一個(gè)函數(shù),用來(lái)創(chuàng)建自己的自動(dòng)補(bǔ)全功能。如果第一個(gè)參數(shù)是一個(gè)命令字符或一個(gè)那么它會(huì)被用作對(duì)于高級(jí)用戶,可以傳入一個(gè)字典選項(xiàng)。希望大家可以結(jié)合創(chuàng)造出更多的使用方法。 FZF and VIM 前言 fzf本身并不是一個(gè)vim 插件,本來(lái)作者只提供了基本的wrapper函數(shù)(比如fzf#run). 但后來(lái)作者發(fā)現(xiàn)很多人并不熟悉VIMScript, 所以就創(chuàng)建一個(gè)默認(rèn)...

    ?xiaoxiao, 評(píng)論0 收藏0
  • Vim模糊文件搜索fzf

    摘要:參考官網(wǎng)參考使用全指南安裝直接在插件管理器中其中會(huì)把命令行軟件安裝到本機(jī)的目錄中,然后在中就可以直接通過(guò)執(zhí)行來(lái)使用命令搜索文件了。使用最簡(jiǎn)單的話,直接在中輸入命令就會(huì)彈出當(dāng)前目錄下的所有文件列表,然后可以各種模糊搜索,按和上下選擇。 不同于Command-T只能用于VIM,大名鼎鼎的fzf是命令行工具,而且只在VIM中使用的話也不需要手動(dòng)去編譯任何依賴,直接用插件管理器安裝即可立馬使用...

    lavor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<