ITエンジニアによるITエンジニアのためのブログ

Neovim Telescope

Neovimのファジーファインダー・プラグインであるTelescopeの使い方を紹介します。

ファジーファインダーとは日本語にするとあいまい検索のことで、難しい正規表現を使わなくても、検索文字列に似たものから候補リストを表示してくれます。

ターミナルコマンドのfindのようなファイル名検索、grepのようなファイル内の文字列検索、を使って検索結果に表示されたファイルをそのままNeovim内で開くことができます。

もしLSPを既にインストールしている場合はLSPとも連携でき、変数やメソッドの定義箇所に移動できたり、参照されている箇所を検索できます。

gitとも連携しており、特定のブランチ内のコミット一覧を検索できます。

インストール方法

ここではPackerを使ってインストールします。

~/.config/nvim/lua/user/plugins.lua

-- Telescope
use {
'nvim-telescope/telescope.nvim', branch = '0.1.x',
requires = { {'nvim-lua/plenary.nvim'} }
}

ブランチのパッチバージョンをxとすることで、0.1ブランチの最新パッチが同期されるようになります。また、Telescopeはplenary.nvimに依存しますが、上記のように記載しておくと自動でインストールしてくれます。

なお、Telescopeのlive_grepコマンドを使うには、ripgrepというgrepを強化したようなツールをインストールする必要があります。それぞれのOSでのインストール方法はripgrepレポジトリーのREADMEに記載がありますが、例としてUbuntuだと以下の通りです。

sudo apt-get install ripgrep

Telescopeコマンド

それでは、代表的なTelescopeのコマンドを見ていきましょう。

ファイル名検索

:Telescope find_files

インタラクティブなfindです。

ファイル内の文字列検索

:Telescope live_grep

grepのように検索文字列に該当するファイル内コンテンツの該当箇所をリストで表示します。

デフォルトのvim/neovimでも「:grep search_string dir -R」でquickfixリストを使って検索結果を選択出来ますが、Telescope live_grepの方がインタラクティブに検索出来るのでより便利です。

バッファ検索

:Telescope buffers

バッファで開いている複数のファイルの中から、ファイル名で検索します。*バッファ内の文字列検索ではありません。

LSP定義検索

Telescope lsp_definitions

カーソルで現在ホーバーしているクラス名、メソッド名、変数名が定義されているファイルを開き、該当箇所に移動します。LSPの記事でgdにキーマップを指定した、vim.lsp.buf.definitionと同じ機能です。

LSPリファレンス検索

Telescope lsp_references

カーソルで現在ホーバーしている変数やメソッドなどのキーワードが参照されている箇所を検索します。LSPのリファレンス参照機能(vim.lsp.buf.references:LSPの記事ではgrにキーマップ指定)はデフォルトではquickfixリストを使いますが、これをTelescope上で表示出来るようになります。

Gitブランチ検索

Telescope git_branches

gitのブランチ名を検索し、候補ブランチのコミット履歴をプレビューできます。

なお、いちいちTelescopeとコマンドモードで入力するのは手間なので、よく使うコマンドはキーマップを設定しておくと便利です。

~/.config/nvim/lua/user/keymaps.lua

-- Telescope
keymap('n', '<leader>ff', "<cmd>Telescope find_files<cr>", opts)
keymap('n', '<leader>fg', "<cmd>Telescope live_grep<cr>", opts)
keymap('n', '<leader>fb', "<cmd>Telescope buffers<cr>", opts)
keymap('n', '<leader>fr', "<cmd>Telescope lsp_references<cr>", opts)

Telescopeウィンドウ内のナビゲーション用のキーマッピングはTelescope挿入モードの場合は<Ctrl-/>で、Telescopeノーマルモードの場合は?キーを押すことで確認できます。

Telescopeを使いこなせるようになると検索スピードが何倍も向上しますので、ぜひ試してみてください。また、Telescopeだけでなく、Vim/Neovimの編集スピードを全般的に向上させたい場合は、「実践Vim 思考のスピードで編集しよう!」がおすすめです。