在vue項目中使用codemirror插件實現代碼編輯器功能(代碼高亮顯示及自動提示)


在vue項目中使用codemirror插件實現代碼編輯器功能(代碼高亮顯示及自動提示)

1、使用npm安裝依賴

npm install --save codemirror;

2、在頁面中放入如下代碼

<template>
  <div>
    <textarea ref="mycode" class="codesql" v-model="code" style="height:200px;width:600px;"></textarea>
  </div>
</template>
<script>
import 'codemirror/theme/ambiance.css'
import 'codemirror/lib/codemirror.css'
import 'codemirror/addon/hint/show-hint.css'

let CodeMirror = require('codemirror/lib/codemirror')
require('codemirror/addon/edit/matchbrackets')
require('codemirror/addon/selection/active-line')
require('codemirror/mode/sql/sql')
require('codemirror/addon/hint/show-hint')
require('codemirror/addon/hint/sql-hint')
export default {
  name: 'CodeMirror',
  data () {
    return {
      code: '//按Ctrl鍵進行代碼提示'
    }
  },
  mounted () {
    debugger
    let mime = 'text/x-mariadb'
    // let theme = 'ambiance'//設置主題,不設置的會使用默認主題
    let editor = CodeMirror.fromTextArea(this.$refs.mycode, {
      mode: mime, // 選擇對應代碼編輯器的語言,我這邊選的是數據庫,根據個人情況自行設置即可
      indentWithTabs: true,
      smartIndent: true,
      lineNumbers: true,
      matchBrackets: true,
      // theme: theme,
      // autofocus: true,
      // extraKeys: { Ctrl: 'autocomplete' }, // 自定義快捷鍵
      hintOptions: {
        // 自定義提示選項
        tables: {
          users: ['name', 'score', 'birthDate'],
          countries: ['name', 'population', 'size']
        }
      }
    })
    // 代碼自動提示功能,記住使用cursorActivity事件不要使用change事件,這是一個坑,那樣頁面直接會卡死
    editor.on('cursorActivity', function () {
      editor.showHint()
    })
  }
}
</script>

<style>
.codesql {
  font-size: 11pt;
  font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono,
    DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;
}
</style>

  

編譯器的事件觸發器
觸發器使用方法:(change事件為例)

this.CodeMirrorEditor.on("change",function(){
//事件觸發后執行事件
alert("change")
});
1
2
3
4
取消觸發器方法:

this.CodeMirrorEditor.off("change")
1
“changes”:每次編輯器內容更改時觸發
“beforeChange”:事件在更改生效前觸發
“cursorActivity”:當光標或選中(內容)發生變化,或者編輯器的內容發生了更改的時候觸發。
“keyHandled”:快捷鍵映射(key map)中的快捷鍵被處理(handle)后觸發
“inputRead”:當用戶輸入或粘貼時編輯器時觸發。
“electrictInput”:收到指定的electrict輸入時觸發
“beforeSelectionChange”:此事件在選中內容變化前觸發
“viewportChange”:編輯器的視口( view port )改變(滾動,編輯或其它動作)時觸發
“gutterClick”:編輯器的gutter(行號區域)點擊時觸發
“focus”:編輯器收到焦點時觸發
“blur”:編輯器失去焦點時觸發
“scroll”:編輯器滾動條滾動時觸發
“keydown”, “keypress”, “keyup”,“mousedown”, “dblclick”硬件事件觸發器
API
this.CodeMirrorEditor.setValue(“Hello Kitty”):設置編輯器內容
this.CodeMirrorEditor.getValue():獲取編輯器內容
this.CodeMirrorEditor.getLine(n):獲取第n行的內容
this.CodeMirrorEditor.lineCount():獲取當前行數
this.CodeMirrorEditor.lastLine():獲取最后一行的行號
this.CodeMirrorEditor.isClean():boolean類型判斷編譯器是否是clean的
this.CodeMirrorEditor.getSelection():獲取選中內容
this.CodeMirrorEditor.getSelections():返回array類型選中內容
this.CodeMirrorEditor.replaceSelection(“替換后的內容”):替換選中的內容
this.CodeMirrorEditor.getCursor():獲取光標位置,返回{line,char}
this.CodeMirrorEditor.setOption("",""):設置編譯器屬性
this.CodeMirrorEditor.getOption(""):獲取編譯器屬性
this.CodeMirrorEditor.addKeyMap("",""):添加key-map鍵值,該鍵值具有比原來鍵值更高的優先級
this.CodeMirrorEditor.removeKeyMap(""):移除key-map
this.CodeMirrorEditor.addOverlay(""):Enable a highlighting overlay…沒試出效果
this.CodeMirrorEditor.removeOverlay(""):移除Overlay
this.CodeMirrorEditor.setSize(width,height):設置編譯器大小
this.CodeMirrorEditor.scrollTo(x,y):設置scroll到position位置
this.CodeMirrorEditor.refresh():刷新編輯器
this.CodeMirrorEditor.execCommand(“命令”):執行命令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM