LoginSignup
9
9

More than 5 years have passed since last update.

Vim Advent Calendar 2013 117日目: sudoedit で Vim の多重起動を避ける

Last updated at Posted at 2014-03-26

この記事は Vim Advent Calendar 2013 117日目の記事になります。

最近、Vim の多重起動を避けるプラグイン、vim-singleton を使い始めたのですが、凄く便利ですね。

導入は簡単なので、作者の @thinca さんの「singleton.vim 作った - 永遠に未完成」をぜひご覧ください。

せっかく便利なので、sudoedit でも Vim の多重起動を避けよう!というのがこの記事の主旨です。

まず、vim-singleton には git commit -v 等で生成された一時ファイルを編集するために、サーバー側の Vim の編集が終わるまでクライアント側の Vim の終了を待機する、リモート編集という機能があります。

sudoedit でも git commit -v と同様に編集用の一時ファイルが生成されますので、リモート編集を使えばそれだけで解決しそうなのですが、一つ問題があります。

リモート編集するには対象の一時ファイルを、あらかじめ正規表現で指定しておかなければいけないのですが、sudoedit で編集する一時ファイルは正規表現では特定できないのです。

しかし、sudoedit は環境変数 SUDO_EDITOR で指定したエディタを使用しますので、ここで指定されたエディタが常にリモート編集機能を使うようにすれば何とかなりそうです。

そこで、@thinca さんに vim-singleton のリモート編集機能を強制する方法がないかお尋ねしたところ、

vim --cmd "let g:singleton#entrasuted_pattern='.'"

という方法を教えていただきました。

リモート編集する対象ファイルを全てのファイルにすることで、結果的にどのファイルを編集しても リモート編集になるわけですね。

ですが、これをそのまま、

export SUDO_EDITOR='vim --cmd "let g:singleton#entrust_pattern='\''.'\''"'

のように指定すると、sudoeditが "letg:singleton#entrust_pattern='.'" を2つの引数と解釈するために上手く動作しません。

そこで VimScript の変数名の展開を利用して、

export SUDO_EDITOR='vim --cmd let{"g:singleton#entrust_pattern"}="."'

と指定することで、無事リモート編集することができました。

なお、sudoedit はエディタの実行前にPATHを書き換えますので、システム標準以外の vim を利用する場合は、SUDO_EDITOR 内の vim をフルパスで指定するようにしてください。

sudo vim が許されるのは小学生まで」

と婆っちゃが言ってましたので、ぜひ sudoedit をご利用ください。

sudoeditvim-singleton を使う場合は、下記の環境変数を設定するだけです。

export SUDO_EDITOR='vim --cmd let{"g:singleton#entrust_pattern"}="."'
9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9