はじめに 最近、Neovimの環境構築しましたが、UI設定、キーマッピング、オプション、プラグイン...と沢山の設定が必要でした。 Vimを使うなら環境構築の壁を自力で乗り越えてこそ!という見方もあり…
- 1. 連載
- 2. プラグイン
- 3. 導入ポイント
- 4. おすすめプラグイン
- 4.1. cespare/vim-toml
- 4.2. vim-jp/vimdoc-ja
- 4.3. morhetz/gruvbox
- 4.4. ayu-theme/ayu-vim
- 4.5. nanotech/jellybeans.vim
- 4.6. machakann/vim-highlightedyank
- 4.7. tpope/vim-commentary
- 4.8. easymotion/vim-easymotion
- 4.9. hoob3rt/lualine.nvim
- 4.10. machakann/vim-sandwich
- 4.11. justinmk/vim-sneak
- 4.12. simeji/winresizer
- 4.13. skanehira/translate.vim
- 4.14. thinca/vim-visualstar
- 4.15. vim-scripts/ReplaceWithRegister
- 4.16. haya14busa/vim-asterisk
- 4.17. zefei/vim-wintabs
- 4.18. zefei/vim-wintabs-powerline
- 4.19. wellle/targets.vim
- 4.20. haya14busa/vim-edgemotion
- 4.21. vim-test/vim-test
- 4.22. kassio/neoterm
- 4.23. mg979/vim-visual-multi
- 4.24. xolox/vim-session
- 4.25. xolox/vim-misc
- 4.26. editorconfig/editorconfig-vim
- 4.27. dense-analysis/ale
- 4.28. lambdalisue/gina.vim
- 4.29. airblade/vim-gitgutter
連載
本記事は複数記事の連載記事の1つです。
プラグイン
プラグインは必ず入れる必要はありませんが、何か困ったとき「プラグインってどんな物があって何が出来るようになるのか」を大体知っていないと困ります。
すぐに試せるようにdeinの設定例も記載しておきます。
導入ポイント
プラグインのGitHubのトップページに紹介とインストール方法が載っているので読みましょう。
盲点なのが、GitHubのWikiページです。
用意してくれているプラグインも多く、詳細な設定方法やサンプルが確認できます。
プラグインインストール後には「:help」でプラグインの名前やコマンドを検索すれば、プラグイン作者が作ったヘルプが見られます。
情報量が最も多いので目的の内容を見つけるには時間が掛かる場合もありますが、ヘルプに載っている事は間違いないので地道に探すことが解決の近道です。
おすすめプラグイン
cespare/vim-toml
TOML形式のファイルのシンタックスハイライトを有効にします。
[[plugins]] repo = 'cespare/vim-toml'
vim-jp/vimdoc-ja
:help
で表示できる英語のヘルプを日本語化できます。
日本人は全員入れておけばOK
[[plugins]] repo = 'vim-jp/vimdoc-ja'
morhetz/gruvbox
昔から最も有名なカラーテーマで、見やすく目に優しいです。
[[plugins]] repo = 'morhetz/gruvbox' hook_add = ''' let g:gruvbox_contrast_dark = 'hard' '''
ayu-theme/ayu-vim
新しめの人気のカラーテーマで「Simple, Bright and Elegant (シンプル・鮮やか・上品)」です。
[[plugins]] repo = 'ayu-theme/ayu-vim'
nanotech/jellybeans.vim
お菓子のジェリービーンズのようなカラフルな配色ですが、暗く見やすさを忘れていません。
[[plugins]] repo = 'nanotech/jellybeans.vim'
machakann/vim-highlightedyank
ヤンクされた範囲がピカッとハイライトします。
[[plugins]] repo = 'machakann/vim-highlightedyank' hook_add = ''' let g:highlightedyank_highlight_duration = 150 '''
tpope/vim-commentary
gcでコメントアウトします。
テキストオブジェクトと組み合わせて使えるので、 現在行から2行コメントアウト gc2j
という使い方ができます。
[[plugins]] repo = 'tpope/vim-commentary'
[[plugins]] repo = 'tpope/vim-commentary'
easymotion/vim-easymotion
基本機能は、入力した文字が存在する場所にマーカーが表示されてジャンプします。
単語単位や行など移動方法は様々です。
[[plugins]] repo = 'easymotion/vim-easymotion' hook_add = ''' map <Leader>f <Plug>(easymotion-bd-f) nmap <Leader>f <Plug>(easymotion-overwin-f) map <Leader>/ <Plug>(easymotion-sn) omap <Leader>/ <Plug>(easymotion-tn) map <Leader>h <Plug>(easymotion-linebackward) map <Leader>l <Plug>(easymotion-lineforward) map <Leader>j <Plug>(easymotion-j) map <Leader>k <Plug>(easymotion-k) let g:EasyMotion_smartcase = 1 '''
hoob3rt/lualine.nvim
ステータス領域のカラーや表示する情報をカスタマイズできます。
この手のプラグインではairlineが有名(動作が重いとも)ですが、lualineは名前の通りLUA言語なので早いはず(未確認)です。
[[plugins]] repo='hoob3rt/lualine.nvim'
※.lua形式の設定例です。
local lualine = require('lualine') lualine.setup { options = { icons_enabled = true, theme = 'gruvbox_material', component_separators = {'', ''}, section_separators = {'', ''}, disabled_filetypes = {} }, sections = { lualine_a = {'mode'}, lualine_b = {'branch'}, lualine_c = { { 'filename', 'g:coc_status' } }, lualine_x = {'encoding', 'fileformat', 'filetype'}, lualine_y = {'progress'}, lualine_z = {'location'} }, inactive_sections = { lualine_a = {}, lualine_b = {}, lualine_c = {'filename'}, lualine_x = {'location'}, lualine_y = {}, lualine_z = {} }, tabline = {}, extensions = {} }
machakann/vim-sandwich
テキストオブジェクトで指定した範囲を任意の文字で囲います。
test => saiw) => (test)
test => 2saiw}) => ({test})
surroundという同じことが出来るプラグインがありますが、こちらの方が後発で多機能です。
[[plugins]] repo = 'machakann/vim-sandwich'
justinmk/vim-sneak
Vimは f
を押してから1キー入力すると、行内のその文字へジャンプできます。
sneakは s
を押してから2キーを入力すると、カーソル以降の2文字にマッチする場所へジャンプできます。
[[plugins]] repo = 'justinmk/vim-sneak' hook_add = ''' nmap s <Plug>Sneak_s nmap S <Plug>Sneak_S '''
simeji/winresizer
分割したウィンドウのサイズ変更や入れ替えをやりやすくするプラグインです。
[[plugins]] repo = 'simeji/winresizer' hook_add = ''' let g:winresizer_start_key = '<C-w><C-w>' '''
skanehira/translate.vim
文章の翻訳プラグインです。
英語→日本語だけではなく、反対の日本語→英語も可能なので命名時に役に立ちます。
翻訳結果をヤンクできるので便利です。
[[plugins]] repo = 'skanehira/translate.vim' hook_add = ''' nmap <leader>y <Plug>(Translate) vmap <leader>y <Plug>(VTranslate) nmap <leader>Y <cmd>Translate!<cr> vmap <leader>Y <cmd>VTranslate!<cr> '''
thinca/vim-visualstar
VisualModeで *
を押すとカーソル位置にある単語を検索できます。
[[plugins]] repo = 'thinca/vim-visualstar'
vim-scripts/ReplaceWithRegister
ヤンクした内容で置き換えたいと思ったことはありませんか?
テキストオブジェクトで指定した範囲をレジスタで置き換えます。
[[plugins]] repo = 'vim-scripts/ReplaceWithRegister'
haya14busa/vim-asterisk
*
で検索したとき、次の候補へ勝手に移動して欲しくないと思いませんか?
それを可能にするプラグインです。
[[plugins]] repo = 'haya14busa/vim-asterisk' hook_add = ''' map g* <Plug>(asterisk-z*) map g# <Plug>(asterisk-z#) map * <Plug>(asterisk-gz*) let g:asterisk#keeppos = 1 '''
zefei/vim-wintabs
開いているbufferをタブラインに表示するプラグインです。
タブごとに開いているbufferが管理されるため、非常に管理しやすくなります。
※Neovimのタブは一般のエディタの概念とは異なるため、そのうち解説を追加します。
[[plugins]] repo = 'zefei/vim-wintabs' hook_add = ''' map <C-n> <Plug>(wintabs_previous) map <C-p> <Plug>(wintabs_next) map <C-q> <Plug>(wintabs_close) map <C-T>u <Plug>(wintabs_undo) map <C-T><C-o> <Plug>(wintabs_only) '''
zefei/vim-wintabs-powerline
vim-wintabsのスタイルをairlineっぽくします。
[[plugins]] repo = 'zefei/vim-wintabs-powerline'
wellle/targets.vim
テキストオブジェクトを拡張します。
痒いところに手が届くようになるので、GitHubのデモをよく確認しましょう。
[[plugins]] repo = 'wellle/targets.vim'
haya14busa/vim-edgemotion
カーソルをエッジに移動できます。
Neovimは左右のカーソル移動には強いですが、上下は苦手です。
エッジに移動できると、それを補うことができます。
[[plugins]] repo = 'haya14busa/vim-edgemotion' hook_add = ''' map <M-j> <Plug>(edgemotion-j) map <M-k> <Plug>(edgemotion-k) '''
vim-test/vim-test
ユニットテストを実行するプラグインです。
大体の言語・テストプラグインに対応しており、それぞれで詳細な設定も可能です。
[[plugins]] repo = 'vim-test/vim-test' hook_add = ''' let g:test#php#phpunit#executable = 'vendor/bin/phpunit' nmap <silent> <leader>tn <cmd>update<cr><cmd>TestNearest -strategy=neoterm<CR> nmap <silent> <leader>tf <cmd>update<cr><cmd>TestFile -strategy=neoterm<CR> nmap <silent> <leader>ts <cmd>TestSuite -strategy=neoterm<CR> nmap <silent> <leader>tg <cmd>TestLast -strategy=neoterm<CR> '''
kassio/neoterm
Neovimには標準でターミナルが用意されていますが、毎回新しく開かれたりするなど若干使いづらい面があります。
高機能な拡張可能なターミナルプラグインです。
[[plugins]] repo = 'kassio/neoterm' hook_add = ''' let g:neoterm_autoinsert = 1 let g:neoterm_autoscroll = 1 nnoremap <leader>tl :<c-u>exec v:count.'Tclear'<cr> '''
mg979/vim-visual-multi
マルチカーソルを可能にします。
[[plugins]] repo = 'mg979/vim-visual-multi' hook_add = ''' let g:VM_maps = {} let g:VM_maps['Find Under'] = '<leader>n' let g:VM_maps["Select All"] = '<leader>a' '''
xolox/vim-session
セッションを保存・復元することでNeovimを開いた際に前回作業中の状態から再開できます。
[[plugins]] repo = 'xolox/vim-session' hook_add = ''' let g:session_autosave = 'yes' let g:session_autoload = 'yes' '''
xolox/vim-misc
vim-sessionが依存するため、インストールが必要です。
[[plugins]] [[plugins]] repo = 'xolox/vim-misc'
editorconfig/editorconfig-vim
EditorConfigがある場合、Neovimの設定に上書きします。
[[plugins]] [[plugins]] repo = 'editorconfig/editorconfig-vim'
dense-analysis/ale
LinterやFixerなど、言語ごとに設定して保存時等に自動実行します。
[[plugins]] repo = 'dense-analysis/ale' hook_add = ''' let g:ale_fixers = {} let g:ale_fixers['php'] = ['php_cs_fixer'] let g:ale_fix_on_save = 1 '''
lambdalisue/gina.vim
Git操作をNeovim内から実行できます。
statusやlogなどを見やすくウィンドウに表示してくれます。
[[plugins]] repo = 'lambdalisue/gina.vim' hook_add = ''' nmap <leader>gs <cmd>Gina status<cr> '''
airblade/vim-gitgutter
行番号の隣にGitの変更状態を表示したり、変更箇所へジャンプするコマンドを追加します。
[[plugins]] repo = 'airblade/vim-gitgutter' hook_add = ''' let g:gitgutter_map_keys = 0 nmap ]c <Plug>(GitGutterNextHunk) nmap [c <Plug>(GitGutterPrevHunk) '''
コメントを書く