🔍

nvim-telescope の live_grep で隠しファイルを検索対象にする

2024/08/05に公開

nvim-telescope のlive_grepは、デフォルトでは隠しファイル(.から始まるファイル)が検索対象にならない。これはripgrepの標準動作であるが、特にdotfilesを編集している時など、かなーり困る。

ripgrepのrgコマンドでこの挙動を修正するには、--hidden オプションを付ける。

rg --hidden foobar

しかし普通は.gitだけは除外したいと思われるので、--glob オプションで !.git も指定するといい感じの動作になる。参考

alias rg="rg --hidden --glob '!.git'"

これをnvim-telescopeで実現するには、次のように設定する。プラグイン管理にはLazy.nvimを使用。

{
    'nvim-telescope/telescope.nvim', 
    branch = '0.1.x',
    dependencies = { 'nvim-lua/plenary.nvim' },
    event = 'VeryLazy',
    opts = {
        defaults = {
            vimgrep_arguments = {
                "rg",
                "--color=never",
                "--no-heading",
                "--with-filename",
                "--line-number",
                "--column",
                "--smart-case",
                "--hidden", --追加
            },
        },
    },
    keys = {
         {'<leader>g', function()
             -- glob_patternオプションを引数で指定
             require('telescope.builtin').live_grep({ glob_pattern =  '!.git' })
         end },
    },
}

vimgrep_arguments のデフォルト値は :help telescope.defaults.vimgrep_arguments で調べてください。その末尾に --hidden を追加、そしてlive_grepメソッドの引数としてglob_patternを追加という流れです。


なお、さらに複雑な検索を行うために、rgのオプションを直接編集できるtelescope-live-grep-args.nvimというプラグインもあるようだ。私の場合はそこまでは不要かなー。

Discussion