当前位置:首页 > 科技  > 软件

强大的代码编辑器组件,你知道几个?

来源: 责编: 时间:2024-04-03 09:10:41 124观看
导读上次介绍了一个简单的示例,基于javascript如何从一段文本解析为一段代码,今天我们看下一下个功能类似,但非常强大的代码编辑器组件 CodeMirrorCodeMirror https://codemirror.net/在Web开发中,我们经常需要在网页上展示代

上次介绍了一个简单的示例,基于javascript如何从一段文本解析为一段代码,今天我们看下一下个功能类似,但非常强大的代码编辑器组件 ENf28资讯网——每日最新资讯28at.com

CodeMirror

CodeMirror https://codemirror.net/ENf28资讯网——每日最新资讯28at.com

在Web开发中,我们经常需要在网页上展示代码,或者让用户直接在网页上编写代码。为了提高用户体验,我们通常会使用代码编辑器来实现代码的高亮、自动补全等功能。而在众多代码编辑器中,CodeMirror无疑是一个功能强大、易用的选项。本文将带您深入了解CodeMirror的基本用法和高级特性,让您能够轻松地在网页中实现代码编辑与高亮。ENf28资讯网——每日最新资讯28at.com

什么是CodeMirror?

CodeMirror是一个基于JavaScript的代码编辑器,它可以在网页中实现代码的高亮、自动补全等功能。CodeMirror支持多种编程语言,如JavaScript、HTML、CSS、Python等,并且可以通过插件扩展支持更多的语言。CodeMirror的使用非常简单,只需要引入相应的库文件,然后通过简单的配置即可实现代码编辑与高亮。ENf28资讯网——每日最新资讯28at.com

如何使用CodeMirror?

基于webpack

  1. 初始化项目
npm init -y
  1. 引入库文件
npm i codemirror @codemirror/lang-javascript npm i -D webpack webpack-cli webpack-dev-server npm i -D css-loader scss scss-loader style-loader html-loader html-webpack-plugin
  1. 创建编辑器
<div id="app"></div>
  1. 初始化Codemirror
const state = EditorState.create({    doc: 'console.log("hello codemirror")',    extensions: [        basicSetup,        javascript(),        // 其他扩展,包括主题、语法高亮...    ],});const editor = new EditorView({    state,    parent: document.getElementById("editor")})
  1. 配置webpack
const path = require('path');const webpack = require('webpack');const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {  entry: './src/js/index.js',  output: {    filename: 'bundle.js',    path: path.resolve(__dirname, 'dist'),  },  devServer: {    static: {      directory: path.join(__dirname, 'dist'),      watch: true,    },    compress: true,    port: 9000,    hot: true, // 启用HMR  },  plugins: [    new HtmlWebpackPlugin({      template: './src/index.html',    }),    new webpack.HotModuleReplacementPlugin(),  ],  optimization: {    minimize: false, // 关闭代码压缩  },  module: {    rules: [      {        test: //.scss$/, // 正则表达式,匹配所有 .scss 文件        use: [          'style-loader', // 将 JS 字符串生成为 style 节点          'css-loader', // 将 CSS 转化成 CommonJS 模块          'sass-loader' // 将 Sass 编译成 CSS,需要 npm 安装 sass-loader 和 sass        ]      },      {        test: //.css$/i,        use: ['style-loader', 'css-loader'],      },      {        test: //.(png|svg|jpg|jpeg|gif)$/i,        type: 'asset/resource',      },      {        test: //.html$/i,        loader: 'html-loader',      },    ],  },  mode: 'development',};
  1. 启动
{    "scripts": {      "start": "webpack serve --open",      "build": "webpack --mode=dependencies"    },}
npm start

CodeMirror的高级特性

  1. 自定义主题

CodeMirror允许我们自定义主题,以实现个性化的代码高亮效果。可以通过以下方式设置自定义主题:ENf28资讯网——每日最新资讯28at.com

import {EditorView} from "@codemirror/view"let myTheme = EditorView.theme({  "&": {    color: "white",    backgroundColor: "#034"  },  ".cm-content": {    caretColor: "#0e9"  },  "&.cm-focused .cm-cursor": {    borderLeftColor: "#0e9"  },  "&.cm-focused .cm-selectionBackground, ::selection": {    backgroundColor: "#074"  },  ".cm-gutters": {    backgroundColor: "#045",    color: "#ddd",    border: "none"  }}, {dark: true})
  1. 自定义语言模式

除了内置的语言模式外,我们还可以自定义语言模式。首先需要引入相应的模式文件,然后通过以下方式设置自定义语言模式:模板是基于lezer解析,syntax.grammar,基于lezer的语法解析器,可以自定义语法规则,实现自定义语言模式,像之前那样逐个对字符处理。ENf28资讯网——每日最新资讯28at.com

@top Program { expression* }@skip { space | LineComment }expression {  Identifier |  String |  Boolean |  Application { "(" expression* ")" }}@tokens {  Identifier { $[a-zA-Z_/-0-9]+ }  String { '"' (!["//] | "//" _)* '"' }  Boolean { "#t" | "#f" }  LineComment { ";" ![/n]* }  space { $[ /t/n/r]+ }  "(" ")"}@detectDelim
import {parser} from "./syntax.grammar"import {LRLanguage, LanguageSupport, indentNodeProp, foldNodeProp, foldInside, delimitedIndent} from "@codemirror/language"import {styleTags, tags as t} from "@lezer/highlight"export const EXAMPLELanguage = LRLanguage.define({  parser: parser.configure({    props: [      indentNodeProp.add({        Application: delimitedIndent({closing: ")", align: false})      }),      foldNodeProp.add({        Application: foldInside      }),      styleTags({        Identifier: t.variableName,        Boolean: t.bool,        String: t.string,        LineComment: t.lineComment,        "( )": t.paren      })    ]  }),  languageData: {    commentTokens: {line: ";"}  }})export function EXAMPLE() {  return new LanguageSupport(EXAMPLELanguage)}
  1. 语法高亮

可以根据标签类型设置不同标签的颜色与其他样式,可以根据内置的tag类型定义不同的显示风格:ENf28资讯网——每日最新资讯28at.com

import {tags} from "@lezer/highlight"import {HighlightStyle} from "@codemirror/language"const myHighlightStyle = HighlightStyle.define([  {tag: tags.keyword, color: "#fc6"},  {tag: tags.comment, color: "#f5d", fontStyle: "italic"}])

codemirror的扩展点很多,类似于Visual Studio Code的Web版本都可以基于该框架试下,在官网上罗列了具体的:ENf28资讯网——每日最新资讯28at.com

Accessibility

Works well with screen readers and keyboard-only users.ENf28资讯网——每日最新资讯28at.com

Mobile Support

Use the platform's native selection and editing features on phones.ENf28资讯网——每日最新资讯28at.com

Bidirectional Text

Support mixing of right-to-left and left-to-right text.ENf28资讯网——每日最新资讯28at.com

Syntax Highlighting

Color code to reflect syntactic structure.ENf28资讯网——每日最新资讯28at.com

Line Numbers

Display gutters with line numbers or other information next to the code.ENf28资讯网——每日最新资讯28at.com

Autocompletion

Provide language-specific completion hints in the editor.ENf28资讯网——每日最新资讯28at.com

Code Folding

Temporarily hide parts of the document.ENf28资讯网——每日最新资讯28at.com

Search/Replace

Editor-specific search, regexp search, and replace functionality.ENf28资讯网——每日最新资讯28at.com

Full Parsing

Detailed parse trees allow many types of language integration.ENf28资讯网——每日最新资讯28at.com

Extension Interface

Robustly implement demanding editor extensions.ENf28资讯网——每日最新资讯28at.com

Modularity

Most features are implemented on top of a generic public API.ENf28资讯网——每日最新资讯28at.com

Speed

Remains responsive even on huge documents and long lines.ENf28资讯网——每日最新资讯28at.com

Bracket Closing

Automatically insert matching brackets during typing.ENf28资讯网——每日最新资讯28at.com

Linting

Show error and warning messages in the editor.ENf28资讯网——每日最新资讯28at.com

Flexible Styling

Mix font styles and sizes, add widgets in the content.ENf28资讯网——每日最新资讯28at.com

Theming

Import or create custom visual editor styles.ENf28资讯网——每日最新资讯28at.com

Collaborative Editing

Allow multiple users to edit the same document.ENf28资讯网——每日最新资讯28at.com

Undo History

Undo and redo functionality with collab editing support.ENf28资讯网——每日最新资讯28at.com

Multiple Selections

Select and edit multiple ranges of the document at once.ENf28资讯网——每日最新资讯28at.com

Internationalization

Provide custom text to display or announce to the user.ENf28资讯网——每日最新资讯28at.com

...and more

Find a full description of the library's features in the docs.ENf28资讯网——每日最新资讯28at.com

结束语

以上就是关于CodeMirror的简单介绍和基本用法。通过本文,您应该已经了解了如何在网页中使用CodeMirror实现代码编辑与高亮。当然,CodeMirror还有很多高级特性等待您去发掘。希望本文能帮助您更好地使用CodeMirror,为您的Web开发带来更多便利。ENf28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-81062-0.html强大的代码编辑器组件,你知道几个?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C#中Dictionary与ConcurrentDictionary解锁多线程操作安全之道

下一篇: 使用Kafka构建实时音乐排行榜系统,你学会了吗?

标签:
  • 热门焦点
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • Mate60手机壳曝光 致敬自己的经典设计

    Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 摸鱼心法第一章——和配置文件说拜拜

    摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • SpringBoot中使用Cache提升接口性能详解

    SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 量化指标是与非:挽救被量化指标扼杀的技术团队

    量化指标是与非:挽救被量化指标扼杀的技术团队

    作者 | 刘新翠整理 | 徐杰承本文整理自快狗打车技术总监刘新翠在WOT2023大会上的主题分享,更多精彩内容及现场PPT,请关注51CTO技术栈公众号,发消息【WOT2023PPT】即可直接领取
  • 只需五步,使用start.spring.io快速入门Spring编程

    只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 慕岩炮轰抖音,百合网今何在?

    慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz&ldquo;难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?&rdquo;这一番话,出自百合网联合创
  • Temu起诉SHEIN,跨境电商战事升级

    Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • 2天涨粉255万,又一赛道在抖音爆火

    2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
Top
Baidu
map