Monaco Editor 编辑器enter以后 光标定位错乱问题及解决方法

Monaco Editor 编辑器enter以后 光标定位错乱问题及解决方法

请添加图片描述
开发过程中使用到monacoeditor组件编辑json

<template>
  <div>
    <div ref="codeContainer" class="coder-editor"></div>
  </div>
</template>
<script>
import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker';
import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker';
import * as monaco from 'monaco-editor';
export default {
  data() {
    return {
      monacoEditor: null, // 语言编辑器
    }
  },
  mounted(){
    this.init()
  },

  methods: {
    init(){
      if(this.$refs.codeContainer){
        this.monacoEditor = monaco.editor.create(this.$refs.codeContainer, {
            value: '', // 编辑器初始显示文字
            language: 'json', // 语言
            automaticLayout: true, // 自动布局
            theme: 'vs', // 官方自带三种主题vs, hc-black, or vs-dark
            minimap: { // 关闭小地图
              enabled: false,
            },
            fontSize:14,
            fontFamily:'inherit',
            lineNumbers: 'off', // 隐藏控制行号
        });
      }
    }
  }
}
</script>

<style lang="scss" scoped>
.
</style>

以下是引发问题的代码

.monaco-editor .view-line{
	letter-spacing:0.5px !important;
	font-family:inherit !important;
}

我这边手欠通过css设置了字体间距,因为默认的字体被修改后,显得不咋好看,然后发现光标的移动位置错位,删除的也不是当前光标所在位置的数据,后续查看api时发现monaco有一个字体的属性,分别时fontSize和fontFamily,然后去除letter-spacing样式,光标会根据字体大小和字体类型去计算每一个字符的宽度,这样才能保证光标位置的正确。

希望给同踩坑小伙伴一点思路。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Monaco Editor是一个由微软开发的Web代码编辑器,支持语法高亮、自动补全、代码折叠等功能,可以用于开发各种类型的代码编辑器。在PyQt5中,我们可以使用QWebEngineView控件来嵌入Monaco Editor,实现一个代码编辑器。 以下是一个简单的示例,演示如何使用PyQt5和Monaco Editor创建一个代码编辑器: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout from PyQt5.QtWebEngineWidgets import QWebEngineView class CodeEditor(QWidget): def __init__(self): super().__init__() # 创建布局 layout = QVBoxLayout() # 创建Web视图 web_view = QWebEngineView(self) # 加载Monaco Editor网页 web_view.setHtml(''' <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Monaco Editor</title> <script src="https://cdn.jsdelivr.net/npm/monaco-editor/min/vs/loader.js"></script> <script> require.config({ paths: { 'vs': 'https://cdn.jsdelivr.net/npm/monaco-editor/min/vs' }}); require(['vs/editor/editor.main'], function() { var editor = monaco.editor.create(document.getElementById('editor'), { theme: 'vs-dark', language: 'python' }); }); </script> </head> <body> <div id="editor" style="height: 600px;"></div> </body> </html> ''') # 添加Web视图到布局 layout.addWidget(web_view) # 设置窗口布局 self.setLayout(layout) if __name__ == '__main__': app = QApplication(sys.argv) editor = CodeEditor() editor.show() sys.exit(app.exec_()) ``` 这个示例创建了一个PyQt5窗口,嵌入了Monaco Editor。在加载Monaco Editor网页时,我们指定了主题为“vs-dark”,语言为“python”。你可以根据自己的需求,修改主题和语言设置,来实现一个符合自己需求的代码编辑器。 需要注意的是,Monaco Editor是一个基于Web的编辑器,需要从远程服务器加载相关资源,因此在使用PyQt5嵌入Monaco Editor时,需要保证网络连接正常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值