web-dev-qa-db-ja.com

Arch Linuxでfzfを使い始める

pacman -S fzfを使用してArch Linux 4.13.11に fzf をインストールしました。

Bashからfzfを呼び出すと、ファイルを選択できます( Ctrln そして Ctrlp)現在のディレクトリとそのサブディレクトリ。

これはいいことですが、何らかのbash統合が必要です。

ここからどこへ行くのですか?

6
Matthias Braun

デフォルトのbashキーバインディング

_whereis fzf_を使用して、bash統合用のfzfのファイルを_usr/share/fzf_で見つけました:

_completion.bash
key-bindings.bash
_

両方のファイルをsourceingした後、これによりbashのキーバインドがいくつか有効になります。たとえば、 Ctrlt 現在のディレクトリ内のファイルを検索し、 Ctrlr コマンド履歴を検索します。

ディレクトリを見つけてディレクトリに変更するには、 Altc

これらのキーバインディングを永続化するために、これらを_.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はcdlsvimのようないくつかの 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の統合

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のreadmewiki に、fzf構成のその他の例があります。

1ファジー検索ファイルを見つけてVimで何度も開く場合は、- この部分の_.bashrc_ を使用してそのファイルのキーバインドを作成できます。

8
Matthias Braun

すばらしい答え(@ 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'"

0
Victoria Stuart