f

アーカイブ

2014-09-15

My first Vim plugin: autofname.vim

指定した囲み文字の間に編集中のファイル名を自動的に挿入する私の初めてのVimプラグイン: autofname.vimを以下のURLで公開した。

きっかけ

以下のGoogle+の投稿が始まりだった。
前々から自分で作った練習用であったりサンプルのプログラムを文書に載せたり,発表資料に載せるときにファイル名をどうするかが問題だった。
今までは,ファイル中にはファイル名を書かずその都度別の場所に書いていた。しかし,はっきりいってこれは面倒くさいし無駄だった。最初からファイル内に書いておけばいちいち別記しなくてもよい。ただし,いちいち手動でやるのは面倒くさいので絶対にやりたくない。自動的にやりたかった。また,Vimでファイルを編集しているときは,下の方にファイル名を表示しているが,他のソフトで見る場合必ずしもそういうことはできないし,いちいち確認するのが面倒だった。
こういう理由でファイル内にそのファイル名を自動的に記入したかった。なんか簡単にそういうことできるVim pluginとかコマンドないか調べてみたけど見当たらなかった。
類似のpluginとしてautodate.vimというものがあった。これはファイルの書き込み時にタイムスタンプを指定箇所に自動挿入するプラグインだ。便利で愛用している。
ファイル名の自動挿入については以下の条件を満たせれば十分だと思っている。
  • 指定した範囲に登場した
  • 指定した囲み文字の位置に
  • ファイルの保存時に
  • ファイル名を埋め込む
ファイルタイプの自動検知とかコメント文字の検出とかけっこう面倒くさい。予め用意しておいたテンプレートの指定箇所にだけ埋め込んでくれるのが一番楽だ。そうすれば,自分でコメントアウトしておいたところに書き込むだけなので処理も簡単だ。
autodate.vimにおいて日付の代わりにファイル名を記入してくれれば十分だった。Vim pluginの知識もほぼないので,autodate.vimを丸丸コピーしてautofname.vimというファイル名を自動挿入するプラグインを作ることにした。

修正点

偉大な先人が残してくれた遺産のおかげて,実際に行った作業は非常に簡単なものだった。以下でVimautodate.vimに行った変更内容を記載する。
vim autodate.vim
:set noignorecase
:%s/autodate/autofname/g
:%s/Autodate/Autofname/g

"344行目付近のsubの値の変更
/let sub
  " let sub = Strftime2(format)
    let sub = expand("%:t") 
以上である。その他にライセンスを書いたりREADMEを編集したりしたが,メインの機能に関することはたったこれだけである。はっきりいってVim pluginと名乗るのも恐縮である...。しかし,自分のやりたかったことはできたので満足している。

使い方

行った変更は以下2点だ。
  • autodate.vimのパラメーター名の変更:autodate -> autofname, Autodate -> Autofname
  • 代入文字の変更
したがって,autodate.vimとほぼ同じように囲み文字や検索行数を指定する。例えば,以下のようにして囲み文字を設定する。
let autofname_keyword_pre="(File name:"
let autofname_keyword_post=")"
let autofname_lines=10
以下のように書かれているhoge.txtがあるとする
# (File name: )
ファイルを変更して書き込むときに自動的にファイル名が挿入される。
# (File name: hoge.txt)

課題

前節で太字で書いたようにファイル名を挿入してくれるのは,ファイルを変更して書き込むときだけとなっている。本当は常に書き込むようにしたかったのだけれど,うまくいかなかったので断念した。
autofname.vim223行目付近の以下の行で書き込みのタイミングを設定していると思う。
autocmd BufUnload,FileWritePre,BufWritePre * call <SID>Autofname()
ここのイベントでQuitPreなどを設定してみたがうまく動作しなかった。

その他

作成したautofname.vimは当初ローカル環境でのみ使っていた。というのも,オリジナルのautodate.vimにライセンスの明記がなかったためだ。ただ,GitHubで管理したいしオープンにしたかったので作者に問い合わせた。するとVIM Licenseにするなら公開しても問題ないとの回答を得た。
そのため,GitHubで公開できるようになった。ただ,公開するにあたってREADMEや変更点などを記載する必要があった。これが面倒だった。プラグインの作者は本当にすごいと思った。面倒で詳しい説明とかあんまり書いていられないと思った。

まとめ

編集中のファイルにファイル名を自動挿入するVim plugin: autofname.vimを作って公開しました。Vim plugin作者の労力を少しわかりました。いきなり自分で一からVim pluginを作るのはかなりハードルが高いので,既存のもの自分用に改変するのもありだと思った。今度はもう少し自分でVim scriptを書いて便利なものを作れるようにしたいと思った。

0 件のコメント:

コメントを投稿