🖥️

neovimの設定とpluginの見直し 2022年末

2022/12/31に公開

端末設定の見直しの続き。

2022年末にneovimの設定・pluginを一気に見直した。

少し前まで

  • Jetbrains IDE : 重い開発
  • neovim: 軽いエディタ

にして使い分けていたのだが、VSCode: 中間?も入ってきて棲み分け微妙だったので、もういっそneovimを中量級の開発に使えるようにしてしまう方針。

neovimを最新化

まずは最新のstable versionにする。基本。

不要なpluginとkey bindの削除

最近使っていないキーバインドとプラグインをまずは全部消す。基本2。
気がついたらneovim本体にmergeされていたpluginもあったり、もしくは更新が止まっていて動作しないものもあったので、使っているpluginは全部見直し。

True Color対応

ターミナル、tmuxに続きneovimもTrueColor対応する。
tmux上で起動し、基本は :checkhealth でtmux, TERM, TrueColor周りにエラーが出ないかを確認する。
ここでエラーが出るのであれば、端末設定の見直し でやったことに起因しているのでそちらで対応。

vimとしては下記をセット。

set termguicolors

フォントの設定

NerdFontを使うようにする。
ファイラーなどにアイコンを付けるため。

今回使うのはHack Nerd Font。これも 端末設定の見直し で設定したものと合わせる。

set guifont="Hack Nerd font"

ファイラー

インデント表示

status line / tab, buffer line

  • airlineを使っていたが、高速化・高機能を目指して移行。


Linterの導入

" ale warning/error時の表示
let g:ale_set_highlights = 1
let g:ale_sign_error = '✘'
let g:ale_sign_warning = '⚠'
" neovimのvirtual textでlintのメッセージを表示
let g:ale_virtualtext_cursor = 1

" Linterに引っかかった時のメッセージカスタム
let g:ale_echo_msg_error_str = 'E'
let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = '[%linter%] %s [%severity%] %code: %'

" location listでlintに引っかかっている一覧を見る
let g:ale_set_loclist = 1
let g:ale_set_quickfix = 0

syntax highlight

  • treesitter pluginを導入(今更!)
  • 言語ごとにplugin入れたり設定しなくても、だいたいこれ一つでサポートしてくれる。
  • このpluginと連携しているpluginも数多い。
  • 前述のindent-blanklineのcontext highlightもこれに依存した機能。

補完とLSP

Fuzzy Finder

  • telescope pluginを導入(今更!その2)。

  • ファイル探索、Grep、jumplist、vim command/historyなどいろいろなlistの探索・絞り込みに使える。

  • UIがfloating windowになっていてcool。

  • ripgrep, fdコマンドをinstallしておくと良い。OS Xならbrew installでOK。

brew install ripgrep fd
  • 絞り込みの結果を <C-q> でquickfix listに送れるのはとても便利。さらに後述のbqf pluginを使うといい。

quickfix listのpreview

  • quickfix listを便利に使える bfq plugin。カーソル上のquickfix listに対してpreviewが見られる。
  • telescopeの絞り込み結果をquickfix listに送った後、そのpreviewをこいつで見られるといろいろ捗る。
  • とりあえずpreviewが見られるだけで幸せになったが、他にも色々な使い方がある。

通知など

  • noice pluginを導入しようとして、一旦諦め。

    • https://github.com/folke/noice.nvim
    • setupする、通知が来る、といったアクションでかなりCPUを食っていたりcursorがちらついたりした。なぜ...
    • nightly buildの neovimにこのpluginだけを入れてもうまくいかない。現状解消する方法も見つからず。
  • noiceでやっていることを個別のpluginで代替してく。

    • 通知: notifier plugin
      • https://github.com/vigoux/notifier.nvim
      • 右下に通知メッセージが出る。
      • noice(notify plugin)のようなリッチなUIではないが、そもそもそんなに必要でもないのでこちらのほうがむしろいい。
    • vim command lineをfloating windowのUIにする: fine-cmdline plugin
    • betterな検索結果のハイライト: hlslens
      • https://github.com/kevinhwang91/nvim-hlslens
      • マッチした件数等がハイライトと同時に表示される。
      • ちょっと表示内容が多すぎる感もあるので、カーソルを外したらhideするようにcalm downにしている。下記コンフィグで(ここはlua...)
require('hlslens').setup({
    calm_down = true,
})
  • fine-cmdline

  • hlslens

Git連携

  • gitsigns pluginで行ごとの表示を高速に。
  • git clientはvimからはあまり行わず素のgitコマンドをターミナルから打っている。neogit pluginも考えたが保留。git statusを見て変更ファイルをvimで開くのが便利なのでfugitive pluginを継続して使っている程度。

floating window terminal

  • floaterm pluginを導入
  • neovimのterminalをfloating window上で起動できる。
  • これまでneovim terminalは編集中の一時作業に使っていた。 その時は新しいtabで開いたりsplitしていたりしたが、 新しいtabはtabをたくさん開いているとterminal閉じて編集に戻る時迷子になる (たくさん開くなや...)、 splitするとterminalとしては作業windowが小さい 、という悩みがあったっゆえ、これで解決。
  • toggleできるのでtmux popupより便利に感じる。類似の目的ならこちらをメインで使いそう。

set pumblend=10
set winblend=10

カラースキーム

  • 昔から使っているものがあまり更新されていなかったりもしたので、見直し。
  • telescopeやtreesitterなどのpluginに対応したhighlightができていると良い。
    • これらがお気に入り・気分で付け替えていて、特にmaterial (deep ocean)をメインで使っている。
    • material
    • moonify
    • aurora
    • tokyonight

Discussion