使用Ace.js+Electron开发编辑器时,getValue()输出含多余空白求助
问题原因与解决方案
核心问题1:获取编辑器内容的时机错误
你在页面初始化时就执行了code = editor.getValue(),这意味着code变量存储的是编辑器初始状态的内容,而非点击保存按钮时的最新代码。每次点击保存,都是把这个静态初始值写入文件,自然会和编辑器当前显示的内容不符,甚至出现多余空白。
核心问题2:Ace配置选项的驼峰错误
Ace的配置选项采用小驼峰命名,你代码里的UseWrapMode和UseSoftTabs应该改为useWrapMode和useSoftTabs,否则这些配置不会生效,可能导致换行、缩进的显示与实际存储不一致。
修改后的代码
app.js 修正版本:
editor.setTheme("ace/theme/monokai") editor.session.setMode("ace/mode/arduino") editor.setOptions({ fontFamily: "Fira Code", fontSize: "10pt", enableBasicAutocompletion: true, enableSnippets: true, showPrintMargin: false, useWrapMode: true, // 修正驼峰命名 useSoftTabs: true, // 修正驼峰命名 }) beautify.beautify(editor.session) save_file.addEventListener('click', () => { // 点击保存时实时获取编辑器最新内容 const code = editor.getValue() window.eapi.saveFile('text.ino', code) })
index.js 补充优化:
为避免编码问题导致的异常空白,建议指定编码格式为utf8:
fs.writeFile(fname, code, 'utf8', (err) => { if (err) { console.log(err) } else { console.log('Save successful') // 修正拼写错误 } })
额外优化建议
如果需要确保保存的是格式化后的代码,可以在保存前重新执行美化操作:
save_file.addEventListener('click', () => { beautify.beautify(editor.session) // 保存前重新格式化代码 const code = editor.getValue() window.eapi.saveFile('text.ino', code) })
内容的提问来源于stack exchange,提问作者Anant Narayan
相关产品推荐
相关产品推荐

