プログラマすごろく:_vimrcを開いてしまった!2回休み。
あ、タイトルはどこかで見かけたネタのパクりです。ごめんなさい。
ほぼひとりBazaar Advent Calendarも折り返し点を過ぎて、深刻なネタ不足に見舞われております。
仕方ないので partake.in あたりからネタをパクりたいと思います。
@yuitowestさんのエントリで、「 zshでmercurialのactive branchesを補完する - yuitowest's blog 」というのがあります。便利そうなのでBazaarでもやってみよう、と思ったんですが、僕はどざーなのでzshが便利になってもあんまりうれしくありませんでした。
そこで、かわりにvimのコマンドラインでBazaarコマンドの補完ができるようにならないか試してみることにしました。
ベース
VimからBazaarの操作をするためのプラグインはいくつかあるみたいですが、とりあえずこいつをベースにします。
Display output of shell commands in new window | Vim Tips Wiki | FANDOM powered by Wikia
:BzrコマンドでBazaarを呼び出して、出力をバッファに戻すだけの単純なやつですね。
方針
結果
この辺で時間切れになりました。Vim力低いですね。
- [済]
command-line-modeでの補完を実装する - [済]
Bazaarのコマンド名を補完できるようにする - [済]
コマンドを指定したあとは、オプションも補完できるといいな - [済]
Bazaarのブランチは物理的なディレクトリだから、特別補完はいらないはず。でもColocatedブランチは、colo:って打ったら補完できるようにしたい - [未] 文脈にそった補完もしたい。-rのあとにはrevisionspecのセレクタを出すとか、-r tag: の後にはタグのリストを出すとか
- [未] insert-modeでも補完できるようにしたい。
現状のコードはこんな感じです。
VimのコマンドラインでBazaarコマンドの補完をしてみる · GitHub
説明がいるような高度なコードwでもないですが、ざっと説明すると、
- GetCommands
- `bzr help commands`の出力を適当にパースして、コマンドのリストを生成しています。
- GetCommandOptions
- 同じく、`bzr COMMAND-NAME --help`の出力を適当にパースして、そのコマンドのオプションを生成しています。
- GetBzrDir
- 指定されたフォルダから上に上がりながら、.bzrフォルダを探しています。
- GetRoot
- GetBzrDirとだいたい一緒です。
- GetColoBranches
- .bzr/branchesの中にあるフォルダをリストアップしています。
- Complete
- commandline-modeの補完関数の実体です。要リファクタリングですね。
- BzrAsync
- qbzr系のコマンドなんかは結果をもらう必要ないですし、コマンドを投げっぱなしにしたいので、vimprocを使って非同期実行するコマンドも追加しています。
まとめ
- 宿題が増えました。
- _vimrcとかを触るのは時間泥棒すぎてヤバいです。