🐱

それなりに整備されたNeoVimの環境構築ロードマップ

2024/12/15に公開

toridoriのfujitni soraです。
今年はRUNTEQにはたくさんお世話になったので、アドベントカレンダーに記事をお納めいたします。

自分が個人でも業務でも使っているNeoVimのdotfileを公開して、該当する環境に限りですがCloneして使えるようにReadmeを整備しました。
本記事で主要機能とざっくりの使い方を解説します。
詳細に関しては、NeoVim公式やPluginのDocumentを適宜参照してください。
なるべくリンクを載せるようにしています。
https://neovim.io/doc/

これなに?

NeoVimやってみたい層の開発者が、ある程度整備された設定リポジトリをcloneして、いつものコードベースをNeoVimで編集できるようになるまでのロードマップ, 機能解説です

Out Of Scope

自分のNeoVim環境と主要プラグインについて書く記事であり、Lua言語やPluginの詳細についてはあまり触れません。またの機会に。
環境構築の記事にしては用語を知っている前提の記事構成なので、概念の理解を先にやろうとするよりも、手元に動く環境を作ってみて触りながら覚えていくスタイルをお勧めします

環境

  • M2 Mac
  • brew
  • zsh
  • Iterm2

windowsはまだ今後対応します🙏
また、Readmeの「7. set need font」がIterm2前提の手順になっています。
手元で使用しているterminalでのNeed系アイコン設定に読み替えてください。
デフォルトのterminalを使用している方は、これを機にインストールしてもいいかも🤔

前はWeztermを使っていたが

明確な入力遅延を観測したのでIterm2に戻ってきました。Werpも日本語対応がないのでやめました
https://www.reddit.com/r/neovim/comments/18ttv87/wezterm_users_anyone_else_feel_input_delay_in/

Readme

https://github.com/fs0414/neovimdot/tree/main

上記のReadmeにSetup手順が書いてあるので、1~10まで実行してください。

動かなかったら?

  • ログを元にググってみてください。大体誰かがなおして記事にしてくれています
  • 難しい場合は、neovimdotのリポジトリにIssueを作成し、descriptionを書いてfujitaniをアサインしておいてください。なるべく対応します

Base Config

base.luaに共通設定が入っているので、まず知っておくべき部分を解説します。

leader key

コマンドのキーバインドに利用できる、独自設定可能なキーです。この後の文章で<leader>って書いてあるのはこれです。
base.luaの設定ではspaceが割り当てられています。
https://vim.blue/leader-key/

color schema

筆者は青系が好きなのでorbitalを使ってます。お気に入りの設定に変えてください。
https://github.com/fcpg/vim-orbital

色々なcolor schemaがまとまっているのがこのサイト
https://vimcolorschemes.com/olimorris/onedarkpro.nvim

Lsp

https://microsoft.github.io/language-server-protocol/
Lspの設定はnvim-lspconfig、補完はnvim-cmpで管理しています。
Lspのバージョン管理はMasonで行なっています。
https://github.com/williamboman/mason.nvim
使いたい言語に応じて必要なLsp, Dap, Linter等々を入れてください。

:Mason

cloneしたリポジトリは.luaなので、lua-language-serverをMason経由でinstallしておくと補完が効きます。
https://github.com/LuaLS/lua-language-server

lua_lsがアクティブになっていることを確認

この後に紹介するPluginもそうですが、基本的にはGitHubや公式docに飛ばずともhelpコマンドで操作方法を確認できるようになっています。
読みましょう。

Masonのhelp <g?>

Filer

File操作をサポートするPluginです。
自分はoil.nvimをメインに使っています。
https://github.com/stevearc/oil.nvim
dotfileのキーバインドはここ

:Oil

oil.nvimはファイル一覧がNeoVimのバッファとして編集可能である為、ファイルの移動, 追加, Rename, 削除等と一つのバッファ内で行えるのがFilerとしての推しポイントです。

Fuzzy Finder

fzf-luaを使っています。
https://github.com/ibhagwan/fzf-lua

dotfile
https://github.com/fs0414/neovimdot/blob/main/lua/plugin/fzf-lua-config.lua#L1

前はtelescope.nvimを使っていて、設定は残しているので好みによってはこちらを
https://github.com/fs0414/neovimdot/blob/main/lua/plugin/telescope-config.lua#L1


<Ctl + p>でfile検索


<Ctl + g>でテキスト検索


<Ctl + f>でfile内テキスト検索

Terminal

toggleterm.nvimを使ってます。
<Ctl + t>でターミナルの開閉ができます。

詳しくはこっちの記事で書いているのでご参照ください。
https://zenn.dev/toridori/articles/5ac8d3618c9009

Dap

https://microsoft.github.io/debug-adapter-protocol//

nvim-dapでNeoVim内でのdebug mode環境を整え、使用する言語に応じてdap serverを入れて使用します。
https://github.com/mfussenegger/nvim-dap

画像はGolangなのでdelveでのdebug mode起動時。

ざっくり使い方

  • break point
    • <leader + b>
  • dap exec
    • <F5>
  • step in
    • <F6>
  • step out
    • <F7>
  • debug console open
    • <leader + d>

StatusLine

バッファ下部に配置されているステータスラインの設定はlualine.nvimで管理しています。
https://github.com/nvim-lualine/lualine.nvim

左から

  • NeoVim mode
  • dir / file name
  • branch name
  • file内でのカーソル位置

って感じの設定です。
設定ファイルはstatusline.luaで定義してあるので、必要な内容に修正してください
https://github.com/fs0414/neovimdot/blob/main/lua/plugin/statusline.lua

Git

Git連携は複数プラグイン使っているので一つずつ紹介

lazygit.nvim

TUIのGitClientです。
NeoVim内からでも使用できるようにlazygit.nvimを入れて使用します。
https://github.com/kdheepak/lazygit.nvim


操作方法はhelp参照

diffview.nvim

diffの確認やmerge editorとして使用します。
簡単なGit操作も可能
https://github.com/sindrets/diffview.nvim

gitsigns.nvim

主に3つの用途で使用しています。

変更行のマーカー
追加は緑、削除は赤でcommitしていない変更行を可視化してくれます。

左の線がそれ

ブラウザのGitHub該当行に飛ぶ
<leader * go>でホバー中のコード位置に該当する GitHubのページに飛んでくれます。
コードのリンクをCopyして共有したい時や、ライブラリのコードリーディング時等々に便利です。

blame
<leader + gb>でバッファから直接blameして最終変更者を確認できます。

copilot.vim

copilot.vimを使えばgithub copilotのコード予測が効くようになります。
https://github.com/github/copilot.vim

プラグインはclone時点で入っているので、:PackerSync後に下記記事の手順に沿ってSigninすると使えるようになります。
https://zenn.dev/soramarjr/articles/71dedd33a4fea3

RubyOnRailsのSetup

Readmeの手順を実行した後の初期状態では、Lspが入っていないので補完は効きません。

Masonから、RubyのLspであるsolargraphと静的解析用のrubocopを入れておきましょう。

Vimコマンドでの:LspInfoで、.rbファイル内でsolargraphとrubocopのhealthcheckが通っていることを確認。
先に:LspRestartを実行するかNeoVimに入り直して、Lspを再起動しないと反映されないかもしれないのでご注意を。

ここまで成功すると、solargraphのコード補完を受けられるようになります。


さりげなくgitHub copilotも効いていますね

エラーメッセージも表示されます。

あとがき

これであなたもNeoVimユーザーの仲間入りです。たぶん

Zennは動画が貼れないので、実際の使用感とか速度が伝わっていないな...と思いながら書いていました。
ぜひ手元で動かしてみてください。
そのうち動画対応のメディアで書くか、ライブコーディングとかでNeoVim布教をします。たぶん

Discussion