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

Vim プラグイン開発の Tips

$
0
0

プラグイン開発が盛んなエディタの一つに Vim がある。

筆者も拙劣ながら2つほどリリースした。

前者はシェルコマンドを Vim script で関数定義してエミュレートしたものだ。Vim に最適化されているため、system()!cmdするよりも便利になっている。後者は、それを応用したもので :cdするたびに :Lsするようにしたプラグインだ。

さて、宣伝はここまでにして、Vim プラグインを作成するとき、普段と同じ環境(つまり同じ .vimrcを使用し、普段通りのプラグインを読み込んでいる状態)で作っていると何かと弊害が起こりがちである。Vim の動作も安定しない。またプラグイン作成を一時中断して、他のタスクを処理するために Vim を使うとなると、開発中のプラグインが作業に干渉したりして不便な状態を強いられることが多い。

ここらへんをどう処理しているか、アマチュア Vim プラグイン開発者にとって凄く気になるところだけれど、意外とノウハウは公開されていない(おそらく有名所だと @thincaさんくらい)。

Vim プラグインの開発スタイル

筆者の場合、手探りながらも個人的には満足できるスタイルが確立できたので紹介することにした。

開発スタイルの落とし所としてはこうだ。

  • .vimrcは普段通りのものを使いたい
    • 開発するときに読み込む .vimrcを作るのは面倒だし、それを読み込ませた Vim を起動するのはもっと面倒だ
    • それに普段の使い勝手(コマンドやキーバインド)を失いたくない
  • 開発中は余計な操作を強いられずに、.vimrcを制限したい
    • 作成中のプラグインの機能を逐一確かめるために、既存 Vim プラグインは読み込まない
    • その制限をシームレスに息を吸うかのごとく設けたい

そこで、.vimrcの冒頭に

lets:true  =1lets:false =0lets:vimrc_plugin_on =get(g:,'vimrc_plugin_on',s:true)if len(findfile(".development.vim",".;"))>0lets:vimrc_plugin_on =s:false
  setruntimepath&
  for plug in split(glob(getcwd() . "/*"),'\n')
    execute 'set runtimepath+=' . plug
  endforendif

を記述する。

やっていることは至って単純で、.development.vimが置かれたディレクトリ配下はすべて s:vimrc_plugin_onfalseに制限する。もちろんデフォルトは trueだ。

そして、.vimrcにあるプラグインの設定を記述している箇所に、

if has('vim_starting')&& isdirectory($NEOBUNDLEPATH)+ifs:vimrc_plugin_on ==s:true
     setruntimepath+=$NEOBUNDLEPATH
+endifendif

上記の if文を加える。これによって読み込むプラグインの置かれたディレクトリを操作している。

たったこれだけで Vim の様相は大きく変わる。g:vimrc_plugin_ontrueだと、今までどおりの Vim だけれど、falseになると .development.vimが置かれたディレクトリにあるディレクトリしかプラグインと認識されないからだ。

  • g:vimrc_plugin_on == s:true

    true.png

  • g:vimrc_plugin_on == s:false

    false.png

画像のとおり trueのときは @thincaさん作の vim-splashが読み込まれ、AA が表示されている。一方で、falseのとき、つまり .development.vimが存在するとき(プラグイン開発時)にはそれが読み込まれていないことがわかる。

この方法を取ることで、Vim プラグイン開発中は既存のプラグインの読み込みを制限できる。開発はじめに開発ディレクトリに .development.vimを作成するだけでいい。touchコマンドでできる。開発が終われば削除するだけでいい。

もし、既存の Vim プラグインを使用したい場合、正規のプラグインディレクトリから開発ディレクトリまでシンボリックリンクをはればよい。そのプラグインは読み込まれるので、使用することができる。

$ cd ~/.vim/bundle/vim-some-plugin   #開発ディレクトリ
$ ln -s ../unite.vim .               #シンボリックリンクを作成→unite.vimは使えるようになる

まとめ

この開発スタイルは正しいのかは分からない。ただ、こうすることで自分のケースでは何の不便もなく開発に打ち込むことができる。開発を一旦中断する場合、つまり他のディレクトリに移ることで、いつも通りの Vim に戻る。開発中も既存のプラグインさえ使えないものの、他の設定はフルに生きる。

これ以外のおすすめの手法があればぜひ。

:warning:

Vim プラグイン開発の Tips - TELLME.TOKYO

諸事情によりリポストしていますが、元ネタはこっちになります。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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