NeovimからLazygitを開いて、LazygitからNeovimを開く
LazygitというGitクライアントを知っていますか?
「出典:Lazygit」
このような感じでスーパーハカー感の溢れるTUIツールです。
ドヤ顔でTUIツールを操作することで、技術力を雰囲気でカヴァーすることが出来るようになります!
toggleterm.nvim
LazygitをNeovimから開けるようにすることで、ソースコードの編集中にシームレスにGitの操作を行うことができます。
これを行うためのlazygit.nvimというプラグインも存在します。lazygit.nvimを利用したい場合はこちらを参考にしてください。(「Using neovim-remote」の辺り)
「出典: toggleterm.nvim」
自分はLazygitに限らず、他のツールもNeovimから操作したいと考えたので、toggleterm.nvimというプラグインを利用してインテグレーションを作成しました。toggleterm.nvimの設定は次の記事が参考になりました。
ただ、一つ気に入らない点がありました。
NeovimからLazygitを開いて、ファイル一覧から e
で編集しようとすると、次のようにNeovimがネストしてしまうのです。
Lazygitに設定を加えることで、この問題を解決できます。
neovim remote
実はNeovimにはリモート操作機能が存在します。
実行中のNeovimに対して、外部からコマンドを送信したり、特定のファイルを開くように指示を出すことができます。
次の例では左側で起動しているNeovimを、右側のシェルからインサートモードにしてHelloWorldを入力させています。
この機能を用いてLazygitとNeovimを連携させることができます。
設定ファイルの編集
Lazygitの設定ファイルを編集しましょう。
Macの場合、Lazygitの設定ファイルはデフォルトで ~/Library/Application\ Support/lazygit/config.yml
に存在します。自分はパスを変更して ~/.config/lazygit/config.yml
にしています。
詳細は次のページを確認してください。
nvim-remote用にプリセットが用意されているので、これを用いて次のように設定ファイルを記載します。
os:
editPreset: "nvim-remote"
上記のプリセットを設定することで、Lazygitからファイルを編集する際に裏では次のようなコマンドが実行されています。
[ -z "$NVIM" ] && (nvim -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{filename}})
Neovim内のTerminalには $NVIM
という環境変数にNeovimのサーバーを一意に表すアドレスがセットされています。
これを利用して、Neovimの中からLazygitを開いていたら q
でLazygitを閉じて、親のNeovimに選択されたファイルを新規タブで開かせています。
動作確認
良好な親子関係ですね。これで、NeovimとLazygitの間を行き来しやすくなりました。
このようにRemote機能を利用することで、他にもNeovimの設定の幅が広がりそうです。
Discussion