#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.
	}
});