LiName用のVimスクリプトン

"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
ファイル名部分

あとは、ファイル名を返すような式をあたえれば良い