こんにちは。ナミレリです。この記事ではNeovimでTelescopeを便利に設定する方法を紹介します。
Telescopeはファイル内のテキスト検索やファイル名の検索などが高速に実行できる強力なツールです。しかも美しいインターフェイスでモチベーションが上がること間違いなしです。
TelescopeはNeovimのエコシステムをさらに強化し、エディタ内での作業をよりシームレスにします。NeovimとTelescopeを組み合わせることで、開発の効率と楽しさが大幅に向上します。ぜひお試しください。
この記事はこんな人にオススメ
- Neovimの設定をLuaでカスタマイズすることが好きな方
- Neovimを使い始めたが、より深く活用したいと考えている方
- 高速にファイル内やファイル名を検索したい方
- 美しいインタフェースでモチベを上げたい方
- MacBook Pro 14インチ M1Max(メモリ32GB)
- macOS Ventura 13.5
- Parallels Desktop 18 for Mac(Parallelsの公式サイト)
- Neovim NVIM v0.10.0-dev-2178
- macOS Ventura 13.5
- Neovim NVIM v0.10.0-dev-2178
目次
はじめに
Telescopeはファイル内のテキスト検索やファイル名の検索などが高速に実行できる強力なツールです。しかも美しいインターフェイスでTelescopeを使って操作しているとモチベーションが上がります。
Telescopeのざっくりとした特徴は下の3点になります。
- 効率的な検索
- ファイルやコードの特定の箇所を素早く検索することができ、正規表現も使えます。
- 拡張性
- Luaで書かれており、自分好みにカスタマイズすることが可能です。また拡張機能やテーマも追加できます。
- 統合された開発環境
- Neovimと完全に統合されているため、エディタから直接Telescopeを使うことができます。
Telescopeの美しいインタフェース
事前準備
事前準備として、Neovimのバージョンを0.9.0以上であることを確認し、ripgrepコマンドをインストールします。
Neovimのバージョンを0.9.0以上に
telescope.nvimを動かすために、まずはNeovimのバージョンを0.9.0以上にしておく必要があります。nvim --versionコマンドでバージョンを確認します。
nvimのバージョン確認
nvim --version
NVIM v0.10.0-dev-2184+g8179d68dc-Homebrew
Build type: Release
LuaJIT 2.1.0-beta3
Run "nvim -V1 -v" for more info
brewでインストール
Macの場合はbrewで下のように、Neovimをインストールします。
brew install neovim
ripgrepのインストール
続いて、ripgrepのバージョンを確認し、インストールされていない方はインストールします。
telescope.nvimで必要とされるのでインストールします。具体的には、telescope.nvimの重要コマンドであるfind_files、live_grep、grep_stringでripgprepを使います。
ripgrepのバージョン確認
rg --version
ripgrep 13.0.0
-SIMD -AVX (compiled)
Macの場合はbrewで下のように、ripgrepをインストールします。
Mac:ripgrepのインストール
brew install ripgrep
Ubuntuの場合はaptで下のように、ripgrepをインストールします。
Ubuntu:ripgrepのインストール
sudo apt install ripgrep
fdのインストール
同じように、fdのバージョンを確認し、インストールされていない方はインストールします。
fdのバージョン確認
fd --version
fd 8.7.0
Macの場合はbrewで下のように、fdをインストールします。
Mac:fdのインストール
brew install fd
ubuntuの場合はaptで下のように、fd-findをインストールします。
Ubuntu:fdのインストール
sudo apt install fd-find
この記事のファイル構成
nvimの設定ファイルの構成ですが、このブログでは下のような構成としています。telescope.nvimの設定のために今回編集するファイルは、plugins.lua、keymaps.lua、init.luaの3つのファイルです。
なお、パッケージマネジャーはpacker.nvimを使います。packerのインストールについては下の記事をぜひご覧ください。
~/.config/nvim/
├── init.lua
└── lua/
├── lsp_config.lua
├── nvim_cmp_config.lua
├── function_config.lua
├── keymaps.lua
├── options.lua
└── plugins.lua
telescope.nvimのインストール
では、早速インストールしていきましょう。
~/.config/nvim/lua/plugins.luaの編集
公式githubを参考に、下のように~/.config/nvim/lua/plugins.luaを編集します。
最下部のend)より前に追加します。
vi ~/.config/nvim/lua/plugins.lua
use({
"nvim-telescope/telescope.nvim",
tag = "0.1.5",
requires = { { "nvim-lua/plenary.nvim" } },
})
use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'make' }
:PackerInstallする
保存後にnvimを立ち上げ直すか、:source %で再読み込みし、:PackerInstallするとplugins.luaに書かれていてインストールされていないプラグインをインストールしてくれます。
:PackerInstall
~/.config/nvim/init.luaの編集
下のようにinit.luaを編集し、起動時にtelescope.nvimを読み込むようにします。
vi ~/.config/nvim/init.lua
require("telescope").setup({
defaults = {
file_ignore_patterns = {
-- 検索から除外するものを指定
"^.git/",
"^.cache/",
"^Library/",
"Parallels",
"^Movies",
"^Music",
},
vimgrep_arguments = {
-- ripggrepコマンドのオプション
"rg",
"--color=never",
"--no-heading",
"--with-filename",
"--line-number",
"--column",
"--smart-case",
"-uu",
},
},
extensions = {
-- ソート性能を大幅に向上させるfzfを使う
fzf = {
fuzzy = true,
override_generic_sorter = true,
override_file_sorter = true,
case_mode = "smart_case",
},
},
})
require("telescope").load_extension("fzf")
vimgrep_argumentsのオプションは以下の通りです。
オプション | 説明 |
---|---|
rg | ripgrepコマンドを指定している。 |
--color=never | ripgrepが色付きの出力を生成しないようにする。 色情報はTelescopeには不要なためこのオプションで無効に。 |
--no-heading | ファイル名のヘッダーを出力しないようにする。 これにより検索結果が連続したリストとして表示される。 |
--with-filename | 検索結果にファイル名を含める。 |
--line-number | 検索結果に行番号を含める。 |
--column | 検索結果に列番号を含める。 |
--smart-case | 検索クエリに大文字が含まれている場合は大文字・小文字を区別し、 小文字のみの場合は区別しない、というスマートな検索を行う。 |
rgコマンドの-uuですが、下のような意味合いです。上の例ではドットファイルも検索対象にしたいので-uuを指定しています。
オプション | 説明 |
---|---|
-u | -uは、.gitignoreを検索対象にする。 |
-uu | -uuは、隠しファイル(ドットファイル)も検索対象にする。 |
-uuu | -uuuは、バイナリファイルも検索対象にする。 |
telescope.nvimの使い方
インストールの確認のために、:checkhealth telescopeコマンドを実行します。
:checkhealth telescope
これでインストールと基本の設定が完了しました。早速便利な機能を使ってみましょう。以下は、telescope.nvimでよく使うコマンドです。
ファイル検索
:Telescope find_files
:Telescope find_filesは、カレントディレクトリ配下のファイル名を素早く検索することができます。
また、右側にファイルのPreviewが表示されます。Previewを表示させるには、iTermなどの端末の横幅を120以上にする必要があります。
テキスト検索
:Telescope live_grep
:Telescope live_grepは、カレントディレクトリ配下のテキストを検索します。正規表現も使用できます。
ファイル検索と同様に、右側にファイルのPreviewが表示されます。Previewを表示させるには、iTermなどの端末の横幅を120以上にする必要があります。
gitの操作
telescope.nvimはgitとの連携も強力で、以下のコマンドでgit関連のタスクを行うことができます。
未コミットの変更を表示
:Telescope git_status
コミットログの表示
:Telescope git_commits
バッファと履歴の操作
telescope.nvimを使って開いているバッファや最近使ったファイルに素早くアクセスできます。バッファが大量にあるときにも重宝します。
:Telescope buffers
:Telescope oldfiles
nvim設定ファイルへの素早いアクセス
:Telescope find_filesはカレントディレクトリ配下のファイルを検索しますが、下のようにcwd=で検索対象のディレクトリを指定することができます。
下の例では、cwd=~/.config/nvimを指定し、nvimの設定ファイルを開きやすくしています。
:Telescope find_files cwd=~/.config/nvim
カラーテーマの一覧表示
:Telescope colorschemeは、利用可能なカラーテーマを検索し一覧表示します。
:Telescope colorscheme
Vim Optionsの一覧と値の表示
:Telescope vim_optionsは、Neovimの現在設定されているVimオプションとその値を一覧表示し、簡単に検索することができます。加えて、:Telescope vim_optionsのインタフェースから値を一時的に変更することもできます。
:Telescope vim_options
keymapの一覧と設定値の表示
:Telescope keymapsは、Neovim内で現在定義されているすべてのキーマップを一覧表示するためのコマンドです。このコマンドを使用すると、登録されているキーマップを素早く検索し、実行もすることができます。
:Telescope keymaps
registersの一覧と値の表示
:Telescope registersは、レジスタの値を一覧表示し、簡単に検索することができます。vimはレジスタの使い勝手がいまひとつですが、:Telescope registersでレジスタをサクッと表示させて、インクリメンタルに検索してペーストできるので、使い勝手は良くなります。
:Telescope registers
help tagの一覧と値の表示
:Telescope help_tagsは、利用可能なヘルプタグを一覧表示し、関連するヘルプ情報を含む新しいウィンドウを開きます。
:Telescope help_tags
キーマップの設定
上で紹介した各コマンドにキーマップを設定します。上手にキーマップを設定することで、素早くコマンドを実行できて効率向上や生産性向上に繋がります。
vi ~/.config/nvim/lua/keymaps.lua
local builtin = require("telescope.builtin")
-- ファイル検索
vim.keymap.set("n", "<leader>ff", builtin.find_files, {})
-- ドットファイルを検索対象にするファイル検索
-- vim.keymap.set("n", "<Leader>ff", ":Telescope find_files hidden=true<cr>", {})
-- テキスト検索
vim.keymap.set("n", "<leader>fg", builtin.live_grep, {})
-- gitの操作(git status)
vim.keymap.set("n", "<leader>gs", builtin.git_status, {})
-- gitの操作(git log)
vim.keymap.set("n", "<leader>gl", builtin.git_commits, {})
-- バッファの操作
vim.keymap.set("n", "<leader>fb", builtin.buffers, {})
-- 履歴の操作
vim.keymap.set("n", "<leader>fo", builtin.oldfiles, {})
-- nvim設定ファイルへのアクセス
vim.keymap.set("n", "<Leader>fn", ":Telescope find_files cwd=~/.config/nvim<cr>", {})
-- カラーテーマの一覧
vim.keymap.set("n", "<leader>fc", builtin.colorscheme, {})
-- vim_optionsの一覧
vim.keymap.set("n", "<leader>fv", builtin.vim_options, {})
-- keymapの一覧
vim.keymap.set("n", "<leader>fk", builtin.keymaps, {})
-- registerの一覧
vim.keymap.set("n", "<leader>fr", builtin.registers, {})
-- help tagの一覧
vim.keymap.set("n", "<leader>fh", builtin.help_tags, {})
<Leader>キーについて
<Leader>は、カスタムコマンドのプレフィックスとして機能します。<Leader>を使用することで、他のキーと組み合わせて、独自の使いやすいキーバインディングを簡単に作成することができます。
<Leader>は、任意のキーに設定できます。デフォルトではバックスラッシュ (\)に設定されています。
<Leader>の設定は、~/.config/nvim/lua/keymaps.luaに下のように記述して設定します。
vi ~/.config/nvim/lua/keymaps.lua
例:<Leader>をスペースキーに設定
-- スペースを<Leader>として設定
vim.g.mapleader = " "
<Leader>キーのデフォルトではバックスラッシュですが、スペースや,(カンマ)、;(セミコロン)などに設定している方々が多いようですね。
以前は、;に設定していましたが、文字検索コマンドを繰り返すキーと被るのでスペースにしました。
拡張機能(telescope-file-browser.nvim)
telescope.nvimの拡張機能でファイルブラウジング機能を提供するtelescope-file-browser.nvimが便利なので紹介します。下の画像のようなインタフェースです。
telescope-file-browser.nvim
公式github:telescope-file-browser.nvimを参考に、下のように~/.config/nvim/lua/plugins.luaを編集します。
最下部のend)より前に追加します。
vi ~/.config/nvim/lua/plugins.lua
use {
"nvim-telescope/telescope-file-browser.nvim",
requires = { "nvim-telescope/telescope.nvim", "nvim-lua/plenary.nvim" }
}
init.luaを編集し、起動時にtelescope-file-browser.nvimを読み込むようにします。file_browserのセクションを追加します。
vi ~/.config/nvim/init.lua
require("telescope").setup({
defaults = {
file_ignore_patterns = {
-- 検索から除外するものを指定
-- 省略
},
vimgrep_arguments = {
-- ripggrepコマンドのオプション
-- 省略
},
},
extensions = {
-- ソート性能を大幅に向上させるfzfを使う
fzf = {
fuzzy = true,
-- 省略
},
file_browser = {
theme = "ivy",
hijack_netrw = true,
mappings = {
["i"] = {
-- your custom insert mode mappings
},
["n"] = {
-- your custom insert mode mappings
},
},
},
},
})
require("telescope").load_extension("fzf")
キーマップですが、<space>fBで起動するよう、下のように設定しています。
-- file browser
vim.keymap.set("n", "<space>fB", ":Telescope file_browser", { noremap = true })
最後に
最後まで読んでいただきありがとうございます。NeovimでTelescopeを設定するはいかがでしたでしょうか。
telescope.nvimを最大限に活用し、開発作業をさらに効果的かつ楽しいものにするための知識とインスピレーションが得られたことを願っています。Happy coding!
NeovimとHHKBの組み合わせは、コーディング体験を最適化し、より生産的で満足のいくものにするための最高のツールです。コーディングの楽しさと効率性を新たなレベルへと引き上げてくれます。
定番おすすめ記事
Neovimをかっこ良くクールに使う設定