精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩无套无码精品| 精品国产二区在线| 美国黄色小视频| 国产欧美啪啪| 日本韩国一区二区| 欧美一二三不卡| 你懂的视频在线| 国产酒店精品激情| 日本成人黄色片| 亚洲色婷婷一区二区三区| 妖精一区二区三区精品视频| 8v天堂国产在线一区二区| 久草免费福利在线| 视频一区二区三区不卡 | 在线观看免费视频高清游戏推荐| h片在线免费| 国产日产欧美一区二区视频| 成人欧美一区二区三区视频| 做爰视频毛片视频| 激情91久久| 日韩小视频网址| 中文精品在线观看| 97精品久久| 欧美精品视频www在线观看| 秋霞无码一区二区| av片在线观看永久免费| 中文字幕精品三区| 久久香蕉综合色| 亚洲精品久久久久久久久久久久久久 | 久久久美女视频| 日韩免费久久| 亚洲午夜精品久久久久久久久久久久| 一边摸一边做爽的视频17国产 | 无码人妻精品一区二区三区不卡| 88国产精品视频一区二区三区| 亚洲色图美腿丝袜| 久久久午夜精品福利内容| 国产不卡精品在线| 欧美三区在线视频| www.xxx亚洲| 成人教育av| 大伊人狠狠躁夜夜躁av一区| 国产精品自拍合集| 中文在线免费| 悠悠色在线精品| 综合网五月天| 秋霞成人影院| 中文字幕一区二区三区在线播放 | 亚洲福利电影| 欧美激情精品久久久久久大尺度 | 日本japanese极品少妇| 中文字幕一区二区三区中文字幕| 欧美一区二区不卡视频| 久久久久xxxx| 韩国一区二区三区视频| 91精品国产综合久久精品麻豆| 91久久精品日日躁夜夜躁国产| 国产日产欧美一区二区| 爱久久·www| 国产精品视频观看| 在线视频不卡国产| 国产精品剧情| 亚洲精品国产高清久久伦理二区| 欧美a级免费视频| 色呦呦呦在线观看| 在线观看免费黄色网址| 日本精品久久久久| 成人av在线一区二区| 成人av网站观看| 午夜精品久久久久久久99| 成人中文字幕合集| 精品久久久久久中文字幕动漫| 男人天堂手机在线观看| 久久影院午夜论| 香蕉久久免费影视| av免费在线免费观看| 亚洲国产精品久久艾草纯爱| 免费成人午夜视频| 欧美日韩精品一区二区三区视频| 欧美日韩在线不卡| 日本一二三区在线| 北条麻妃一区二区三区在线| 日韩国产精品视频| 中文字幕黄色网址| 欧美日韩mv| 日韩av电影在线播放| 中文字幕欧美在线观看| 韩国三级电影一区二区| 国产日韩一区二区三区| 国产在线视频网站| 亚洲男人都懂的| 久久久免费视频网站| 日本国产亚洲| 日韩av在线直播| 国产精品免费在线视频| 伊人久久大香线蕉综合热线| 国产99视频精品免视看7| 国产一区二区在线视频观看| 播五月开心婷婷综合| 亚洲精品日韩精品| heyzo在线播放| 欧美视频一区二区三区| 少妇伦子伦精品无吗| 国产伦精品一区二区三区视频| 久久国产精品电影| 中文字幕xxxx| 成人网男人的天堂| 一区二区三区av在线| 亚洲福利影院| 欧美成人乱码一区二区三区| 精品无码在线观看| 精品福利电影| 国产在线观看91精品一区| 亚洲人成色777777老人头| 亚洲天堂a在线| 成年人在线看片| 免费萌白酱国产一区二区三区| 精品国产一区二区三区久久狼5月| 西西44rtwww国产精品| 国产精品一区二区不卡| 日韩视频精品| 在线成人av观看| 欧美变态tickle挠乳网站| 国产7777777| 久久精品电影| 国内精品一区二区| 日韩伦理av| 91麻豆精品国产91久久久久久 | 国产成人av影院| 欧美 日韩 国产 在线观看| 我爱我色成人网| 亚洲精品av在线播放| 久久久久黄色片| 国精产品一区一区三区mba视频| 欧美一区二区三区在线播放| 极品美鲍一区| 亚洲国产中文字幕久久网 | 欧美午夜激情视频| 国产伦精品一区二区三区精品| 亚洲午夜精品一区 二区 三区| 国产精品久久久av久久久| 伦理片一区二区三区| 精品国产91久久久久久| 久久性爱视频网站| 99视频一区| 国产视频在线观看一区| 大香伊人久久| 亚洲а∨天堂久久精品9966| 久久一级黄色片| 成人性生交大合| 99色这里只有精品| 国产精品中文字幕制服诱惑| 欧美黑人性视频| 国模私拍视频在线| 亚洲一区二区三区视频在线| 国产艳妇疯狂做爰视频| 日韩五码在线| 免费成人在线观看av| 久久毛片亚洲| 少妇高潮久久久久久潘金莲| 在线观看黄色网| 亚洲视频免费在线观看| 国产调教打屁股xxxx网站| 国内精品久久久久久久97牛牛| 不卡一区二区三区视频| 末成年女av片一区二区下载| 亚洲人成电影网站| 中文在线观看免费高清| 自拍偷拍国产亚洲| 日本精品一二三| 亚洲专区欧美专区| 亚洲电影一二三区| 国产精品美女久久久久| 久久久久久久久网站| 日本五码在线| 91国模大尺度私拍在线视频| 婷婷国产成人精品视频| 国产精品1区2区| aa在线观看视频| 国产成人精品一区二区免费看京| 国产日韩欧美在线播放| 尤物在线网址| 亚洲欧美在线第一页| 在线观看中文字幕码| 亚洲国产一区二区在线播放| 中国毛片在线观看| 国产最新精品精品你懂的| 日韩中文字幕在线免费| 精品一二三区| 日韩天天综合| 国产精品一区二区在线观看| 成人香蕉视频| 久久久国产精品一区| 天堂av一区二区三区| 欧美性一二三区| 久久久久无码精品国产| 久久精品夜夜夜夜久久| 国产调教打屁股xxxx网站| 日韩精彩视频在线观看| 国产a级黄色大片| 成人aaaa| 狠狠干一区二区| www.久久热| 欧美激情精品久久久| 91露出在线| 亚洲国产精品免费| 91精品国产乱码久久久久| 五月激情综合色| 成人一级黄色大片| 久久精品人人做人人爽97| 欧美日韩久久婷婷| 日韩高清一区二区| 日韩精品视频在线观看视频| 91久久夜色精品国产按摩| 久久精品国产综合精品| 欧美经典一区| 国产免费久久av| 超碰一区二区| 国产91精品青草社区| 午夜av在线播放| 色偷偷av一区二区三区| 男同在线观看| 亚洲国产一区二区三区四区| www.激情五月.com| 欧美日韩精品二区第二页| www成人在线| 亚洲已满18点击进入久久| 国产一区在线观看免费| 欧美激情一区二区三区| 日韩精品卡通动漫网站| 成人国产精品免费网站| 污视频在线观看免费网站| 麻豆91在线观看| 日本www.色| 久久婷婷麻豆| 欧美一级片中文字幕| 亚洲精品影视| 老太脱裤让老头玩ⅹxxxx| 国产综合激情| 成年人看的毛片| 亚洲精品日本| 国产黄色一级网站| 亚洲永久字幕| 91黄色小网站| 视频一区欧美精品| 亚洲免费av一区二区三区| 日韩精品视频网站| 午夜免费一区二区| 久久精品国产久精国产| 污版视频在线观看| 麻豆精品一区二区av白丝在线| 成人亚洲精品777777大片| 日韩激情视频在线观看| 麻豆一区二区三区视频| 久久机这里只有精品| 天天干天天操天天做| 狠狠色狠狠色合久久伊人| 特种兵之深入敌后| 成人污污视频在线观看| av网站有哪些| 国产拍欧美日韩视频二区| 欧美人与禽zoz0善交| 亚洲日本在线a| 久久久国产成人| 五月综合激情婷婷六月色窝| 可以免费看的av毛片| 在线观看视频一区二区 | 亚洲一区免费| 好男人www社区| 精品系列免费在线观看| 粗大的内捧猛烈进出视频| 成人一区在线看| 欧美图片一区二区| 国产精品美女久久久久久久网站| 小泽玛利亚一区| 亚洲午夜精品在线| 亚洲天堂男人av| 91精品国产欧美一区二区18| 欧美一区二区在线观看视频| 亚洲欧美日韩区| 午夜视频成人| 午夜精品美女自拍福到在线| 性感美女一区二区在线观看| 91精品综合视频| 精品视频高潮| 亚洲精品高清视频| 欧美日韩精选| 久久精品99国产| 国产一区二区中文字幕| 久久午夜夜伦鲁鲁片| 中文字幕在线观看不卡视频| 91久久国产视频| 欧美日韩国产综合一区二区| 后入内射欧美99二区视频| 亚洲午夜精品久久久久久性色| 污污片在线免费视频| 日本韩国欧美精品大片卡二| 玖玖玖电影综合影院| 蜜桃久久影院| 国产综合网站| 中文字幕免费高清在线| 91在线精品一区二区三区| 欧美a级片免费看| 黑人巨大精品欧美一区二区一视频| 中文字幕视频免费观看| 亚洲国产一区二区三区在线观看| 麻豆最新免费在线视频| 欧美重口另类videos人妖| 久久伦理中文字幕| 日韩精品福利视频| 99国产精品| 能看毛片的网站| 亚洲欧美在线视频| 蜜臀99久久精品久久久久小说| 精品欧美一区二区三区精品久久| 三级外国片在线观看视频| 欧美一级电影免费在线观看| 亚洲精品在线a| 伊人天天久久大香线蕉av色| 日日欢夜夜爽一区| 亚洲蜜桃精久久久久久久久久久久| 一区二区三区欧美亚洲| 国产一区二区三区三州| 国产一区二区三区在线看| 黄色污网站在线观看| 99国产精品久久久久老师| 欧美电影免费| 少妇激情一区二区三区| 久久综合九色综合97婷婷女人| 久久精品人妻一区二区三区| 日韩欧美的一区二区| 黄网站在线免费看| 91精品免费视频| 色爱综合网欧美| 亚洲天堂av线| 日本一区二区免费在线观看视频| 亚洲欧美偷拍视频| 国产午夜精品麻豆| 欧美男男tv网站在线播放| 精品国产91亚洲一区二区三区www| 极品少妇一区二区三区| 亚洲香蕉中文网| 午夜电影久久久| 手机看片一区二区| 午夜伦理精品一区| 亚洲第一论坛sis| 黑人糟蹋人妻hd中文字幕 | 天海翼在线视频| 欧美日韩视频一区二区| 香蕉视频在线播放| 成人国产亚洲精品a区天堂华泰| 色乱码一区二区三区网站| 欧美美女一级片| 亚洲视频网在线直播| 精品人妻少妇AV无码专区| 欧美激情视频网站| 国产福利一区二区精品秒拍| 欧美精品自拍视频| 26uuu精品一区二区| 精品一区二区无码| 中文字幕亚洲字幕| 综合久久伊人| 蜜臀精品一区二区| 99久久国产免费看| 国产主播第一页| 日韩小视频在线| h视频久久久| 熟女人妇 成熟妇女系列视频| 国产日韩欧美精品综合| 国产尤物在线观看| 欧美黄色片视频| 亚洲精品国模| 性欧美videossex精品| 亚洲精品乱码久久久久久黑人| 丰满大乳国产精品| 国产成人一区二区三区小说 | 91在线国内视频| 亚洲一区二区激情| 欧美精品18videosex性欧美| 最新精品国偷自产在线| 色呦色呦色精品| 性做久久久久久久久| www.在线视频.com| 2019国产精品视频| 欧美综合国产| 成人在线观看免费完整| 亚洲国产精久久久久久久| 欧美暴力调教| 欧美日韩午夜爽爽| 久久久精品欧美丰满| 精品国产无码AV| 国产精品观看在线亚洲人成网| 午夜视频精品| www亚洲色图| 欧美精品一区二| 成人污污视频| www.超碰com| 亚洲国产精品一区二区www在线| 亚洲成人三级| 久久久影院一区二区三区|