print <<"EOF";
hello
world
EOF
これを言語レベルではサポートしていない。しかしこのヒアドキュメントも一種の言語的な縛りであって、縛りの許容範囲次第では vim script でもヒアドキュメントっぽい事は出来る。
function! s: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