我正在使用monaco-editor,我正在尝试为Command + Enter添加自定义处理程序.但是当我按下命令键时,会显示Monaco上下文菜单.是否可以禁用上下文菜单,或将其重新绑定到另一个键?
我在我的 React 应用程序中托管了一个摩纳哥编辑器。
到目前为止,我已经让编辑器在编辑器安装后打开查找控件,但我需要用一些文本预先填充它。
目前的代码如下所示:
...
class CodeEditorMonaco extends Component {
constructor (props) {
super(props)
this.editorDidMount = this.editorDidMount.bind(this)
this.editor = null
}
editorDidMount (editor, monaco) {
editor.focus()
editor.getAction('actions.find').run()
}
render () {
return (
<div className='code-editor'>
<MonacoEditor
width='100%'
height='75vh'
language='json'
editorDidMount={this.editorDidMount}
ref={editor => { this.editor = editor }}
/>
</div>
)
}
}
...
Run Code Online (Sandbox Code Playgroud)
我认为 API 文档并不清楚这是否可行。
我的第一直觉是这样做,
editor.getAction('actions.find').run('text here')
但这似乎行不通
当您在编辑器本身中突出显示一个单词,然后按下时,CMD+F您将获得预先填充文本的查找控件,因此我相信这是可以实现的。
任何帮助,将不胜感激。
我怎样才能得到我在摩纳哥编辑器中悬停的词?
我想在数组中保存的单词上显示特定值。因此,当用户将鼠标悬停在单词上时,我想将该单词与保存在数组中的单词进行比较,然后显示该单词的保存值。
我知道这两种方法:
model.getValue() // gets all the text stored in the model
model.getValueInRange({startLineNumber, startColumn, endLineNumber, endColumn}) // gets the value in Range, but I don't now the start and end column.
Run Code Online (Sandbox Code Playgroud)
这是我的代码,我只需要 getValueInRange 方法的帮助:
public variableHoverProvider = <monaco.languages.HoverProvider>{
// this is for getting the values on hover over context variables and shortcuts
provideHover: (model, position, token) => {
if (model.getLineContent(position.lineNumber).trim() !== '') { // if only whitespace don't do anything
let current = this.store[this.store.length - 1]; // just the …Run Code Online (Sandbox Code Playgroud) 设置摩纳哥编辑器文本内容的正确方法是什么,而不必担心撤消堆栈?monacoEditor.setValue("text")似乎在内心深处的某个地方崩溃:
vue.esm.js?efeb:1741 TypeError: (intermediate value)(intermediate value)(intermediate value).create is not a function
at D (textModel.ts:90)
at f.setValue (textModel.ts:385)
at t.setValue (commonCodeEditor.ts:211)
at VueComponent.loadFile (ResourceViewer.vue?d447:85)
Run Code Online (Sandbox Code Playgroud) 将任何回调附加到editor.onDidChangeModelContent(event)Monaco 实例后,如何删除(或取消绑定)此函数?
例如,ACE 编辑器提供了完成此操作的功能。removeListener
有没有办法通过原始字符串以及字符串中子字符串的开头和结尾的索引来计算摩纳哥编辑器中的位置?
有可能找到匹配 API:
editor.getModel().findMatches('sub_string')
Run Code Online (Sandbox Code Playgroud)
我想知道是否还有其他方法,因为可能有多个匹配项,并且 API 方法并不完全适合我当前的任务。
如何从摩纳哥编辑器中获取转译的 TypeScript 代码?另外,是否可以访问 TypeScript 语言服务?我试过这个:
monaco.languages.typescript.getTypeScriptWorker();
Run Code Online (Sandbox Code Playgroud)
但它回来了Promise<any>,我不知道该怎么办!
不知道如何将显示语言从 javascript 更改为 swift(或其他)
我使用“npm install monaco-editor”命令安装
<script src="node_modules/monaco-editor/min/vs/loader.js"></script>
<script>
var editor;
require.config({ paths: { 'vs': 'node_modules/monaco-editor/min/vs'
}});
require(['vs/editor/editor.main'], function() {
editor =
monaco.editor.create(document.getElementById('container'), {
value: [
'function x() {',
'\tconsole.log("Hello world!");',
'}'
].join('\n'),
language: 'javascript',
theme: "vs-dark"
});
});
function showMessage() {
var text = editor.getValue();
monaco.editor.setModelLanguage(editor.getModel(), "swift")
editor.updateOptions({
language: "objective-c"
});
alert(text);
}
</script>
Run Code Online (Sandbox Code Playgroud)
我希望在运行 showMessage 函数后,显示代码会从 javascript 更改为 Objective-c。实际上错误什么也没显示。有谁知道怎么做??
在应用程序上运行 jest 失败:
Details:
/home/**/node_modules/monaco-editor/esm/vs/editor/editor.api.js:5
import { EDITOR_DEFAULTS } from './common/config/editorOptions.js';
^
SyntaxError: Unexpected token {
> 1 | import * as monaco from "monaco-editor/esm/vs/editor/editor.api.js";
| ^
2 |
3 | /**
4 | * Get create function for the editor.
at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:537:17)
at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:579:25)
at Object.<anonymous> (src/utils/editor-actions.js:1:1)
Run Code Online (Sandbox Code Playgroud)
应用程序已为jest和安装了软件包babel-jest。
巴别配置:
const presets = [
[
"@babel/env",
{
targets: {
edge: "17",
firefox: "60",
chrome: "67",
safari: "11.1"
},
useBuiltIns: "usage",
corejs: 3,
}
], …Run Code Online (Sandbox Code Playgroud) 我正在向摩纳哥添加自定义语言,如下所示:
monaco.languages.register({ id: 'someLanguage' });
monaco.languages.registerCompletionItemProvider('someLanguage', {
provideCompletionItems: function () { /* ... */ }
});
Run Code Online (Sandbox Code Playgroud)
我在开发环境中执行此操作,该环境会在更改时热重新加载,因此它使用热重新加载。每次保存内容时都会再次运行相同的代码。导致上面的代码被多次调用,从而monaco一次又一次地注册相同的函数。在这个完成提供程序的示例中,当在脚本热重新加载后添加新的提供程序时,我以前的所有提供程序都会被保留。
我们有没有办法取消注册一种语言以便再次注册它?
谢谢