こんにちは、AWS事業本部コンサルティング部に所属している今泉(@bun76235104)です。
みなさんは何のエディターをお使いでしょうか?
私は nvim と VSCodeを行ったり来たりしています。
個人で完結するような作業の際には、 nvim
を利用しますが、チーム開発で VSCodeと Dockerで統合された開発環境を利用する際などは VSCodeを利用しています。
要するに二つのエディターの設定をしており、私自身も VSCodeに統合した方が楽かもしれない・・・ と思う時もあります。
そんなライトvimmerの私でもnvimから離れきれないのは、エディター内での検索(ファイル検索・テキスト検索)体験が素晴らしいプラグインがあるためです。
ということで今回は、 telescope.nvimという素敵なプラグインのご紹介をさせていただきたいと思います。
なお、今回はプラグインのご紹介がメインであるため、プラグイン自体の導入方法や環境構築の方法まで触れられておりませんのでご了承ください。
動作環境
以下私が動作させている環境は以下のようになっております。
ショートカットキーなどがMac向けの記載となっておりますので、ご了承ください。
OS | MacOS Monterey |
Editor | nvim v0.7.2 |
拡張機能管理 | Shougo/dein.vim |
nvimで快適な検索(fuzzy finder)
まずこちらをご覧ください。
カッコ良すぎませんか・・・
VSCodeのファイル検索 ( cmd + p
)と似ていますが、何と言ってもプレビューが出るのが圧倒的にカッコ良いですし、助かります。
これは Telescope find_files
というコマンドを利用しており、私は以下のように ノーマルモードで ctrl+p
で呼び出せるように設定しております。
nnoremap <C-p> <cmd>Telescope find_files<cr>
これだけではなく、特に利用しているのが live_grep
という機能です。
こちらは、以下のようにファイル名からではなく、ファイル内の文字列から検索を行なってくれます。
こちらは以下のように設定しており、 ctrl+g
で呼び出せるようにしております。
nnoremap <C-g> <cmd>Telescope live_grep<cr>
また、telescope.nvim をさらに便利に利用できるように telescope-frecency.nvimというプラグインもあります。
Telescope find_files
ではvimのカレントディレクトリを起点にファイルを探す動作となりますが、 frecency.nvim
を利用すれば、全く関連のない階層にあるけど頻繁にアクセスするファイルなどにすぐにアクセスできます。
特に 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の方で未導入の方はご検討ください!