2015-01-21 2 views
7

Я интегрированием Ace Editor в веб-приложение, и используя VIM сочетания клавиш, как так:Ace редактор и VIM комбинации клавиш: с помощью: ш команды

var editor = ace.edit('editor'); 
editor.setDisplayIndentGuides(false); 
editor.setHighlightActiveLine(false); 
editor.setShowFoldWidgets(false); 
editor.setShowInvisibles(false); 
editor.setShowPrintMargin(false); 
editor.setKeyboardHandler('ace/keyboard/vim'); 

Я также эта команда отображается на Ctrl- S/Command-S только потому, что я хотел, чтобы протестировать поведение

editor.commands.addCommand({ 
    name: 'saveFile', 
    bindKey: { 
    win: 'Ctrl-S', mac: 'Command-S', 
    sender: 'editor|cli' 
    }, 
    exec: function (env, args, request) { 
    console.log('saving...', env, args, request); 
    } 
}); 

Хотя это работает, проблема заключается в том, что при использовании клавиши ESCape ввести «нормальный» режим в Vim, и используя: ш, чтобы сохранить файл , функция exec exec, определенная выше, не вызывается, как это происходит с помощью Ctrl-S/Command-S ...

И файл KeyBinding-vim.js выдает ошибку о CodeMirror.commands.save не определена ...

Я посмотрел на API документации и демонстрациях, но не смог найти «правильный» путь чтобы исправить это.

Помогите оценить. Спасибо

+1

удален 'vim' тег, так как этот вопрос не просит о Vim. это больше похоже на некоторые материалы javascript. – Kent

+0

@ Kent Редактирование тегов, и вы пропустили «javascipt»? : D – Cimbali

+0

@ Kent спасибо, я буду осторожна в следующий раз –

ответ

9

Для этого пока нет публичного api. Но вы можете сделать

ace.config.loadModule("ace/keyboard/vim", function(m) { 
    var VimApi = require("ace/keyboard/vim").CodeMirror.Vim 
    VimApi.defineEx("write", "w", function(cm, input) { 
     cm.ace.execCommand("save") 
    }) 
}) 
+0

Спасибо большое, отлично работает. Просто для любопытства, вы обнаружили, что читаете код или есть существующий URL с этими «подсказками»? –

+0

Чтение кода, как правило, быстрее и надежнее, чем поиск документов –

0

Brace

import ace from 'brace'; 
require('brace/keybinding/vim'); 

editor.setKeyboardHandler('ace/keyboard/vim'); 

ace.config.loadModule('ace/keyboard/vim', function(module) { 
    var VimApi = module.CodeMirror.Vim; 
    VimApi.defineEx('write', 'w', function(cm, input) { 
     cm.ace.execCommand('save'); 
    }); 
}); 
Смежные вопросы