📑
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
オプションを組み合わせればサーバーのように起動できる-
--headless
UIなしで起動 -
--listen address
address
で待ち受ける
-
-
--remote-ui
オプションと--server
オプションで、クライアントとしてリモートのneovimに接続できる-
--remote-ui
リモート側のUIを利用 -
--server address
address
に接続する
-
-
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