読者です 読者をやめる 読者になる 読者になる

Blank File

LinuxとかPythonとかVimとか、趣味でいじる感じで

Vimのプラグインを作って公開してみました

Vim

Vimプラグインを作ってgithubで公開しました。色々初めてだったので書き残しておこうと思います。

公開したプラグインについて

これ(conoline.vim)です。(※colorscheme: solarized)

f:id:h-miyako:20140126180646g:plain

カレントウィンドウのカーソル行をハイライトします。ポイントはカレントウィンドウだけハイライトしてくれるところです。

Vim のカスタマイズ 〜autocmd で自動処理の実例〜 - Vim のブログで紹介されていたtipsを使っていたのですが、自分の用途にあわせてちまちまといじっているうちに大きくなってきたので、プラグインとして分離しました。正直わざわざプラグインにするほどかと言われるとプラグインじゃなくてもいいと思います・・・公開してみたかっただけです・・・

変更した部分は概ね以下のとおりです。

  • コマンドでOn/Off切り替え
  • colorschemeのdark/lightに応じて色変更
  • 各種設定用の変数追加

デフォルトでは、ノーマルモードでは目立たず、インサートモードに入った時にコントラストを上げて目立たせるようにしてあります。

NeoBundleなどを使っている方は、

NeoBundle 'miyakogi/conoline.vim'

などでインストールできますので、よろしければお試しください。:ConoLineEnableで有効になります。

ちなみに黒背景だとこのようになります。

f:id:h-miyako:20140126180728g:plain

このテーマはVimに標準で入っているslateを少し修正したものです。最近の機能に対応するハイライトが定義されていなかったので追加したりもしました。多用されていたカーキ色はかなり駆逐しました。端末は未対応です。

話はそれますが、私は端末ではgodlygeek/csapproxで同じテーマを使っています。GUI用のcolorschemeもかなりの再現度で使えたりするので便利です。ただし+GUIコンパイルされたvimが必要です。

Vimプラグインを作って公開した手順

Vimmerの方々の以下の記事を参考にさせていただきました。

pluginの冒頭と最後の処理はコピペです。プラグインのルール(マナー?)にきちんと従ったものになっているかは自信ないので、「ここおかしい」とかコメントいただけると幸いです。

今回は以下の手順でプラグインにしました。

  1. .vimrcから該当部分を切り出して~/.vim/plugin/ディレクトリにconoline.vimファイルを作って写す。
  2. pluginディレクトリからローカルの別ディレクトリ(~/.vim/local/など)に移して、neobundleで読み込み。実際には以下のように設定しました。
    1. ~/.vim/local/conoline.vim/plugin/conoline.vimにコピー
    2. .vimrccall neobundle#local("~/.vim/local/", {}, ['conoline.vim',])を記述
  3. 処理をautoload/conoline.vimplugin/conoline.vimに分割。
  4. 色などをvimrcから設定できるように変数を定義。
  5. 少しテスト(手動) → 修正、のループ
  6. READMEとhelp(doc/conoline.txt)を書く
  7. Githubに公開、NeoBundleでGithubからインストールして動作確認

切り出して動かすまで (1.〜3.)

元々自分のvimrcで使っていたので、動くものを作るまで(上記1.〜3.)はあまり苦労しませんでした。最終的にaugroupautocmdの処理はかなり変わりましたが、大したことはしていません。

外部からの設定に対応 (4)

地味に苦労したのがプラグイン名と設定用の変数名でした。設定まわりはかなりやっつけ仕事かつ強引なので、(気力があれば)後で大幅に修正すると思います。

プラグイン名はcursorlineとかcurrentlineにできたらいいなぁとは思っていたのですが、検索したら案の定すでに使われていました。なので日本語で「このライン」にしました。"k"でなく"c"なのはcursorとかcurrentとかcだったので。これ自分で説明するのすごく恥ずかしいですね。

テストと既知の問題 (5)

テストは手動で少ししただけですが、某有名海外製ファイルエクスプローラプラグインを使う時以外は大丈夫そうです。一応少しのテストで出るようなバグは修正しました。

某NERDTreeさんは自前のコマンドを実行する時にeventignore=allを設定してautocmdが一切発動しないようにしているので、NERDTreeからファイルを開く時は動作しません。とりあえず私の方では対応できませんでした。プラグインの競合怖いです。

検索したら全く同じようなIssueがありました。9ヶ月ほど無視されています。おそらく過去に色々あったんだと思います。利用者の多いプラグインをメンテナンスされている方の苦労が忍ばれます・・・

ドキュメント (6)

READMEやHelpは英語つらいを書くに当たって、いくつかのプラグインを参考にさせていただきましたが、スタイルや説明の順番は皆さんわりと自由な感じでした。今回は複雑な部分はない(と思いたい)ので短くすんだと思います。正直、設定関係は全面的に変更しそうな気がしているので頑張ってヘルプを書く気持ちは不足していました。ヘルプを読むよりコード見たほうが早くてわかりやすいと思います。

ヘルプの書き方は:help help-writingの他に、以下の記事を参考にさせていただきました。

特にthincaさんの書かれているhelp用の設定は重要でした。Vimのhelpを書く人はあの設定必須ですね。

公開 (7)

最後にGithubで公開するわけですが、私はこれも始めてだったのでドキドキでした。特に最初はREADMEファイルがどのように表示されるかわからず、とりあえずローカルだけで確認したものを上げました。あとで知ったのですが、github上でファイルをプレビューしながら編集してそのままコミットする機能があるのですね。早速何度か修正しました。

最後に

ほとんど感想文のような形になってしまいました。もう少し「こうすると便利」とかの情報にしたかったのですが、必要な情報はすでに少し探せば見つかるくらいに整っていました。先人の貢献に感謝です。

なので、私が言うのも変ですが、Vimプラグインを作って公開するハードルはかなり低くなっている思います。まだ作ったことがない人もどんどん作ってみるといいと思います。Vimプラグインを作る人が増えてVimライフが快適になることを楽しみにしています。