Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

この記事は 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"}="."'
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした