Lua+Vimでquineを書いたお

調子にのってLua+Vimのquineを書いてみた。

せっかくLuaインターフェースを組み込んだVimを配布し始めたので その上で動くquineを書いてみた。

s="vim.command('new '..os.time()..'.lua');vim.buffer()[1]=string.format('s=%q;loadstring(s)()',s);vim.command('w')";loadstring(s)() 

これをquine2.lua(もちろん名前はなんでも良い)としてVimで入力&保存し、そのまま以下を実行。

:luafile %

そうすると全く同じ内容のファイルが作成され、そちらにフォーカスが移る。 あとは上記を繰り返せば好きなだけ同じ内容が再生成されるという寸法。

解説

基本構造は前回のLuaのquineと同じです。

  1. Luaとして実行できる文字列を変数sに定義
  2. string.format(‘%q’,s)で自分自身を再出力
  3. loadstring(s)()

今回は上記に加えて以下のことをしています。

  1. 新しいVimのファイル/バッファを作成
  2. quineの出力先を1のバッファにする
  3. ファイルを保存する

これにより自分自身を再生成するというなんとも不思議なファイルのできあがりです。