Arch Linux 上的 fzf 入門
我剛剛在 Arch Linux 4.13.11 上使用
pacman -S fzf
.在 Bash 中,我可以呼叫它來選擇目前目錄及其子目錄中的
fzf
文件(使用Ctrl
+n
和Ctrl
+ )。p
這很好,但我想要某種形式的 Bash 集成。
我從這裡去哪裡?
預設 bash 鍵綁定
使用
whereis fzf
,我在以下位置找到了用於 Bash 集成的 fzf 文件usr/share/fzf
:completion.bash key-bindings.bash
在
source
ing 兩個文件之後,這將為 Bash 啟用幾個鍵綁定:例如,我可以點擊Ctrl
+t
來搜尋目前目錄中的文件,Ctrl
+r
來搜尋我的命令歷史記錄。對於查找和更改目錄,有
Alt
+c
。為了使這些鍵綁定持久化,我將它們添加到我的
.bashrc
:source /usr/share/fzf/completion.bash && source /usr/share/fzf/key-bindings.bash
定制
我發現有用的自定義是在使用 fzf 時顯示文件預覽(我也把它放在我
.bashrc
的里面):# When selecting files with fzf, we show file content with syntax highlighting, # or without highlighting if it's not a source file. If the file is a directory, # we use tree to show the directory's contents. # We only load the first 200 lines of the file which enables fast previews # of large text files. # Requires highlight and tree: pacman -S highlight tree export FZF_DEFAULT_OPTS="--preview '(highlight -O ansi -l {} 2> /dev/null || cat {} || tree -C {}) 2> /dev/null | head -200'"
路徑完成
開箱即用,fzf 支持幾個硬編碼命令的模糊路徑完成,如
cd
,ls
和vim
.例如,
vim **
Tab
在 Bash 上輸入會在目前目錄中啟動模糊搜尋,並使用 Vim 1打開所選文件。這非常有用,但我想以相同的方式打開例如 PDF。您可以通過將以下行添加到
.bashrc
:complete -o bashdefault -o default -F _fzf_path_completion zathura
這
zathura
是我的 PDF 查看器;您可以用您選擇的文件查看器替換它。請注意,模糊路徑完成適用於所有路徑,而不僅僅是目前目錄:
vim ~/**
然後點擊
Tab
將模糊搜尋您的主目錄下的文件,然後在 Vim 中打開它。Vim 集成
.vimrc
以下是我在 Vim 會話中使用 fzf的一些鍵綁定:" Search and switch buffers nmap <leader>b :Buffers<cr> " Find files by name under the current directory nmap <leader>f :Files<cr> " Find files by name under the home directory nmap <leader>h :Files ~/<cr> " Search content in the current file nmap <leader>l :BLines<cr> " Search content in the current file and in files under the current directory nmap <leader>g :Ag<cr>
所有這些的先決條件是fzf Vim 外掛;我用Plug安裝它,把它放在我的
.vimrc
:Plug 'junegunn/fzf.vim'
然後
:PlugInstall
從 Vim 呼叫。這是你可以從 Vim 呼叫的 fzf 命令列表。
搜尋項目文件
特別是在開發軟體時,我喜歡在給定項目的文件之間切換。假設項目是使用 Git 進行版本控制的,這裡有一個綁定,它將模糊搜尋項目內的文件並打開選定的文件:
nmap <leader>R :Files `=GetGitRoot()`<cr> function! GetGitRoot() " Get the dir of the current file let currentDir = expand("%:p:h") " We stop when we find the .git/ dir or hit root while !isdirectory(currentDir . "/.git/") && currentDir !=# "/" " Make the parent the current dir let currentDir = fnamemodify(currentDir, ':h') endwhile return currentDir endfunction
走得更遠
有關 fzf、Vim 和 Tmux 的強大組合,請查看Keegan Lowenstein 的部落格文章(我
--preview
從那裡獲得了配置)。這裡有一些關於如何配置 fzf 的 shell 集成的想法。
您可以在fzf 的自述文件及其wiki中找到更多 fzf 配置範例。
1 如果你發現自己在模糊搜尋文件,然後在 Vim 中打開它們很多,你可以使用這個
.bashrc
.