それなりに整備されたNeoVimの環境構築ロードマップ
toridoriのfujitni soraです。
今年はRUNTEQにはたくさんお世話になったので、アドベントカレンダーに記事をお納めいたします。
自分が個人でも業務でも使っているNeoVimのdotfileを公開して、該当する環境に限りですがCloneして使えるようにReadmeを整備しました。
本記事で主要機能とざっくりの使い方を解説します。
詳細に関しては、NeoVim公式やPluginのDocumentを適宜参照してください。
なるべくリンクを載せるようにしています。
これなに?
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も日本語対応がないのでやめました
Readme
上記のReadmeにSetup手順が書いてあるので、1~10まで実行してください。
動かなかったら?
- ログを元にググってみてください。大体誰かがなおして記事にしてくれています
- 難しい場合は、neovimdotのリポジトリにIssueを作成し、descriptionを書いてfujitaniをアサインしておいてください。なるべく対応します
Base Config
base.luaに共通設定が入っているので、まず知っておくべき部分を解説します。
leader key
コマンドのキーバインドに利用できる、独自設定可能なキーです。この後の文章で<leader>
って書いてあるのはこれです。
base.luaの設定ではspaceが割り当てられています。
color schema
筆者は青系が好きなのでorbitalを使ってます。お気に入りの設定に変えてください。
色々なcolor schemaがまとまっているのがこのサイト
Lsp
nvim-lspconfig、補完はnvim-cmpで管理しています。
Lspのバージョン管理はMasonで行なっています。
使いたい言語に応じて必要なLsp, Dap, Linter等々を入れてください。
:Mason
cloneしたリポジトリは.luaなので、lua-language-serverをMason経由でinstallしておくと補完が効きます。
lua_lsがアクティブになっていることを確認
この後に紹介するPluginもそうですが、基本的にはGitHubや公式docに飛ばずともhelpコマンドで操作方法を確認できるようになっています。
読みましょう。
Masonのhelp <g?>
Filer
File操作をサポートするPluginです。
自分はoil.nvimをメインに使っています。
dotfileのキーバインドはここ
:Oil
oil.nvimはファイル一覧がNeoVimのバッファとして編集可能である為、ファイルの移動, 追加, Rename, 削除等と一つのバッファ内で行えるのがFilerとしての推しポイントです。
Fuzzy Finder
fzf-luaを使っています。
dotfile
前はtelescope.nvimを使っていて、設定は残しているので好みによってはこちらを
<Ctl + p>でfile検索
<Ctl + g>でテキスト検索
<Ctl + f>でfile内テキスト検索
Terminal
toggleterm.nvimを使ってます。
<Ctl + t>
でターミナルの開閉ができます。
詳しくはこっちの記事で書いているのでご参照ください。
Dap
nvim-dapでNeoVim内でのdebug mode環境を整え、使用する言語に応じてdap serverを入れて使用します。
画像は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で管理しています。
左から
- NeoVim mode
- dir / file name
- branch name
- file内でのカーソル位置
って感じの設定です。
設定ファイルはstatusline.luaで定義してあるので、必要な内容に修正してください
Git
Git連携は複数プラグイン使っているので一つずつ紹介
lazygit.nvim
TUIのGitClientです。
NeoVim内からでも使用できるようにlazygit.nvimを入れて使用します。
操作方法はhelp参照
diffview.nvim
diffの確認やmerge editorとして使用します。
簡単なGit操作も可能
gitsigns.nvim
主に3つの用途で使用しています。
変更行のマーカー
追加は緑、削除は赤でcommitしていない変更行を可視化してくれます。
左の線がそれ
ブラウザのGitHub該当行に飛ぶ
<leader * go>
でホバー中のコード位置に該当する GitHubのページに飛んでくれます。
コードのリンクをCopyして共有したい時や、ライブラリのコードリーディング時等々に便利です。
blame
<leader + gb>
でバッファから直接blameして最終変更者を確認できます。
copilot.vim
copilot.vimを使えばgithub copilotのコード予測が効くようになります。
プラグインはclone時点で入っているので、:PackerSync
後に下記記事の手順に沿ってSigninすると使えるようになります。
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