Mine's not interpreter agnostic because I had to mess with the stack frames to insert variables into the global context.
But yours is able to do that because your importing a top-level edit function while I was pretty set on dynamically creating a vim() method and not having to import a function (just a module).
I love how yours lists the globals though! I might just have to bite that feature :).