2012/12/13

vim script には perl 等で見るヒアドキュメント
print <<"EOF";
hello
world
EOF
これを言語レベルではサポートしていない。しかしこのヒアドキュメントも一種の言語的な縛りであって、縛りの許容範囲次第では vim script でもヒアドキュメントっぽい事は出来る。
functions:here_doc(sfile, slnum)
  let lines = readfile(a:sfile)
  return iconv(join(lines[a:slnum+1 :index(lines, 'endif')-1], "\n")'utf-8', &encoding)
endfunction
command-nargs=1 HereIf0 execute printf('let %s = s:here_doc(expand("<sfile>"), expand("<slnum>"))'<q-args>)
HereIf0 というコマンドを定義し
scriptencoding utf-8

HereIf0 foo
if 0
はろー
わーるど
endif

echo foo
この様に実行すると foo という変数に if 0 から endif までが入る。HereIf0 から if 0 までに行を入れてはならないし、endif を省略して書いたり後続コメントを書いてはいけない。あとファイルのエンコーディングが utf-8 決めうちになる。
まぁこれも縛りと思えば納得出来る。(縛りすぎ)

ちなみに perl の __DATA__ セクションっぽいのは、随分昔にやってた。
http://mattn.kaoriya.net/software/vim/20080317150503.htm
http://subtech.g.hatena.ne.jp/motemen/20080324/1206337579
Posted at 12:00 | WriteBacks () | Edit
Edit this entry...

wikieditish message: Ready to edit this entry.






















A quick preview will be rendered here when you click "Preview" button.