溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在Vue項目中集成Ace代碼編輯器

發(fā)布時間:2023-04-25 14:42:46 來源:億速云 閱讀:244 作者:iii 欄目:編程語言

這篇文章主要介紹“怎么在Vue項目中集成Ace代碼編輯器”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么在Vue項目中集成Ace代碼編輯器”文章能幫助大家解決問題。

簡介

Ace 是一個用 JavaScript 編寫的可嵌入代碼編輯器。它與 Sublime、Vim 和 TextMate 等原生編輯器的功能和性能相匹配。它可以很容易地嵌入到任何網(wǎng)頁和 JavaScript 應(yīng)用程序中。Ace 被維護為Cloud9 IDE的主要編輯器 ,并且是 Mozilla Skywriter (Bespin) 項目的繼承者。

特性

  • 超過 110 種語言的語法高亮顯示(可以導(dǎo)入TextMate/Sublime Text  .tmlanguage文件)

  • 超過 20 個主題(可以導(dǎo)入TextMate/Sublime Text  .tmtheme文件)

  • 自動縮進和升級

  • 一個可選的命令行

  • 處理巨大的文檔(四百萬行似乎是極限!)

  • 完全可定制的鍵綁定,包括 vim 和 Emacs 模式

  • 使用正則表達式搜索和替換

  • 突出顯示匹配的括號

  • 在軟選項卡和真實選項卡之間切換

  • 顯示隱藏字符

  • 使用鼠標拖放文本

  • 換行

  • 代碼折疊

  • 多個光標和選擇

  • 實時語法檢查器(當前為 JavaScript/CoffeeScript/CSS/XQuery)

  • 剪切、復(fù)制和粘貼功能

快速開始

  • 你也可以直接使用vue2-ace-editor ,按照步驟集成即可

  • 這里主要記錄使用ace-builds,在項目中自己封裝Ace組件

安裝
npm install ace-builds --save-dev復(fù)制代碼

安裝完的效果如下:

怎么在Vue項目中集成Ace代碼編輯器

集成

新建文件夾AceEditor

怎么在Vue項目中集成Ace代碼編輯器

在AceEditor文件,新建index.vue, 代碼如下:

<template>
  <div
    ref="editorform"
   
    style="height: 250px"
  >
  </div>
</template>

<script>
import ace from 'ace-builds'
import './webpack-resolver' // 自定義webpack-resolver,按需引入
import 'ace-builds/src-noconflict/mode-json'
import 'ace-builds/src-noconflict/mode-mysql'
import 'ace-builds/src-noconflict/mode-text'
import 'ace-builds/src-noconflict/theme-tomorrow'
import 'ace-builds/src-min-noconflict/ext-language_tools'
import { onMounted, onBeforeUnmount, ref, watch } from '@vue/composition-api'

export default {
  name: 'AceEditor',
  emits: ['onChange'],
  props: {
    value: {
      type: String,
      default: '',
    },
    // 這里可以接收更多組件傳遞的參數(shù),做一些自定義效果
  },
  setup(props, vm) {
    let editor = null
    const editorform = ref(null)
    let options = {
      theme: 'ace/theme/tomorrow', // 主題
      mode: 'ace/mode/mysql', // 代碼匹配模式
      tabSize: 2, //標簽大小
      fontSize: 14, //設(shè)置字號
      wrap: true, // 用戶輸入的sql語句,自動換行
      enableSnippets: true, // 啟用代碼段
      showLineNumbers: true, // 顯示行號
      enableLiveAutocompletion: true, // 啟用實時自動完成功能 (比如:智能代碼提示)
      enableBasicAutocompletion: true, // 啟用基本自動完成功能
      scrollPastEnd: true, // 滾動位置
      highlightActiveLine: true, // 高亮當前行
    }

    const init = () => {
      if (editor) {
        //實例銷毀
        editor.destroy()
      }
      //初始化
      editor = ace.edit(editorform.value, options)
      editor.setValue(props.value ? props.value : '') // 設(shè)置內(nèi)容
      editor.on('change', () => {
        vm.emit('onChange', editor.getValue())
      })
    }
    
    onMounted(() => {
      init()
    })
    
    onBeforeUnmount(() => {
      editor.destroy()
      editor.container.remove()
    })
    return {
      editorform
    }
  },
}
</script>

<style>
@import '~ace-builds/css/ace.css';
</style>

關(guān)于webpack-resolver.js的優(yōu)化

在 webpack 環(huán)境中需要導(dǎo)入webpack-resolver.js,我們先看下node_modules/ace-builds/webpack-resolver.js文件,里面大部分模塊是我們用不到的,直接引入的話,會大大增加項目包的體積,所以這里我們需要做下優(yōu)化:按需引入怎么在Vue項目中集成Ace代碼編輯器在AceEditor文件,新建webpack-resolver.js, 代碼如下:

ace.config.setModuleUrl('ace/mode/mysql', require('file-loader?esModule=false!ace-builds/src-noconflict/mode-mysql.js'))
ace.config.setModuleUrl('ace/mode/text', require('file-loader?esModule=false!ace-builds/src-noconflict/mode-text.js'))
ace.config.setModuleUrl('ace/mode/json', require('file-loader?esModule=false!ace-builds/src-noconflict/mode-json.js'))
ace.config.setModuleUrl('ace/theme/tomorrow', require('file-loader?esModule=false!ace-builds/src-noconflict/theme-tomorrow.js'))
ace.config.setModuleUrl('ace/ext/language_tools', require('file-loader?esModule=false!ace-builds/src-noconflict/ext-language_tools.js'))

在項目的src目錄下,新建registAce.js

import ACE from '@/components/AceEditor' // 這里是你創(chuàng)建的AceEditor文件夾的路徑
 
export default {
  install(Vue) {
    Vue.component('ace', ACE)
  },
}

在 Vue 項目的入口文件 main.js 中引入 Ace 模塊,Vue.use()全局注冊ace組件

import ace from 'ace-builds'
import RegistAce from './registAce'

Vue.use(ace)
Vue.use(RegistAce)

使用ace組件(全局組件)

<ace v-model="content" @onChange="onChange"> </ace>

以上,就在Vue項目中完成了Ace的簡單集成,更多功能可以參考官網(wǎng): Ace官網(wǎng)

配置項

官網(wǎng)wiki: github.com/ajaxorg/ace…

Core ace components (editor, session, renderer, mouseHandler) implement optionProvider interface

setOption(optionName, optionValue)
setOptions({
    optionName : optionValue
    ...
})
getOption(optionName)
getOptions()

以下是配置選項的列表。除非另有說明,否則選項值為布爾值。

editor.setOption也會修改session/renderer/$mouseHandler與之關(guān)聯(lián)的選項

editor options
選項名值類型默認值可選值功能
selectionStyleStringtextline | text選中樣式
highlightActiveLineBooleantrue-高亮當前行
highlightSelectedWordBooleantrue-高亮選中文本
readOnlyBooleanfalse-是否只讀
cursorStyleStringaceace | slim | smooth | wide光標樣式
mergeUndoDeltasString | Booleanfalsealways合并撤銷
behavioursEnabledBooleantrue-啟用行為
wrapBehavioursEnabledBooleantrue-啟用換行
autoScrollEditorIntoViewBooleanfalse-啟用滾動
copyWithEmptySelectionBooleantrue-復(fù)制空格
useSoftTabsBooleanfalse-使用軟標簽
navigateWithinSoftTabsBooleanfalse-軟標簽跳轉(zhuǎn)
enableMultiselectBooleanfalse-選中多處
renderer options
選項名值類型默認值可選值功能
hScrollBarAlwaysVisibleBooleanfalse-縱向滾動條始終可見
vScrollBarAlwaysVisibleBooleanfalse-橫向滾動條始終可見
highlightGutterLineBooleantrue-高亮邊線
animatedScrollBooleanfalse-滾動動畫
showInvisiblesBooleanfalse-顯示不可見字符
showPrintMarginBooleantrue-顯示打印邊距
printMarginColumnNumber80-設(shè)置頁邊距
printMarginBoolean | Numberfalse-顯示并設(shè)置頁邊距
fadeFoldWidgetsBooleanfalse-淡入折疊部件
showFoldWidgetsBooleantrue-顯示折疊部件
showLineNumbersBooleantrue-顯示行號
showGutterBooleantrue-顯示行號區(qū)域
displayIndentGuidesBooleantrue-顯示參考線
fontSizeNumber | Stringinherit-設(shè)置字號
fontFamilyStringinherit
設(shè)置字體
maxLinesNumber--至多行數(shù)
minLinesNumber--至少行數(shù)
scrollPastEndBoolean | Number0-滾動位置
fixedWidthGutterBooleanfalse-固定行號區(qū)域?qū)挾?/td>
themeString--主題引用路徑,例如"ace/theme/textmate"
mouseHandler options
選項名值類型默認值可選值備注
scrollSpeedNumber--滾動速度
dragDelayNumber--拖拽延時
dragEnabledBooleantrue-是否啟用拖動
focusTimoutNumber--聚焦超時
tooltipFollowsMouseBooleanfalse-鼠標提示
session options
選項名值類型默認值可選值備注
firstLineNumberNumber1-起始行號
overwriteBoolean--重做
newLineModeStringautoauto | unix | windows新開行模式
useWorkerBoolean--使用輔助對象
useSoftTabsBoolean--使用軟標簽
tabSizeNumber--標簽大小
wrapBoolean--換行
foldStyleString-markbegin | markbeginend | manual折疊樣式
modeString--代碼匹配模式,例如“ace/mode/text"
editor options defined by extensions
選項名值類型默認值可選值備注
enableBasicAutocompletionBoolean--啟用基本自動完成
enableLiveAutocompletionBoolean--啟用實時自動完成
enableSnippetsBoolean--啟用代碼段
enableEmmetBoolean--啟用Emmet
useElasticTabstopsBoolean--使用彈性制表位

解決光標錯位問題

當在編輯器中輸入內(nèi)容的時候,會出現(xiàn)光標錯位的問題,開始看起來是正常的,輸入的內(nèi)容越多,光標錯位越多怎么在Vue項目中集成Ace代碼編輯器一通排查,發(fā)現(xiàn)是因為使用了非等寬字體,導(dǎo)致計算不準確,將編輯框里面的字體設(shè)置為等寬字體即可解決問題

??注意:這里還有個小坑,在設(shè)置等寬字體時需要區(qū)分Mac、Windows

  • Mac 下可以使用monospace字體

  • Windows 下可以使用 Consolas 字體

關(guān)于“怎么在Vue項目中集成Ace代碼編輯器”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI