【Mac】NeovimでTelescopeを設定する

11 min

こんにちは。ナミレリです。この記事ではNeovimでTelescopeを便利に設定する方法を紹介します。

Telescopeはファイル内のテキスト検索やファイル名の検索などが高速に実行できる強力なツールです。しかも美しいインターフェイスでモチベーションが上がること間違いなしです。

TelescopeはNeovimのエコシステムをさらに強化し、エディタ内での作業をよりシームレスにします。NeovimとTelescopeを組み合わせることで、開発の効率と楽しさが大幅に向上します。ぜひお試しください。

この記事はこんな人にオススメ

  • Neovimの設定をLuaでカスタマイズすることが好きな方
  • Neovimを使い始めたが、より深く活用したいと考えている方
  • 高速にファイル内やファイル名を検索したい方
  • 美しいインタフェースでモチベを上げたい方
この記事の環境
Parallelsの母艦
  • MacBook Pro 14インチ M1Max(メモリ32GB)
  • macOS Ventura 13.5
  • Parallels Desktop 18 for MacParallelsの公式サイト
  • Neovim NVIM v0.10.0-dev-2178
ParallelsのゲストOS
  • macOS Ventura 13.5
  • Neovim NVIM v0.10.0-dev-2178
Parallels Desktop 20 for Macの無料トライアル もありますので、ぜひダウンロードして試してみてください。M1/M2/M3のMac上で快適にMacやUbuntu、Windowsが動作します。
NEW Parallels Desktop 20 for Mac

Parallels Desktop 20 for Macは、M1/M2/M3のMac上で快適にMacやUbuntu、Windowsが動作します。

14日間の無料トライアルもありますので、ぜひダウンロードして試してみてください。

はじめに

Telescopeはファイル内のテキスト検索やファイル名の検索などが高速に実行できる強力なツールです。しかも美しいインターフェイスでTelescopeを使って操作しているとモチベーションが上がります

Telescopeのざっくりとした特徴は下の3点になります。

Telescopeの特徴
  1. 効率的な検索
    • ファイルやコードの特定の箇所を素早く検索することができ、正規表現も使えます。
  2. 拡張性
    • Luaで書かれており、自分好みにカスタマイズすることが可能です。また拡張機能やテーマも追加できます。
  3. 統合された開発環境
    • Neovimと完全に統合されているため、エディタから直接Telescopeを使うことができます。

Telescopeの美しいインタフェース

TelescopeのFind Filesを実行した画面
TelescopeのFind Filesを実行した画面

事前準備

事前準備として、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

2023年8月現在、brew info neovimでバージョンを確認すると0.9.1となっています。

ripgrepのインストール

続いて、ripgrepのバージョンを確認し、インストールされていない方はインストールします。

telescope.nvimで必要とされるのでインストールします。具体的には、telescope.nvimの重要コマンドであるfind_fileslive_grepgrep_stringripgprepを使います。

ripgrepについては下の記事でも紹介しています。

ripgrepはRustで作られたgrepのような高速な検索ツールコマンドです。

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.luakeymaps.luainit.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' }

上記では、2024年2月現在の最新版であるtag = "0.1.5"を指定しています。

上の記述により、ソート性能を大幅に向上させるためにtelescope-fzf-native.nvimと、依存関係で必要なnvim-lua/plenary.nvimもインストールします。

: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のオプションは以下の通りです。

オプション説明
rgripgrepコマンドを指定している。
--color=neverripgrepが色付きの出力を生成しないようにする。
色情報は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

:checkhealth telescope
:checkhealth telescope

これでインストールと基本の設定が完了しました。早速便利な機能を使ってみましょう。以下は、telescope.nvimでよく使うコマンドです。

後ほど、これらの良く使うコマンドをキーマップに設定します。

ファイル検索


:Telescope find_files

:Telescope find_filesは、カレントディレクトリ配下のファイル名を素早く検索することができます。

また、右側にファイルのPreviewが表示されます。Previewを表示させるには、iTermなどの端末の横幅を120以上にする必要があります

ドットファイルを検索対象にしたい場合は、:Telescope find_files hidden=trueです。

テキスト検索


:Telescope live_grep

:Telescope live_grepは、カレントディレクトリ配下のテキストを検索します。正規表現も使用できます。

ファイル検索と同様に、右側にファイルのPreviewが表示されます。Previewを表示させるには、iTermなどの端末の横幅を120以上にする必要があります

vimgrep_argumentsで設定した通りに、検索結果(Results)には、ファイル名、行数、列数、該当の行がリストで表示されます。ドットファイルも検索対象になっています。

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

下のキャプチャでは、tabstopと入力してtabはスペース何個分の設定か確認しています。

keymapの一覧と設定値の表示

:Telescope keymapsは、Neovim内で現在定義されているすべてのキーマップを一覧表示するためのコマンドです。このコマンドを使用すると、登録されているキーマップを素早く検索し、実行もすることができます。


:Telescope keymaps

下のキャプチャでは、n c-pと入力してNormalモードの<C-P>を検索しています。

registersの一覧と値の表示

:Telescope registersは、レジスタの値を一覧表示し、簡単に検索することができます。vimはレジスタの使い勝手がいまひとつですが、:Telescope registersでレジスタをサクッと表示させて、インクリメンタルに検索してペーストできるので、使い勝手は良くなります。


:Telescope registers

help tagの一覧と値の表示

:Telescope help_tagsは、利用可能なヘルプタグを一覧表示し、関連するヘルプ情報を含む新しいウィンドウを開きます。


:Telescope help_tags

キーマップの設定

上で紹介した各コマンドにキーマップを設定します。上手にキーマップを設定することで、素早くコマンドを実行できて効率向上や生産性向上に繋がります。

この記事では、キーマップの設定は~/.config/nvim/lua/keymaps.luaに記述します。


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>キーのデフォルトではバックスラッシュですが、スペース,(カンマ)、;(セミコロン)などに設定している方々が多いようですね。

私は<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" }
}

保存後にnvimを立ち上げ直すか、:source %で再読み込みし、:PackerSyncしてインストールします。

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")

保存後にnvimを立ち上げ直すか、:source %で再読み込みし、:Telescope file_browserで起動することができます。

キーマップですが、<space>fBで起動するよう、下のように設定しています。


-- file browser
vim.keymap.set("n", "<space>fB", ":Telescope file_browser", { noremap = true })

最後に

最後まで読んでいただきありがとうございます。NeovimでTelescopeを設定するはいかがでしたでしょうか。

telescope.nvimを最大限に活用し、開発作業をさらに効果的かつ楽しいものにするための知識とインスピレーションが得られたことを願っています。Happy coding!

究極のコーディング体験:NeovimとHHKBで高める生産性

定番おすすめ記事

Neovimをかっこ良くクールに使う設定

カテゴリー:
関連記事