はじめに 最近、Neovimの環境構築しましたが、UI設定、キーマッピング、オプション、プラグイン...と沢山の設定が必要でした。 Vimを使うなら環境構築の壁を自力で乗り越えてこそ!という見方もあり…
連載
本記事は複数記事の連載記事の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
コメントを書く