telescope.nvimプラグインによるファイル検索・テキスト検索ライフ

2022.07.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、AWS事業本部コンサルティング部に所属している今泉(@bun76235104)です。

みなさんは何のエディターをお使いでしょうか?

私は nvim と VSCodeを行ったり来たりしています。

個人で完結するような作業の際には、 nvim を利用しますが、チーム開発で VSCodeと Dockerで統合された開発環境を利用する際などは VSCodeを利用しています。

既存のDocker開発環境をVS CodeのRemote Developmentで開発できるようにしてみた

要するに二つのエディターの設定をしており、私自身も VSCodeに統合した方が楽かもしれない・・・ と思う時もあります。

そんなライトvimmerの私でもnvimから離れきれないのは、エディター内での検索(ファイル検索・テキスト検索)体験が素晴らしいプラグインがあるためです。

ということで今回は、 telescope.nvimという素敵なプラグインのご紹介をさせていただきたいと思います。

なお、今回はプラグインのご紹介がメインであるため、プラグイン自体の導入方法や環境構築の方法まで触れられておりませんのでご了承ください。

動作環境

以下私が動作させている環境は以下のようになっております。

ショートカットキーなどがMac向けの記載となっておりますので、ご了承ください。

OS MacOS Monterey
Editor nvim v0.7.2
拡張機能管理 Shougo/dein.vim

nvimで快適な検索(fuzzy finder)

まずこちらをご覧ください。

telescope_find_files

カッコ良すぎませんか・・・

VSCodeのファイル検索 ( cmd + p)と似ていますが、何と言ってもプレビューが出るのが圧倒的にカッコ良いですし、助かります。

これは Telescope find_files というコマンドを利用しており、私は以下のように ノーマルモードで ctrl+p で呼び出せるように設定しております。

nnoremap <C-p> <cmd>Telescope find_files<cr>

これだけではなく、特に利用しているのが live_grep という機能です。

こちらは、以下のようにファイル名からではなく、ファイル内の文字列から検索を行なってくれます。

telescope_live_grep

こちらは以下のように設定しており、 ctrl+g で呼び出せるようにしております。

nnoremap <C-g> <cmd>Telescope live_grep<cr>

また、telescope.nvim をさらに便利に利用できるように telescope-frecency.nvimというプラグインもあります。

Telescope find_files ではvimのカレントディレクトリを起点にファイルを探す動作となりますが、 frecency.nvim を利用すれば、全く関連のない階層にあるけど頻繁にアクセスするファイルなどにすぐにアクセスできます。

telescope_live_grep

特に vimmerは vimrc init.vim init.lua などの設定ファイルにすぐアクセスできるので便利に感じるのではないかと思います。

以下のようにショートカットを ctrl+f に設定しています。

nnoremap <C-f> <cmd>Telescope frecency<cr>

dein.toml の全体的な設定は以下の様にしております。

###
# fuzzy-finder
###


# telescope.nvimが依存
[[plugins]]
repo = 'nvim-lua/plenary.nvim'


[[plugins]]
depends = ['airblade/vim-rooter']
hook_add = '''
" Search for Project root
" Find files using Telescope command-line sugar.
nnoremap <C-p> <cmd>Telescope find_files<cr>
nnoremap <C-g> <cmd>Telescope live_grep<cr>
" プロジェクトルートではなく現在開いているファイルを起点にファイル検索
nnoremap <M-p> <cmd>lua require('telescope.builtin').find_files( { cwd = vim.fn.expand('%:p:h') })<cr>
nnoremap <M-g> <cmd>lua require('telescope.builtin').live_grep( { cwd = vim.fn.expand('%:p:h') })<cr>
nnoremap <leader>fb <cmd>Telescope buffers<cr>
nnoremap <leader>fh <cmd>Telescope help_tags<cr>

" Using Lua functions
nnoremap <leader>ff <cmd>lua require('telescope.builtin').find_files()<cr>
nnoremap <leader>fg <cmd>lua require('telescope.builtin').live_grep()<cr>
nnoremap <leader>fb <cmd>lua require('telescope.builtin').buffers()<cr>
nnoremap <leader>fh <cmd>lua require('telescope.builtin').help_tags()<cr>
lua <<EOF
require('telescope').setup{
  defaults = {
    mappings = {
      n = {
        ["<esc>"] = require('telescope.actions').close,
      },
      i = {
        ["<esc>"] = require('telescope.actions').close,
        ["<C-a>"] = require('telescope.actions').send_to_qflist + require('telescope.actions').open_qflist,
        ["<C-q>"] = require('telescope.actions').send_selected_to_qflist + require('telescope.actions').open_qflist
      }
    }
  }
}
EOF
'''
repo = 'nvim-telescope/telescope.nvim'

# telescope-frequencyが依存
[[plugins]]
repo = 'tami5/sqlite.lua'

# telescope-frequencyが依存
[[plugins]]
repo = 'kyazdani42/nvim-web-devicons'

[[plugins]]
hook_add = '''
nnoremap <C-f> <cmd>Telescope frecency<cr>
lua << EOF
require"telescope".load_extension("frecency")
EOF
'''
repo = 'nvim-telescope/telescope-frecency.nvim'

今回ご紹介したのは私がよく利用している3つの機能だけですが他にも便利な機能があります。

ぜひ vimmerの方で未導入の方はご検討ください!