この記事は2024夏のブログリレー15日目の記事です。
こんにちは。24Bの @zoi_dayo です。traPではSysAd、Algo、CTF、Kaggle班に所属しています。ここ1~2年くらいメインエディタとしてNeovimを使っているので、この記事ではNeovimとかそのプラグインの紹介をします。
細々と使ってるだけで機能に関してはにわかなので、高度なテキスト編集とかの話は他の記事様に任せます。
Vim・Neovimってなんですか
Vim・NeovimはCUIで動くテキストエディタです。
NeovimはVimとほぼ同じ(Vimのfork)ですが、設定をluaで書けるようになっていたり、Neovimのみ対応のプラグインもあるので、とりあえずNeovimでいいと思います。
特徴:
- CUI
- 複雑なテキスト編集が得意らしい
- めちゃくちゃ細かい設定ができる
- 大量のプラグインが公開されてる & 自分で作れる
- キーボードだけで操作できる
- なんか黒い画面でかっこいい(重要)
欠点:
- ショートカットが特殊で覚えにくい
- 設定をいろいろ変えないと使いやすくならない
上に書いたように、Vimは「操作のクセが強い」「大量の設定をしないとあまり使えない」という特徴から、使い始めるためのハードルがかなり高いです。でも、最低限の操作を覚えれば使い始めることはできますし、設定すればVSCodeくらいのことはできるようになるので、コンフィグ盆栽と黒い画面が好きな人には向いていると思います。あと、ssh先でも全く同じように使えるというのは嬉しいです。
使ってみよう
公式ドキュメントを見てインストールしましょう。その後、nvim
コマンドで変な画面が立ち上がればインストール成功です。
モード
nvim (ファイル名)
コマンドでテキストファイルを開くことができます。さて、このままではこの変な画面を閉じることすらできません。しかも、テキストエディタなのに文字の入力すらできません。なんということでしょう!
Vimにはいくつかモードがあり、それを切り替えて操作します。最初は、「NORMAL」「COMMAND」「INSERT」「VISUAL」だけ知っておけばいいでしょう。現在のモードは左下に表示されます。(何もなければノーマルモードです)
ESC
キーを押すことでノーマルモードへ移動することができます。このモードではコマンドを打ったりカーソルを移動できたりします。普通ですね。ただし、通常カーソルは矢印キーで移動させるのではなく、HJKLのキーで動かします。横に並んでいて非常に使いにくく思えますが、ホームポジションに近いので慣れると結構使えます。
この状態で:
を押すと、画面の下の方にコロンが打たれるはずです。これがコマンドモードです。Vimのコマンドはすべて:
から始まります。マインクラフトの/
と思ってもらえればよいでしょうか?:w
で保存(上書き)、:q
で終了、:wq
で保存して終了、:q!
で保存せずに終了、:e (ファイル名)
でファイルを開く、:new
で新規ファイル編集です。最低限これだけ覚えておけばなんとかなります。あとの細かいコマンドは必要になってから調べましょう。:split
で画面分割できるなど、めちゃくちゃいっぱいあります。
ESC
で一度ノーマルモードへ移動し、i
キーを押してみましょう。カーソルがブロックから線になったのではないでしょうか? (ターミナルによるかもしれません)
これがインサートモードです。普通のテキストエディタのように入力ができます。一番使い方がわかりやすいモードです。
何かしら文章を入れたあと、ノーマルモードに戻ってv
を押すとビジュアルモードに移動できます。カーソルを動かすといい感じに範囲選択されます。
操作
インサートモードは普通のエディタみたいに使えてよいのですが、ノーマルモードやビジュアルモードではいろいろなショートカットが使えます。
たとえば、x
で一文字消去、dd
で一行消去、範囲選択後にd
で範囲消去などができます。さらに、di(
とするとdelete in (
の意味になり、()
で囲まれた内側だけをきれいに消すことができます。100x
みたいに打つとxを100回繰り返してくれる、みたいな機能もあります。
コピペ関係では、yy
で一行コピー、または範囲選択後にy
で範囲コピーができます。コピーのことをyankと読んでいるのでyらしいです。ペーストはp
です。
他にもページ単位スクロールとか、対応括弧ジャンプとか、先頭/末尾ジャンプとかいろいろあって便利なんですが、これも使いたくなったときに調べていけばよいです。
設定
さて、問題の設定です。設定しないとまあまあ使いにくいので頑張らないといけません。Vimであれば~/.vimrc
、Neovimであれば~/.config/nvim/init.lua
というファイルを作り、ここに書いていくことになります。
.vimrc
はVim script、init.lua
はLuaで書きます。ここではLuaの例だけ紹介します。
これまた設定が多すぎて全部は紹介できないのですが、普通のエディタっぽく使うなら以下の設定はしておいたほうがいい気がします。
-- バックアップ・スワップファイルを作らない
vim.opt.backup = false
vim.opt.swapfile = false
-- 行番号の表示
vim.opt.number = true
-- 検索を使いやすくする
vim.opt.incsearch = true
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.opt.hlsearch = true
-- クリップボードを他のアプリと共有
vim.opt.clipboard = "unnamedplus"
-- マウス対応
vim.opt.mouse = "a"
-- 行末で→で次の行へ行ける、など
vim.opt.whichwrap = "b,s,h,l,<,>,[,],~"
-- 行末にiで入れるよう、一文字だけはみ出して移動できるようにする
vim.opt.virtualtext = "onemore"
プラグイン
さて、ここまで読んだだけだとただ使いにくいエディタにしか見えないはずです。実際、デフォルトだと見た目もあんまりよくないし、わざわざ使う理由がないです。しかし、有能プラグインが大量に公開されているので、これをいれると見た目と機能がいい感じになります。おすすめプラグインをいくつか紹介してみます。(ただし、ここで紹介しているものは全部Neovim専用です。Vim用の似たプラグインはあるはずなので探してみましょう)
lazy.nvim
これからVimに大量のプラグインを入れていくわけですが、単にプラグインをダウンロードして配置するだけではプラグインのアップデートについていくことができません。そのため、プラグインのダウンロードや管理をしてくれるプラグインマネージャがいくつも開発されています。lazy.nvimは、設定が結構書きやすくて、:Mason
で呼び出せるいい感じのUIも提供されているので、初心者でもなんとかなると思います。
lualine.nvim
デフォルトのVimは見た目がかなりシンプルで、ほぼ色もついていないのであまりかっこよくないです。カスタマイズされたVimの画像をネットで調べてみると、たいていINSERTとか表示される行が色付きでいい感じの見た目になっていると思います。この部分を簡単にカスタマイズできるのがこのプラグインです。とりあえず入れましょう。ちなみに、CUIなのですべての表示は文字で表現されているのですが、斜め線とか曲線とか、どう見ても文字ではなさそうなものが使われている場合があります。これを再現するには、Nerd Fontsという専用のアイコンフォントみたいなものをターミナル側のフォント設定から読み込ませる必要があります。
nightfox.nvim
Vimのカラーテーマです。デフォルトのものは原色すぎてあまり見やすくないので、何かしらのカラーテーマを入れましょう。個人的にはnightfoxとかicebergあたりが好きですが、このサイトに色々あるので見てみてください。
indent-brankline.nvim
インデントに縦線を引いて可視化してくれます。ちょっと便利。
nvim-treesitter
ソースコードをちゃんと構文解析して、デフォルトより細かく色をつけてくれます。カラフルになるのでよいです。
LSP関係(nvim-lspconfig, mason.nvim, mason-lspconfig.nvim)
フォーマッタやリンタを動かしてエラーを出してくれます。VSCodeと同じ仕組みらしいです。これのおかげで高機能メモ帳を脱却し、VSCode程度まで進化できます。ちゃんと定義ジャンプとかもできてとてもうれしいです。
nvim-cmp
補完ウィンドウをいい感じに出してくれるプラグインです。LSPとつなげることで最強になります。設定すればスニペット展開やファイルパス補完、Vimコマンドの補完もできます。
copilot.lua
みんな大好きGitHub CopilotはVimでも使えます。爆速でコードを書きたいときにめっちゃ便利です。学生はGitHub Copilotが無料で使えるので、試したことない人はぜひやってみましょう。
telescope.nvim
いい感じの検索ウィンドウを提供してくれます。あいまい検索(連続文字列として含まれなくてもヒットする)ができるので便利です。いい感じに設定することで、単にファイル内検索だけではなく履歴検索やフォルダ内検索などなんでもできます。
nvim-tree.lua
シンプルなファイルブラウザを追加してくれます。VSCodeみたいに左にちょこっと出しておくことができ、便利です。
Comment.nvim
Ctrl + /でいい感じにコメントの切り替えができるようにします。
まとめ
Vim/Neovim、CUIで古臭い感じがしますがまあまあ便利です。マウスがいらないので操作が楽ですし、コンフィグいじりとプラグイン探しが大好きな人にはめちゃくちゃオススメです。ノーマルモードとインサートモード、あと保存と終了を覚えれば最低限使うことができますし、全部乗せの完成済み設定ファイルなどもいくつか公開されているので、気軽に触ってみましょう。
明日は @Naru820 さんの記事が出るらしいです。楽しみ〜〜!!