NeoVim を使うことで得られるものは?従来のエディタと比較しての利点は何か
以下の内容は多くの人が見ないかもしれないので、まずこの部分を書こうと思います。読んだ後に、設定するかどうかを決めてください。これは非常に長いが楽しめるプロセスであり、hjkl の横移動や多くのショートカットキーに慣れる必要があります。
Vim を使用する最大の利点は、マウスを使わずに済むことです。コードを書くときにマウスを使って位置を特定するために停止する時間がないため、より集中してコーディングできます。
次に、それは非常に速いです。起動時間は 100ms 以内で、メモリ使用量は非常に少なく、応答速度も非常に速いです。96G のメモリが足りないような IDE とは異なります。
プラグインの助けを借りることで、以下のよくある問題を迅速に解決できます。
- 選択範囲
VSC でブロックスコープのコードを一箇所から別の箇所に移動するには、マウスのドラッグを使う必要があります。しかし、NeoVim では Treesitter の increase selection を使用することで、数回Enter
を押すだけで済みます。
さらに、NeoVim + Treesitter は非常に多くの textobjects を提供しており、テキストオブジェクトの選択や削除、変更が非常に便利です。
- 括弧のペアを追加 / 変更 / 削除
VSC では一般的にどう操作するのか分かりませんが、私はマウスで選択し、キーボードでカットしてから括弧を追加し、再度ペーストします。これには多くの時間がかかります。しかし、NeoVim では mini-surround を使用します。
- 迅速な移動
VSC で現在のビューにキーワードが表示され、その場所にカーソルを移動して入力したい場合、マウスを使う必要があります。しかし、NeoVim では flash.nvim の機能を使用することで、例えばconsole.log
に移動してその行を削除することができます。
- コンテキストの迅速な移動
- あいまい検索
パスやファイル内容に基づいてあいまいに内容を検索することは、VSC ではできません。
前回の要約#
NeoVim(以下 nvim)に触れてから 3 年が経ちました。その頃は nvim 0.4.x で、半年以上経っても 0.5 の dev バージョンから 0.5 stable の到来を待っていました。
その頃、私はまだ Vue 2 を書いていて、nvim にはtelescope.nvimも nvim-lsp もありませんでした。YouCompleteMe の時代は終わっていましたが、nvim は依然として性能の優れた lsp を持っていませんでした。その時、私たちは皆coc.nvimを使用していました。これは NodeJS によって駆動される lsp で、NodeJS のランタイムと VSC と同じインターフェースを採用しているため、VSC のプラグインを coc に移植するのが非常に便利でした。しかし、coc の性能には懸念があり、coc のエコシステムの変化も早かったため、最終的には nvim を主要なエディタとして使用することを諦めました。
過去 2 年間で、nvim は lua の時代に突入しました。この期間中、私は時々nvim のコミュニティを見守り、面白いプラグインをいじっていましたが、元々の設定がほとんど VimScript であったため、lua に移行するのは非常に難しかったです。混在して使用することは可能ですが、懸念される起動速度や多くのショートカットキーはすでに忘れていました。
再びtheniceboyの動画を見て、nvim の設定を lua に移行した体験が私の心を刺激し、再び nvim の設定を始めました。そして今回は、元々の 1000 行以上の設定をすべてやり直しました。
始めに#
nvimを実行するためのターミナルエミュレーターとして使用します。kitty は波線をサポートし、性能が十分に速く、文字のレンダリングが iTerm2 よりも優れています。Alacritty と比べて設定が簡単です。また、そのアイコンも可愛いです。
nvim コミュニティは常に活発で、プラグインエコシステムも非常に大きいです。現在、コミュニティには以下のようなすぐに使える設定があります:
Blazing fast Neovim config providing solid defaults and a beautiful UI, enhancing your neovim experience.
スター数から見ると、AstroNvim が比較的多く、コミュニティが維持するプリセットプラグイン設定も多く、メイン設定とユーザー設定が分離されているため、後でメンテナンスがしやすく、心的負担も少ないです。初心者にはこれを直接使用することをお勧めし、プリセットのキー配置に慣れることができます。
注意すべきは、上記の各プリセットキー配置は異なるため、一度慣れてしまうと別のものに切り替えるのが難しいということです。自分に最も適したものを選ぶ必要があります。
私はLazyNvimを使用しています。
git clone https://github.com/LazyVim/starter ~/.config/nvim
rm -rf ~/.config/nvim/.git
インストールが完了したらすぐに使用できます。基本的な機能はすべて揃っており、lsp、telescope、treesitter も設定されています。その後、この動画を見て基本操作に慣れてください:
ここでは詳しくは言いませんが、いじりたくない人は自然とここまで来ないでしょうし、いじりたい人は公式ドキュメントを早く見に行くでしょう。こんなに長く話しても意味がないので、結局はチュートリアルではありません。
キー移動#
vim 党として、qwerty キーボードレイアウトでは、hjkl の移動は欠かせません。Hammerspoonを使用して、上下左右を<Caps-hjkl>
にマッピングしています。そうそう、私は今設定の中で CapsLock を Control キーに変更しています。Control も Control で、CapsLock は完全に廃止しました。
hjkl のマッピング設定は以下の通りです:
https://gist.github.com/Innei/695460015ba94e8d163d3665d707c6b4
よく使う設定の移行#
前述の通り、私は以前 1000 行以上の設定がありましたが、今回は最初からやり直しましたが、いくつかの設定はやはり必要です。
現在、以下の options を設定しました。他は LazyNvim のデフォルト値を使用しています。
local opt = vim.opt
opt.clipboard = "unnamedplus"
opt.wrap = true
opt.clipboard = ""
opt.spelllang = "en,cjk"
-- vim.opt.spell = true
opt.spelloptions = "camel"
opt.scrolloff = 5
opt.indentexpr = ""
opt.foldmethod = "indent"
opt.foldlevel = 99
opt.foldenable = true
opt.foldlevelstart = 99
コード折りたたみを有効にし、システムクリップボードの同期を無効にし、コードが超えた場合に改行を有効にし、カーソルが底から 5 行離れるようにしました。それ以外は特にありません。
次に、いくつかの一般的な keymap を設定しました。;から:への移動は非常に便利です。yから+"y
への移動は、yだけがシステムクリップボードにコピーされるようにします。 から<C-g>u
への移動は非常に特別で、nvim の入力モードでの undo 範囲が広すぎる問題を解決します。このようにして、1 つのスペースが記憶ポイントとして機能します。同様に、=も設定できます。
https://github.com/Innei/nvim-config-lua/blob/main/lua/config/keymaps.lua
上記には kitty 用のいくつかの keymap もあります。kitty を使用する際、nvim 専用の文字マッピングを行うことができます。例えば、私は kitty で nvim 内で⌘Pの組み合わせを押すと、⌥Pの文字列を送信するように設定しました。その後、nvim で<M-p>
の keymap を:Telescope fd
に設定することで、VSC の⌘Pのようにすることができます。
他にも⌘, S, ⌘, D, ⌘ C, ⌘, Xなどを設定しました。
https://github.com/Innei/dotfiles/blob/master/tag-base/config/kitty/keymap.py
(このアイデアはsxyaziから得たものです)
プラグインの共有#
プラグインは nvim を主要なエディタとして使用する際の第一の生産性です。LazyNvim に付属しているものは特にお勧めしません。みんなが使っているので、デフォルトで問題ありません。
better-escape.nvim#
jk の後の文字待機を排除できます。使えますが、必須ではありません。
fedepujol/move.nvim#
選択範囲をブロック単位で移動できます。
LunarVim/bigfile.nvim#
大きなファイルの処理を高速化できます。しかし、私は大きなファイルを開くには VSC を使用することをお勧めします。現在のところ、大きなファイルのサポートが最も良く、開く速度も最も速く、最もスムーズです。
dstein64/nvim-scrollview#
nvim の右側にスクロールバーインジケーターを追加できます。
AndrewRadev/switch.vim#
false
とtrue
の間を簡単に切り替えられます。
Wansmer/treesj#
ast に基づいて複数行のスコープを 1 行にまとめたり、その逆を行ったりできます。非常に便利です。
mbbill/undotree#
あまり使ったことはありませんが、重要な時に非常に役立ちます。undo 履歴を遡ることができます。
gbprod/yanky.nvim#
クリップボードの履歴を記録します。
Eandrju/cellular-automaton.nvim#
特に役に立たないものですが、ただ楽しむためのものです。
コードの雨を降らせます。
Bekaboo/dropbar.nvim#
VSC のパンくずナビゲーションに似ています。nvim > 0.10 が必要です。
この記事はMix Spaceによって xLog に同期更新されました。原文リンクはhttps://innei.in/posts/Z-Turn/nvim-lua-config-init