2015-01-21 2 views
7

나는 웹 응용 프로그램의 에이스 편집기를 통합하고있어 W 및 사용 : 사용에이스 편집기와 정력 키 바인딩 :과 같이 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-에 매핑 한 파일을 저장 승 :이 사용하여 문제가 Esc 키를 사용하는 경우하는 빔에 "정상"모드로 들어갈 수 있다는 것입니다, 작동하고있는 동안 동작을

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

을 테스트하고 싶어해서 S/명령-S , 위에 정의 된 명령의 exec 함수는 Ctrl-S/Command-S와 같이 호출되지 않습니다.

그리고 키 바인딩-vim.js 파일은 정의되지 CodeMirror.commands.save에 대한 오류가 발생합니다 ...

나는 API 문서와 데모를 살펴 보았다하지만 "올바른"방법을 찾을 수 없었습니다 이 문제를 해결할 수 있습니다.

감사합니다. 감사합니다.

+1

제거'vim' 태그를 할 수 있습니다. 그것은 자바 스크립트 물건과 비슷합니다. – 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

브레이스에게

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'); 
    }); 
});