feature image

2024年9月2日 | ブログ記事

にわかでもNeovimはできる!

この記事は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でいいと思います。

特徴:

欠点:

上に書いたように、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 さんの記事が出るらしいです。楽しみ〜〜!!

zoi_dayo icon
この記事を書いた人
zoi_dayo

24B 競プロやWebをちょびっとやったりしていた

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2024年9月17日
1か月でゲームを作った #BlueLINE
Komichi icon Komichi
2024年8月21日
【最新版 / 入門】JUCEを使ってVSTプラグインを作ろう!!!!【WebView UI】
kashiwade icon kashiwade
2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2022年9月26日
競プロしかシラン人間が web アプリ QK Judge を作った話
tqk icon tqk
2022年9月16日
5日でゲームを作った #tararira
Komichi icon Komichi
2024年8月29日
クロスコンパイルRust
H1rono_K icon H1rono_K
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記