vim -es +'let src="norm ivim -es +^=nr2char(39)@let src=^=nr2char(34)@^=src@^=nr2char(34)@ | exe src->tr(^=nr2char(34)..nr2char(37)..nr2char(94)..nr2char(64)..nr2char(34)@, nr2char(27)..nr2char(18)..nr2char(10))^=nr2char(39)@ +^=nr2char(39)..nr2char(37)@p|q!^=nr2char(39)@" | exe src->tr("%^@", nr2char(27)..nr2char(18)..nr2char(10))' +'%p|q!'
ソースコードを変数sに代入し、インサートモード内で=を使うことで展開している。
"
はasciiコードから入力している。
vim -es +'let src="norm ivim -es +^=V39)@let src=[^=src@[|exe src->substitute([^=V86)@[,[V[,[g[)->tr([^=V37).V94).V64).V91)@[,V27).V18).V10).V34))^=V39)@ +^=V39).V37)@p|q!^=V39)@"|exe src->substitute("V","nr2char(","g")->tr("%^@[",nr2char(27).nr2char(18).nr2char(10).nr2char(34))' +'%p|q!'
V
をnr2char(
で展開した。
vim -es +'let s="norm ivim -es +7=]39);let s=[7=s;[|exe s->substitute([7=]93);[,[][,[g[)->tr([7=]55).]59).]91);[,]18).]10).]34))|p|q!7=]39);"|exe s->substitute("]","nr2char(","g")->tr("7;[",nr2char(18).nr2char(10).nr2char(34))|p|q!'
読みにくくなるように繰り返しでてくる文字を;
や[
に置き換えた。また、7がコード内に使われていないことに気づいたので7
をコード内に混ぜた。
Q: なんでex使わないの?
vimにこだわったから
Q: なんでQuine一つ作るのにこんなゴミカス作ったの?
技術がないから