📑
neovim remote
TL; DR
- vscode (+ code-server) 的なことが neovim でもできる
- サーバー
nvim --listen ~/.cache/nvim/server.pipe --headless - クライアント
nvim --server ~/.cache/nvim/server.pipe --remote-ui
neovim remote
- neovim にはリモートと通信ができる機能がある
- https://neovim.io/doc/user/remote.html
- これを使って、リモートのneovimに対して操作が可能
- 例えば、
nvim --remote-send "<C-\><C-N>:n filename<CR>のようなことができる -
"<C-\><C-N>:n filename<CR>"のコマンドをリモートのneovimに送信する
- 例えば、
-
--headlessオプションと--listenオプションを組み合わせればサーバーのように起動できる-
--headlessUIなしで起動 -
--listen addressaddressで待ち受ける
-
-
--remote-uiオプションと--serverオプションで、クライアントとしてリモートのneovimに接続できる-
--remote-uiリモート側のUIを利用 -
--server addressaddressに接続する
-
-
addressには UNIXソケットやip:port形式が指定できる - これらを使うことで例えば、dockerコンテナの中のneovimにホストから接続できる
- VSCode の Remote Container (Dev Containers) に近いこと
dockerコンテナ内のneovimにホストのneovimから接続してみる
- dockerコンテナ内のneovimにホストのneovimから接続してみる
- 今回は、ポートを開けておいて、
ip:port指定で接続する
- 今回は、ポートを開けておいて、
- docker コンテナを立ち上げる
- このときポートを開けておく (今回は適当に
22222番)
- このときポートを開けておく (今回は適当に
docker run --rm -it -p 22222:22222 ubuntu:latest bash
- コンテナ内のbashが操作できるようになるのでneovimをダウンロードしていく
apt update -y && apt install -y curl
curl -LO https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.tar.gz
tar xzf nvim-linux64.tar.gz
# ./nvim-linux64/bin/nvim でneovimが起動できる
- コンテナ内でサーバーとしてneovimを起動
./nvim-linux64/bin/nvim --headless --listen 0.0.0.0:22222
- ホスト側でも stable のneovimをインストール (既にインストールされていたらスキップ)
- 別のターミナルでサーバーの (コンテナ内の) neovimに接続
nvim --remote-ui --server localhost:22222
- これで dockerコンテナ内のneovimに接続できた
- いろいろコマンド実行してみて、コンテナの中にいることを確認
-
:pwdしてみると/ -
:!whoami"してみるとroot
-
その他
- リモート側で実行していることになるので、
:termで開いたターミナルはリモート側のシェル (上記の例だとコンテナ内のシェル) - LSPもリモート側でインストールできる (バージョンの使い分けが上手くできそう)
- devcontainerと組み合わせると相性よさそう
- ホスト側で
--remote-uiしてるので、リモート側のUIを使っていそう (この点はVSCode + code-server の場合とは違いそう)
Discussion