Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

この記事は 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"}="."'

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>