pacman -S fzf
を使用してArch Linux 4.13.11に fzf をインストールしました。
Bashからfzf
を呼び出すと、ファイルを選択できます( Ctrl + n そして Ctrl + p)現在のディレクトリとそのサブディレクトリ。
これはいいことですが、何らかの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
のようないくつかの hard-coded コマンドのファジーパス補完をサポートしています。
たとえば、_vim **
_と入力します Tab on bashは現在のディレクトリであいまい検索を開始し、選択したファイルをVimで開きます1。
これはかなり便利ですが、たとえばPDFを同じ方法で開きたいと思います。これを有効にするには、次の行を_.bashrc
_に追加します。
_complete -o bashdefault -o default -F _fzf_path_completion zathura
_
ここでは、 zathura
はmy PDFビューアです。任意のドキュメントビューアに置き換えることができます。
ファジーパス補完は、現在のディレクトリだけでなく、すべてのパスで機能することに注意してください。
_vim ~/**
_
そして打つ Tab ホームディレクトリの下のファイルをあいまい検索し、Vimで開きます。
Vimセッション内でfzfを使用するための私の_.vimrc
_からのキーバインディングは次のとおりです。
_" 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'
_
次に、Vimから_:PlugInstall
_を呼び出します。
リストはこちら 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のシェル統合を構成する方法に関するアイデアです。
fzfのreadme と wiki に、fzf構成のその他の例があります。
1ファジー検索ファイルを見つけてVimで何度も開く場合は、- この部分の_.bashrc
_ を使用してそのファイルのキーバインドを作成できます。
すばらしい答え(@ matthias-braun)!しかし、端末にカラーコードが表示され、上記の_DEFAULT_OPTS
_を使用した出力にエラーが表示されました。
私はここに問題の説明と私の解決策を投稿しました(スクリーンショットを含む):
https://github.com/junegunn/fzf/issues/1644#issuecomment-518339598
基本的に、(_-ansi
_の前に_--preview
_を書き留めます):
export FZF_DEFAULT_OPTS="--ansi --preview '(highlight -O ansi -l {} 2>/dev/null || cat {} || tree -C {}) 2>/dev/null | head -200'"