📌

Neovim で開くファイルを一つのインスタンスにまとめる

2024/06/25に公開

Vim には vim-singleton という素晴らしいプラグインがあります。これを使うと vim コマンドで開くファイルをすべて一つの Vim のインスタンスにまとめることができます:

# Vim が起動していない状況を想定する。
$ vim hoge.md # 初回なので Vim が立ち上がって hoge.md が開く。
$ vim piyo.md # すでに開いている Vim があるので、そのウィンドウで piyo.md が開く。

Neovim でも似たようなことをしたかったのですが、vim-singleton は動きませんでした。Neovim 本体の機能としてリモート接続機能があったので、これを使って以下のようなコマンドを .zshrc に生やしたところうまく行きました:

function nvim(){
  if [ "$#" -eq 0 ]; then
    /usr/bin/nvim
  else
    socket=$(ls /run/user/1000/nvim.* | head -1)
    if [ "${socket}" = "" ]; then
      /usr/bin/nvim "$@"
    else
      /usr/bin/nvim --server ${socket} --remote-send "<C-\\><C-N>:n $(realpath $1 | sed -r "s/( |\"|')/\\\\\\1/g")<CR>" > /dev/null
    fi
  fi
}

かなりやっつけのスクリプトですが、とりあえず動いています。

Discussion