始めに
neovimをメインエディタにして1年を過ぎました
VSCodeの一人勝ち状態が続いていて、The AI Code Editorを名乗るCursorやThe editor for what's nextを名乗る Zed、A post-modern text editor.を名乗るHelix、A Community-led Hyper-Hackable Text Editorを名乗るAtom後継のPULSAR等、魅力的な選択肢があり、IntelliJ IDEAやVisual Studio、Eclipse、Apache NetBeansと言ったIDE等々色んな選択肢がありますが、今のところneovimから乗り換える予定はありません
そこで、何故そんなにneovimに愛着を感じているのかを考えてみました
軽い
- 起動に150msecしか必要としません
- 思いついた時に起動して、すぐに行動に移れます
- 速いのは正義です
やりたい事がすぐに出来る
コードを書いていて、エディタに包含されているターミナルを開きたくなった時に、開き方をネットで調べていませんか?
画面を分割したくなった時はどうでしょう?メニューを探していませんか?
(neo)vimなら、キーを2つ3つ叩けば出来ます
自分で設定するせいか、すぐにキーを思い出せます
これって結構大きくて、フロー状態をずっとキープ出来るんですよね
エディタが成長する
素の(neo)vimって編集しか出来ません
自分の欲しい機能をひとつひとつ積み上げて、自分だけの環境を作成するのが楽しいですね。またひとつ強くなった的な
自分でセットアップしたので使いたい時に使いたい機能が使えるのは大きいです
今のプログラム用エディタって一通りの機能が揃っていますが、メニュー見てもどんな機能か分からなかったり、ファイルをコピーするのにファイラを開いたりと、逆にエディタに使われていませんか?
相談先がある
vim-jpってslackがありまして、vimは勿論、emacsやgolang, kosodateチャネルやjopboardまであります
generalチャネルで4100人を越えていました
ラジオもあります
プラグインの相談をすると、作者さんから直接アドバイスを頂くシーンも見たことあります
私の説明よりもTOMOYAさんのブログを見た方が早いかも知れません
エンジニアの楽園 vim-jp
お世話になっているプラグインの紹介(1部)
私の開発を支えてくれているプラグイン達です
ファイラー
mini.files
左カラムに常駐させず、必要な時のみ呼び出すスタイルです
ファイル操作がvimと同じでファイラ画面をファイル名を変更して、=で確定すると、実際のファイルもリネーム出来ます
フローティングに対応しているmini.filesを愛用しています
同様のファイラーだとoil.nvimが有名ですが、私の環境では起動が何故か遅く、瞬時に起動するこちらを使っています
下のマッピングで大分使い易くなりました
mappings = {
go_in = '<CR>',
go_in_plus = 'J',
go_out = '<BS>',
reset = 'R',
},
windows = {
preview = true,
}
ファジーファインダー
telescope.nvim
一覧からインクリメンタルで絞り込めるユーティリティです
主にBufferの切り替えに使っています
ファイル関係プラグイン
smart-open
上記のpluginです
直近開いたファイルの一覧を表示してくれ、インクリメンタルで検索できます
ターミナル関係
toggleterm.nvim
vim内にターミナルを表示してくれます
今はもっぱらFloatingで表示していますが、Windowに表示したい場合もあるのでキーバインドを検討しています
自動補完
blink.cmp
定番は nvim-cmp になるかと思います
長い間使っていましたが、何かのタイミングで候補が表示されなくなるので、blink.cmpの開発が進んで、ある程度の設定がサポートされたタイミングでこちらに乗り替えました
今のところ、問題なく使えています
日本語入力
skkeleton
SKKユーザーですので自ずとこちらに
OS側はMacSKKを使っています
時々、OS側のIMEを使っているのか、skkeletonのIMEを使っているのか分からなくなりますw
カーソル移動
flash.nvim
移動したいワードの先頭の文字をタイプすると該当箇所にラベルが貼られ、タイプを進めるごとに選択肢が絞られていきます
希望するワードのところに数回のキーで移動出来るのは快適です
下は「bl」までタイプしたところです。後は移動したいところのキー(f, g, k, q, t)を打てば移動できます
window移動
nvim-window
私の使い方だと精々左右に2分割ぐらいですが、その状況だと「,」 と 左Windowなら「a」右Windowなら「b」で移動出来ます
vim.keymap.set("n", ",", ":lua require('nvim-window').pick()<CR>", { noremap = true })
編集系
vim-sandwich
テキストオブジェクト のプラグインです
単語を囲んでいる両方の「"」を「'」に変換出来たりします
無論「[aWord]」を「(aWord)」とかも出来ます
これが決まると気持ち良いです
docmentにありますが、下の設定を入れると思うように動くようになりました
vim.keymap.set({ 'n', 'x' }, 's', '<NOP>')
お知らせ系コマンド系
Noice (Nice, Noise, Notice)
vimというと画面の一番下にコマンド行が表示されますが、これを画面中央で表示してくれるプラグインです
画面右上にカラフルなポップアップでお知らせもしてくれます
検索補助
ファイル内の検索文字列に一致するリストを表示してくれます
ファジーファインダーは上記のtelescopeを使っているのですが、今編集しているファイルのみの検索をサポートしているのはこのプラグインのみ(BLines)のようです
vim-jp slackでtelescopeのcurrent_buffer_fuzzy_findが対応していると思えて頂きました
yuys13さん、ありがとうございました
開発系
lspsaga.nvim
下の機能を提供してくれます
使っているのは、1, 4, 6, 11ぐらいですね
それでも快適なプログラミング環境を提供してくれます
- Breadcrumbs
- Callhierarchy
- Code Action
- Definition
- Diagnostic
- Finder
- Float Terminal
- Hover
- Implement
- LightBulb
- Outline
- Rename
- Ui Beacon
今後やりたい事
testの実行をもっと早く
一番多く使っているのは、pythonなんですが、pytestの起動に(vim内で)Terminalを起動して、↑を押して前回コマンドを呼び出して実行すると2アクションかかっています
vim-testやquickrunから実行できれば1アクションで済みますので、是非実現したいですのですが、pytest.iniは見つけてくれるのですが、実際のテストの抽出が上手くいかず、0テストを実行しました的な結果が返っています
設定ファイルの整理
思いつくままに記載しているので、結構あちこちに分散しています
コメントアウトして放置なのも多々あります
text-objectをもっと身近に
まだ脳内リンクが完成していません
vimレベルの向上
まだまだカーソルキーに触れている時間もあるので、下の記事レベルぐらいにはなりたいですね
中級 Vim 操作