neovimの設定とpluginの見直し 2022年末
端末設定の見直しの続き。
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"
ファイラー
-
Nerdtree -> Fernに移行。
-
体感でもNerdtreeより高速に動作する。
-
Nerdfontによるアイコンとカラーリングのpluginを入れた際、Nerdtreeが重くなりすぎたのでFernにした。
-
デフォルトでシステム標準のアプリで開くアクションのキーバインド
x
があるのはpdfや画像に対して地味に便利。 -
Wikiに便利な設定集があるので、startup時にdrawerで起動などをやっておくと便利。
-
Nerdtree風のkey bindも書いてくれているのが嬉しいけど、基本はfernデフォルトに従いたいので一部だけセット。
インデント表示
- indentLine pluginからindent-blanklineに移行。
- https://github.com/lukas-reineke/indent-blankline.nvim
-
With context indent highlighted by treesitter
の設定でtreesitterと連携したハイライトが良い感じ。
status line / tab, buffer line
- airlineを使っていたが、高速化・高機能を目指して移行。
- statusはlualineへ。見た目もすっきり。
- buffer/tabはbuffer lineへ。
- https://github.com/akinsho/bufferline.nvim
- buffer lineはtab modeで使っている。bufferではなく、tabのみ表示する。
- 何気に☓アイコンをクリックしても閉じられるなど、見た目も機能も本当に素晴らしい。
Linterの導入
- ALE(Asynchronous Lint Engine)
- warning, errorのアイコンやlocation listを使ったエラー一覧などを設定して使っている。
" 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
- ここは少し前から使っていたCoC pluginで。
- LSPの設定例が豊富で設定も簡単なので、Language Serverとつなげる。
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
- https://github.com/VonHeikemen/fine-cmdline.nvim
- 左下に目を動かさなくても良いのが嬉しい。
- betterな検索結果のハイライト: hlslens
- https://github.com/kevinhwang91/nvim-hlslens
- マッチした件数等がハイライトと同時に表示される。
- ちょっと表示内容が多すぎる感もあるので、カーソルを外したらhideするようにcalm downにしている。下記コンフィグで(ここはlua...)
- 通知: notifier plugin
require('hlslens').setup({
calm_down = true,
})
- fine-cmdline
- hlslens
Git連携
- gitsigns pluginで行ごとの表示を高速に。
- https://github.com/lewis6991/gitsigns.nvim
- diffを見る際にnvim -dでの比較ができるなどのkeybindが便利。
- 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より便利に感じる。類似の目的ならこちらをメインで使いそう。
popup menuとfloating windowの透明度
- これまで多くのfloating window ベースのUIや補完メニューのpluginを入れてきたが、各windowを透明化できる。
- こちらを参考にさせていただきました。 【Neovim】半透明色のウィンドウが開けるようになりました
set pumblend=10
set winblend=10
カラースキーム
- 昔から使っているものがあまり更新されていなかったりもしたので、見直し。
- telescopeやtreesitterなどのpluginに対応したhighlightができていると良い。
- これらがお気に入り・気分で付け替えていて、特にmaterial (deep ocean)をメインで使っている。
- material
- moonify
- aurora
- tokyonight
Discussion