[第10回] Neovimのすゝめ – ファジーファインダーでファイルを開く

[第10回] Neovimのすゝめ – ファジーファインダーでファイルを開く

連載

本記事は複数記事の連載記事の1つです。

ファジーファインダー

VSCodeはCtrl-pでワークスペースのファイルをあいまい検索して開くことが出来ます。
同等のことをNeovimで実現していきましょう。

Telescope

yuki-yano/fzf-preview.vimがよく出来ていて有名ですが、fzf-previewを参考にLua言語で作られているnvim-telescope/telescope.nvimをお勧めします。

Telescopeはファイル以外にバッファーやGit、コマンド、LSPなど、様々なリソースを対象にあいまい検索することが出来ます。

公式で実際のデモが公開されているので、一目見ればイメージできるでしょう。

インストール

公式
nvim-telescope/telescope.nvim

deinを使ってインストールします。
plenary.nvimに依存するため、併せてインストールします。
アイコン表示のためにnvim-web-deviconsもインストールします。

[[plugins]]
repo = 'nvim-lua/plenary.nvim'

[[plugins]]
repo = 'nvim-telescope/telescope.nvim'

[[plugins]]
repo = 'kyazdani42/nvim-web-devicons'

インストールが完了したら、コマンドラインに以下のファイル検索するコマンドを入れて実行してみましょう。
ファイル検索ウィンドウが表示されればOKです。

:Telescope find_files

キーマップ

沢山のデータソースがあるので必要とするものを呼び出すキーマップを設定しましょう。

nnoremap <leader>p <cmd>Telescope find_files hidden=true theme=get_dropdown<cr>
nnoremap <leader>gr <cmd>Telescope live_grep theme=get_dropdown<cr>
nnoremap <leader>b <cmd>Telescope buffers theme=get_dropdown<cr>
nnoremap <leader>h <cmd>Telescope oldfiles theme=get_dropdown<cr>
nnoremap <leader>gb <cmd>Telescope git_branches theme=get_dropdown<cr>

例ではファイル、grep、バッファ、過去に開いたファイル、Gitブランチをマップしています。

・ファイルではhidden=trueオプションを付けることで隠しファイルやドットから始まるファイルも表示されます。
・themeを変更することで検索ウィンドウの構成や表示を変更できます。(私はdropdown派
・Live Grepはripgrepに依存しているのでインストールする必要があります。
sudo apt install ripgrep

コンフィグ

Galleryを確認することで、どのような設定が変更できるのかイメージ出来ます。
コンフィグのレシピとして様々な例が載っているので、気になるものがあれば設定しましょう。

検索アルゴリズムをfzfに変更する

Telescopeの標準では大文字小文字を上手く処理して検索できていなかったため、私はfzfに変更して使用しています。

依存するc++ビルド環境とfzfをインストールします。

sudo apt install fzf build-essential

Telescopeのfzf拡張を追加します。

[[plugins]]
repo = 'nvim-telescope/telescope-fzf-native.nvim'
build = 'make'

その後、設定ファイルにextensionのロードと設定を追加します。
以上で検索アルゴリズムがfzfに変更可能です。

require('telescope').setup{
  extensions = {
    fzf = {
      fuzzy = true,                    -- false will only do exact matching
      override_generic_sorter = false, -- override the generic sorter
      override_file_sorter = true,     -- override the file sorter
      case_mode = "smart_case",        -- or "ignore_case" or "respect_case"
                                       -- the default case_mode is "smart_case"
    }
  }
}

require('telescope').load_extension('fzf')

Extensions

標準でも様々なデータソースに対応していますが、さらに拡張プラグインが用意されています。

Extensions
https://github.com/nvim-telescope/telescope.nvim/wiki/Extensions

Neovimのすゝめカテゴリの最新記事