[第7回] Neovimのすゝめ – おすすめプラグイン

[第7回] Neovimのすゝめ – おすすめプラグイン

連載

本記事は複数記事の連載記事の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)
'''

Neovimのすゝめカテゴリの最新記事