I, too, am interested in using CodeMirror’s VIM mode in the online editor. Let me know if that’s possible.

Thanks,
Lothrien

Thanks, @yaustar !

I’ve had some luck activating Vim mode for the active PlayCanvas code editor instance with the following:

  • Install CodeMirror’s Vim keyMap by copy and pasting it from their javascript file here https://codemirror.net/keymap/vim.js into the browser’s javascript console and run that.
  • Then copy, paste, and run the following script I wrote which sets the editor’s active keyMap to being Vim and then uses the Vim CodeMirror event vim-mode-change to properly enable and disable the PlayCanvas CodeEditor autocomplete when the Vim mode changes:
  • // Get the CodeMirror instance in the document and set it to Vim mode
    var editorcm = document.querySelector( '.CodeMirror' ).CodeMirror;
    editorcm.setOption( 'keyMap', 'vim' );
    // Vim's edit mode defaults to 'normal' so retrieve the keydown handler functions and disable them for now
    var kdHandlers = [...editorcm._handlers['keydown']];
    kdHandlers.forEach( fn => { 
    		editorcm.off( 'keydown', fn );
    // Add an event to changing modes in Vim so that the autocomplete functionality works as expected
    // (in insert / replace mode, not in normal / visual mode)
    CodeMirror.on( editorcm, 'vim-mode-change', function( modeObj ) {
    	if( modeObj.mode == 'insert' || modeObj.mode == 'replace' ) {
    		kdHandlers.forEach( fn => {
    			editorcm.on( 'keydown', fn );
    	} else {
    		// We always copy the keydown handlers before removing them in case there is any change to them that we want to preserve
    		kdHandlers = [...editorcm._handlers['keydown']];
    		kdHandlers.forEach( fn => {
    			editorcm.off( 'keydown', fn );
    

    Now, one has to redo the steps every time they want to reload the PlayCanvas editor but at least it works for the current editor. :slight_smile:

    Best,
    Lothrien

    @Lothrien I am trying to run the same script, found it in the internet archives Wayback Machine: https://web.archive.org/web/20210208215746/https://codemirror.net/keymap/vim.js
    I can import this script without any issues (not sure if it’s right version).

    But when I execute script part from forum it crashes with errors. Document.querySelector( ‘.CodeMirror’ ) returns undefined value and there is no CodeMirror in the global namespace. @yaustar Might it be that playcanvas editor updated and it’s not using codemirror anymore? I see it’s using monaco instead