我正在开发一个使用java / scala后端(Lift的项目,确切地说,虽然这不应该影响这个问题),并且作为前端的一部分,我们使用{{3} }。我已经谷歌搜索了一段时间,还没有找到这个问题的答案:
给定文件扩展名(例如js
,c
,cpp
,h
,java
,rb
等),怎么能我会自动选择适合语言的Ace“模式”吗?
我希望避免手动创建地图,la js -> javascript, c -> c_cpp, java -> java
。有没有可用的java / scala库?或者更好的是,Ace是否以某种方式构建了这个功能?
答案 0 :(得分:26)
Ace现在提供了模型扩展来执行此操作。
var modelist = ace.require("ace/ext/modelist")
var filePath = "blahblah/weee/some.js"
var mode = modelist.getModeForPath(filePath).mode
editor.session.setMode(mode) // mode now contains "ace/mode/javascript".
请注意,如果您使用的是prebuilt版本的ace,则需要在页面中加入ace.js
和ext-modelist.js
个文件。
使用源版本,您需要将ace.require
替换为require
,require.js将自动加载所有依赖项。
有关如何使用它的示例,请参阅https://github.com/ajaxorg/ace/blob/master/demo/modelist.html和https://github.com/ajaxorg/ace-builds/blob/master/demo/modelist.html
答案 1 :(得分:0)
以下是我如何解决它。这是我在Django项目中使用的更新版本。
<script src="{% static 'ace/src-noconflict/ace.js' %}" type="text/javascript" charset="utf-8"></script>
<script src="{% static 'ace/src-noconflict/ext-modelist.js' %}"></script>
<script src="{% static 'ace/src-noconflict/ext-language_tools.js' %}"></script>
<script>
var modelist = ace.require("ace/ext/modelist");
var editor = ace.edit("editor");
editor.renderer.setScrollMargin(40, 150)
document.getElementById('editor').style.fontSize = '15px';
editor.setTheme("ace/theme/dracula");
var full_path = "{{ file.directory_path }}";
document.getElementById("demo").innerHTML = full_path
var mode = modelist.getModeForPath(full_path);//mode
console.log(mode);
editor.session.setMode(mode.mode);
//Ace editor autocompletion
editor.setOptions({
enableBasicAutocompletion: true,
enableSnippets: true,
enableLiveAutocompletion: true
});
</script>
答案 2 :(得分:0)
密钥是editor.session.setMode(mode.mode);
<!-- ace editor -->
<script src="/ace/v1_4_11/ace.js"></script>
<script src="/ace/v1_4_11/ext-modelist.js"></script>
<script src="/ace/v1_4_11/ext-language_tools.js"></script>
let editor = null; // reference to the Ace editor
let aceModeList = null; // used by the Ace editor
function initializeAceEditor() {
aceModeList = ace.require("ace/ext/modelist");
editor = ace.edit("aceEditorDiv");
}
// load the file and set the file-extension specific mode
let mode = aceModeList.getModeForPath(fileName); // detects for example .xml - or any other file extebsion
console.log(`Ace: selected mode = ${mode.mode}`);
try {
editor.session.setMode(mode.mode);
} catch (e) {
console.log("Ace: No specific mode available for file extension");
}
editor.getSession().setValue(Base64.decode(fileContentB64));
无需在浏览器中预加载特定的模式* .js文件,例如“ mode-xml.js”。相应的模式文件将根据需要自动加载。