VIM keybindings for monaco editor
Vim keybindings for monaco-editor demo
npm install monaco-vim
This package will only work when bundled using webpack/browserify or using AMD. Including globally is not possible due to the use of an internal dependency of monaco-editor which is not exposed in the API. Loading 'monaco' globally is also not possible as you'll have to use its
loader.jsfile. If you are using that, then there will be no problem. See AMD.
import { initVimMode } from 'monaco-vim';const vimMode = initVimMode(editor, document.getElementById('my-statusbar'))
Here,
editoris initialized instance of monaco editor and the 2nd argument should be the node where you would like to place/show the VIM status info.
To remove the attached VIM bindings, call
vimMode.dispose();
If you would like a particular keypress to not be handled by this extension, add your
onKeyDownhandler before initializing
monaco-vimand call
preventDefault()on it.
monaco-vimwill ignore such events and won't do anything. This can be useful if you want to handle events like running code on
CTRL/CMD+Enterwhich otherwise would have been eaten up by
monaco-vim. (Available from v0.0.14 onwards).
If you are following the official guide and integrating the AMD version of
monaco-editor, you can follow this -
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
See demo.js for full usage.
If you would like to customize the statusbar or provide your own implementation, see
initVimMode's implementation in src/index.js.
Actual vim implementation can be imported as:
import { VimMode } from 'monaco-vim';
// VimMode.Vim.defineEx(name, shorthand, callback); VimMode.Vim.defineEx('write', 'w', function() { // your own implementation on what you want to do when :w is pressed localStorage.setItem('editorvalue', editor.getValue()); });
For advanced usage, refer codemirror.
CodeMirror.Vimis available as
VimMode.Vim;
This implementaion of VIM is a layer between Codemirror's VIM keybindings and monaco. There may be issues in some of the keybindings, especially those that expect extra input like the Ex commands or search/replace. If you encounter such bugs, create a new issue. PRs to resolve those are welcome too.