如何将文本作为注释插入到Ace Editor实例中



我正在建立一个网站,我想让人们在Ace编辑器支持的几乎任何语言进行编码。现在,如果他们试图加载Ace不支持的语言,或者我没有在我支持的语言中列出的语言,我就让它重定向。我只允许运行几种语言(因为我没有让其他语言工作或不知道如何运行),对于所有不支持运行的其他语言,我想加载Ace编辑器,并注明他们加载的语言不支持运行,但我希望它是该语言的注释。

我尝试使用editor.setValue([message], -1)插入文本。然后使用editor.focus()设置编辑器上的焦点。然后我用editor.selectAll()选择所有的文本。然后用editor.toggleCommentLines()作注释。由于某种原因,这不起作用,我不知道为什么。

我知道我可以查找如何在我允许的每种语言中编写注释,然后在将消息插入编辑器之前将其转换为注释,但如果可能的话,我想要一种更简单的方法。

有更简单的方法吗?还是我该做我说过的事?


既然我回答了自己的问题,我想问另一个人看看是否有人对此有答案:
在Ace编辑器中,您可以按CTRL+/切换行注释。但是如果你按下CTRL+SHIFT+/,它将切换多行注释。我在Ace编辑器文档中没有看到这个函数,但因为它与键盘快捷键一起工作,所以一定有一种方法可以通过编程来实现,对吗?
如果有人能解决这个问题,那就太好了!

一个用户找到了它!请看他的评论,看看这部分的答案。

我尝试了更多的东西,其中一个是在editor.toggleCommentLines()上做setTimeout,这是有效的。如果我使用150ms或更高,超时效果最好(我开始使用2000只是为了看看它是否有效,然后慢慢减少)。

所以下面的代码可以自动插入消息并注释掉:

const editor = ace.edit([element]);
editor.setValue([message], 0); // You can also leave the second parameter blank, 0 is the default which automatically selects all.
setTimeout(() => {
editor.toggleCommentLines();
}, 150); // 150ms or more works best

你可能还注意到这个方法清除了我之前使用的两个方法。这有两个原因:

  1. editor.setValue()的第二个参数使用0而不是-1时,它将选择所有的文本。
  2. 因为我们使用的是editor变量,所以编辑器不需要处于"焦点"。

最新更新