精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

強大的代碼編輯器組件,你知道幾個?

開發 前端
通過本文,您應該已經了解了如何在網頁中使用CodeMirror實現代碼編輯與高亮。當然,CodeMirror還有很多高級特性等待您去發掘。希望本文能幫助您更好地使用CodeMirror,為您的Web開發帶來更多便利。

上次介紹了一個簡單的示例,基于javascript如何從一段文本解析為一段代碼,今天我們看下一下個功能類似,但非常強大的代碼編輯器組件 

CodeMirror

CodeMirror https://codemirror.net/

在Web開發中,我們經常需要在網頁上展示代碼,或者讓用戶直接在網頁上編寫代碼。為了提高用戶體驗,我們通常會使用代碼編輯器來實現代碼的高亮、自動補全等功能。而在眾多代碼編輯器中,CodeMirror無疑是一個功能強大、易用的選項。本文將帶您深入了解CodeMirror的基本用法和高級特性,讓您能夠輕松地在網頁中實現代碼編輯與高亮。

什么是CodeMirror?

CodeMirror是一個基于JavaScript的代碼編輯器,它可以在網頁中實現代碼的高亮、自動補全等功能。CodeMirror支持多種編程語言,如JavaScript、HTML、CSS、Python等,并且可以通過插件擴展支持更多的語言。CodeMirror的使用非常簡單,只需要引入相應的庫文件,然后通過簡單的配置即可實現代碼編輯與高亮。

如何使用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允許我們自定義主題,以實現個性化的代碼高亮效果。可以通過以下方式設置自定義主題:

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的語法解析器,可以自定義語法規則,實現自定義語言模式,像之前那樣逐個對字符處理。

@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類型定義不同的顯示風格:

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版本都可以基于該框架試下,在官網上羅列了具體的:

Accessibility

Works well with screen readers and keyboard-only users.

Mobile Support

Use the platform's native selection and editing features on phones.

Bidirectional Text

Support mixing of right-to-left and left-to-right text.

Syntax Highlighting

Color code to reflect syntactic structure.

Line Numbers

Display gutters with line numbers or other information next to the code.

Autocompletion

Provide language-specific completion hints in the editor.

Code Folding

Temporarily hide parts of the document.

Search/Replace

Editor-specific search, regexp search, and replace functionality.

Full Parsing

Detailed parse trees allow many types of language integration.

Extension Interface

Robustly implement demanding editor extensions.

Modularity

Most features are implemented on top of a generic public API.

Speed

Remains responsive even on huge documents and long lines.

Bracket Closing

Automatically insert matching brackets during typing.

Linting

Show error and warning messages in the editor.

Flexible Styling

Mix font styles and sizes, add widgets in the content.

Theming

Import or create custom visual editor styles.

Collaborative Editing

Allow multiple users to edit the same document.

Undo History

Undo and redo functionality with collab editing support.

Multiple Selections

Select and edit multiple ranges of the document at once.

Internationalization

Provide custom text to display or announce to the user.

...and more

Find a full description of the library's features in the docs.

結束語

以上就是關于CodeMirror的簡單介紹和基本用法。通過本文,您應該已經了解了如何在網頁中使用CodeMirror實現代碼編輯與高亮。當然,CodeMirror還有很多高級特性等待您去發掘。希望本文能幫助您更好地使用CodeMirror,為您的Web開發帶來更多便利。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2017-01-18 17:00:35

編輯器

2021-02-24 11:13:48

IDE工具代碼編輯器

2019-11-27 10:27:22

程序員Git腳本語言

2021-08-12 18:51:02

Python

2022-03-20 18:12:03

Shotcut開源視頻編輯器

2025-02-05 12:01:35

屬性編輯器Web

2020-04-23 16:04:25

代碼編輯器工具程序員

2019-06-10 11:06:04

JavaScript編輯器HTML5

2009-12-01 16:44:06

PHP編輯器

2022-09-08 09:01:41

CodePenJavaScripCSS

2009-06-11 10:03:57

NetBeans代碼

2021-10-26 10:30:31

代碼編輯器LinuxVS Code

2024-02-28 16:26:14

Linuxvi編輯器

2021-03-10 09:15:15

代碼文本編輯器編程

2015-02-12 09:51:24

代碼編輯

2022-03-03 20:57:53

代碼編輯器VS code

2018-01-02 09:31:12

大數據數據互聯網

2020-07-15 15:12:17

Python代碼編輯器編程語言

2011-10-31 10:17:05

插件

2020-03-25 14:16:58

文本編輯器語言開發
點贊
收藏

51CTO技術棧公眾號

欧美日韩1区2区3区| 成人在线视频亚洲| 久久九九国产| 色av中文字幕一区| 精品人妻无码中文字幕18禁| 麻豆tv免费在线观看| 国产精品69毛片高清亚洲| 性色av一区二区三区免费| 97人妻精品一区二区三区免 | 欧美wwwwww| 一区二区三区欧美亚洲| 成人欧美在线观看| 三级黄色在线观看| 激情小说亚洲图片| 精品国产1区2区| 亚洲高清视频一区| 涩涩视频免费看| 另类欧美日韩国产在线| 97精品一区二区视频在线观看| 91精品久久久久久久久久久久| 欧美日韩国产v| 久久麻豆一区二区| 日本一本a高清免费不卡| 精品国产国产综合精品| 国产精品va视频| 亚洲色图在线视频| 欧美亚洲精品日韩| 人妻夜夜爽天天爽| 国产福利电影一区二区三区| 欧美激情日韩图片| 国产又黄又粗又猛又爽的| 豆花视频一区二区| 91精品国产福利| 日韩国产成人无码av毛片| av播放在线观看| 久久久亚洲午夜电影| 国产精品丝袜高跟| 影音先锋在线国产| 大片网站久久| 日韩一区二区在线观看| 日本久久久久久久久久久久| 竹内纱里奈兽皇系列在线观看| 亚洲一区在线观看视频| 最新av在线免费观看| 亚洲va久久久噜噜噜无码久久| 免费一级片91| 久久久久久久网站| 爱爱视频免费在线观看| 久久a爱视频| 日韩欧美国产一区在线观看| 亚洲国产午夜精品| 小视频免费在线观看| 一区二区高清免费观看影视大全| 91制片厂免费观看| 黄色免费网站在线| 91麻豆文化传媒在线观看| 国产综合色一区二区三区| 俄罗斯嫩小性bbwbbw| 天堂成人免费av电影一区| 久久九九免费视频| 污软件在线观看| 无码日韩精品一区二区免费| 精品视频久久久久久久| 国产特黄级aaaaa片免| 白嫩亚洲一区二区三区| 在线播放/欧美激情| 乱妇乱女熟妇熟女网站| 国产在线激情| 亚洲精品国产高清久久伦理二区| 黄色污污在线观看| 日本高清在线观看视频| 亚洲国产日韩a在线播放| av免费看网址| 黄色大片在线播放| 一区二区三区四区亚洲| 亚洲精品tv久久久久久久久| 婷婷丁香花五月天| 国产乱妇无码大片在线观看| 国产精品久久久久久久久免费看 | 超碰人人人人人人人| 超碰精品在线| 日韩www在线| 被黑人猛躁10次高潮视频| 亚洲经典视频| 亚洲精品一区久久久久久| 一级在线观看视频| 国产99亚洲| 日韩在线视频观看| 亚洲ⅴ国产v天堂a无码二区| 亚洲国产一区二区在线观看 | 极品盗摄国产盗摄合集| 一区在线视频观看| 色综合男人天堂| 麻豆明星ai换脸视频| 亚洲午夜极品| 欧美激情久久久| 精品人妻一区二区三区潮喷在线 | 色综合久久久无码中文字幕波多| 99re久久| 欧美性视频一区二区三区| 日韩av自拍偷拍| 欧美挤奶吃奶水xxxxx| 中日韩午夜理伦电影免费| 国产一级片播放| 青青草成人在线观看| 国产精品10p综合二区| 成人免费高清在线播放| 亚洲制服丝袜av| 一本色道无码道dvd在线观看| 美女露胸视频在线观看| 欧美色综合网站| 国产福利在线免费| 欧美综合影院| 亚洲免费视频在线观看| 国精产品一区二区三区| 精品国精品国产自在久国产应用 | 无遮挡在线观看| 欧美一区二区精品在线| 在线视频第一页| 亚洲黄色天堂| 538国产精品视频一区二区| 91麻豆国产在线| 久久精品在线免费观看| 欧美精品久久久久久久久久久| 狠狠久久综合| 欧美一级国产精品| 少妇一级黄色片| 久久激情一区| 久久久久久99| a天堂中文在线| 亚洲日本中文字幕区| 日韩精品一区二区三区四 | 91日韩久久| 麻豆电影在线播放| 欧美三级日本三级少妇99| 亚洲午夜久久久久久久久红桃| 在线欧美不卡| 国产精品入口免费视频一| 天天av天天翘| 国产精品免费网站在线观看| 少妇一晚三次一区二区三区| 日韩一级特黄| 在线观看欧美日韩| 国产91av在线播放| 国产亚洲女人久久久久毛片| 337p粉嫩大胆噜噜噜鲁| 秋霞影院一区二区三区| 日韩在线观看免费全| 国产精品第6页| 国产传媒欧美日韩成人| 久久久久免费网| 极品美鲍一区| 欧美区在线观看| 黄色免费一级视频| 麻豆精品视频在线观看| 国产欧美日本在线| 俺来也官网欧美久久精品| 精品国产免费一区二区三区四区| 91久久免费视频| 综合亚洲视频| 国产精品男人的天堂| jizzjizz在线观看| 午夜电影久久久| 欧美大喷水吹潮合集在线观看| 久久国产影院| 91久久国产综合久久91精品网站| 亚洲欧洲精品视频| 色综合色综合色综合色综合色综合 | 西游记1978| 不卡专区在线| 日韩欧美一级二级三级久久久| 欧美黄色免费看| 成人毛片在线观看| 日韩久久一级片| 欧美天天综合| 人人爽久久涩噜噜噜网站| 国产午夜视频在线观看| 精品久久久久久久久久久久久 | 日韩av影院| 国产精品91久久| 五月婷婷丁香花| 日本二三区不卡| 国产免费一区二区三区四区| 高清不卡在线观看| 成人污网站在线观看| 风间由美中文字幕在线看视频国产欧美 | 日韩精品国产精品| 国产高清精品软男同| 成人国产一区| 欧美另类极品videosbest最新版本| 日本久久综合网| 久久久久亚洲蜜桃| 国内外成人免费激情视频| 欧美91在线| 97视频com| 9色在线视频| 精品国产污污免费网站入口 | 欧美一区二区三区粗大| 国产精品一区二区你懂的| 日韩免费一级视频| aaa国产精品视频| www.欧美三级电影.com| 日本韩国免费观看| 亚洲 欧美综合在线网络| 色屁屁草草影院ccyy.com| 久久永久免费| 日韩久久久久久久| julia一区二区三区中文字幕| 国产午夜精品免费一区二区三区| 国产精品欧美综合亚洲| 亚洲午夜一区二区| 国产白丝一区二区三区| 91在线视频观看| 777米奇影视第四色| 天堂日韩电影| 99爱精品视频| 9999热视频在线观看| 日韩av影片在线观看| 一级α片免费看刺激高潮视频| 亚洲欧美在线视频观看| 午夜免费一级片| 国产精品扒开腿做爽爽爽软件| 国产精品久久久久久久久久久久冷 | 亚洲va国产天堂va久久en| 小泽玛利亚一区| 成人免费视频app| gai在线观看免费高清| 欧美日韩影院| 99亚洲精品视频| 久久国产亚洲| 亚洲成人午夜在线| 日本精品在线播放| 国产日韩在线观看av| 亚洲a∨精品一区二区三区导航| 91国产精品电影| 啦啦啦中文在线观看日本| 久久精品在线播放| 黄视频网站在线| 亚洲国产一区自拍| www.黄色一片| 91国在线观看| 男人天堂2024| 色综合天天综合在线视频| 亚洲第一在线播放| 中文字幕日韩精品一区| 999久久久国产| 中文字幕欧美国产| 色www亚洲国产阿娇yao| 日本一区二区成人在线| 女人又爽又黄免费女仆| 久久久久久**毛片大全| 久久人人爽人人片| 国产麻豆成人传媒免费观看| 成人不卡免费视频| 国产一区二区网址| 50路60路老熟妇啪啪| 久久成人国产| 免费黄色特级片| 蜜桃精品视频在线| 中文字幕丰满乱码| 国产精品一区二区在线观看网站| 麻豆传媒在线看| 成人福利视频网站| 最新在线黄色网址| 国产亚洲一本大道中文在线| 卡一卡二卡三在线观看| 国产精品的网站| 中文字幕av久久爽av| 亚洲国产高清aⅴ视频| 欧美自拍偷拍网| 亚洲精选免费视频| 九热这里只有精品| 又紧又大又爽精品一区二区| 国产亚洲精品女人久久久久久| 国产精品九色蝌蚪自拍| 日韩黄色免费观看| 中文字幕一区日韩精品欧美| av最新在线观看| 亚洲一区二区三区四区在线| 久久av红桃一区二区禁漫| 国产无遮挡一区二区三区毛片日本| 日本一区二区在线观看视频| 国产一区二区免费在线| 一区二区免费在线观看视频| 久久久久久久久久电影| 天天色影综合网| 欧美国产日本韩| 精品人伦一区二区三电影| 中文字幕不卡的av| 精品一级少妇久久久久久久| 欧美日韩一区二区三区| 伊人久久综合视频| 欧洲视频一区二区| 午夜精品久久久久久久99| 亚洲人成免费电影| 日本国产在线| 久久中文字幕在线| 忘忧草在线日韩www影院| 欧美中文字幕在线视频| 中文在线中文资源| 91在线视频九色| 国产aa精品| 欧美午夜精品久久久久免费视| 久久不见久久见国语| 国产一二三四区在线观看| 亚洲欧洲日韩| 黄网站色视频免费观看| 日韩高清国产一区在线| 亚洲成人福利视频| 国产精品久久夜| 国产精品国产精品88| 日本丰满少妇一区二区三区| 中文字幕免费观看视频| 欧美人妇做爰xxxⅹ性高电影| 四虎成人免费在线| 一本色道久久综合亚洲精品小说 | 粉色视频免费看| 91免费国产在线观看| 小早川怜子久久精品中文字幕| 一区二区三区国产| 中文字幕乱码一区二区| 日韩毛片在线观看| 成人一级福利| 国产国语刺激对白av不卡| 日本免费一区二区三区等视频| 久久久精品动漫| 97视频热人人精品免费| 欧美xxxxx在线视频| 美女国产一区二区| wwwww在线观看| 中文字幕一区二区三区色视频| 欧美成人黄色网| 在线播放91灌醉迷j高跟美女| 欧美一级特黄aaaaaa| 欧美精品制服第一页| 在线观看福利电影| 国产精品自拍偷拍| 国产成人一区| 黄色a级在线观看| 国产一级一区二区| 日本三级日本三级日本三级极| 一区二区久久久| 怡红院成永久免费人全部视频| 亚洲午夜精品视频| 91av一区| 一区二区在线观看网站| 免费欧美日韩国产三级电影| 一级黄色录像毛片| 同产精品九九九| 91精品国产乱码久久| 日韩中文字幕在线视频| 青青久久精品| 97久久精品午夜一区二区| 欧美成人一品| 亚洲无人区码一码二码三码| 日本一区二区三区在线观看| 午夜精品免费观看| 中文字幕日韩欧美| 超级白嫩亚洲国产第一| 久久久久久久久久久久久9999| 免费在线成人| 波多野结衣办公室双飞| 国产精品久久久久精k8| 国产人妻精品一区二区三区| 亚洲人成在线免费观看| 人人鲁人人莫人人爱精品| 污视频在线免费观看一区二区三区| 精品成人久久| 亚洲在线观看网站| 亚洲国产欧美在线| 精品欧美一区二区精品少妇| 欧美激情视频一区二区三区不卡| 久久a爱视频| 国产妇女馒头高清泬20p多| 99精品在线观看视频| 久久久久久久久久久网| 欧美精品一二三| 污污网站在线看| 亚洲在线免费视频| 最新亚洲视频| 人妻aⅴ无码一区二区三区 | 亚洲综合日韩欧美| 亚洲免费观看视频| 91av久久久| 欧美刺激性大交免费视频| 人人网欧美视频| 男女激情无遮挡| 成人美女在线观看| 日本亚洲欧美在线| 在线观看亚洲区| 日韩最新av| 国产主播中文字幕| 亚洲午夜av在线| 女人18毛片一区二区三区| 国产精品6699| 日韩一级毛片| 小明看看成人免费视频| 亚洲va在线va天堂| 日韩伦理在线观看| 91精品视频在线看|