"ruby << EOT" なところは好きなように変える。
function! Lubydo (expr) ruby <<EOT require 'rubygems' require 'mp3info' class String def capitalize_ex self.split.map {|n| n.capitalize } .join(' ') end end EOT execute "rubydo $_ = (proc { all, pre, path, dir, name = *$_.match(/\\A(.*\\d+)\\t((.+\\\\)(.+))\\Z/).to_a; return unless name; r = proc {" . a:expr . "}.call; return unless r; r = r.to_s; r = pre +'\t' + r unless r.match(/^.*\\d+\t/); r.gsub!(/\\t/, '\t' + dir) unless r.match(/\\\\/); r }.call || $_).to_s" endfunction command! -nargs=+ Lubydo :call Lubydo(<q-args>)
これで
:Lubydo Mp3Info.open(path) {|i| "#{"%.2d" % i.tag.tracknum}-#{i.tag.title}.mp3" }
みたいなことができる。
勝手に作られるローカル変数内容は
- all
- 行全体
- pre
- 数字の部分
- path
- パス全体
- dir
- ディレクトリ部分
- name
- ファイル名部分
あとは、ファイル名を返すような式をあたえれば良い