#js-vim is an implementation of vim in JavaScript It already incorporates most of the vim bread-and-butter commands: - Motions ( 0 ^ g_ G w ( ) - Operators ( y c d ) - smartindent - Marks (ma 'a `a) - Registers and macros ( "a, qa{macro}q, @a ) - Visual mode ( regular and line-, but not yet block ) And it's very extensible: vim.addCommand({ mode: 'command', match: /:w\n/, fn: function() { // Your own save logic here // vim.text() returns the text value of the document. } });