CodeMirror學(xué)習(xí)(2)
changemode.html【支持一種語(yǔ)言到另一種語(yǔ)言模式的轉(zhuǎn)換;示例中是Scheme mode和JS mode的相互轉(zhuǎn)換。編輯器會(huì)自動(dòng)監(jiān)測(cè)編輯框內(nèi)用戶輸入的代碼是哪一種mode,檢測(cè)之后就會(huì)更改它的mode】
普及一下Scheme:Scheme是一種函數(shù)式編程語(yǔ)言,是Lisp的兩種主要方言之一(另一種為Common Lisp)。【表示沒用過,js也是一種函數(shù)式編程語(yǔ)言呀!】
代碼:
代碼分析:
【1、因?yàn)槭纠皇莏s和scheme這兩種mode的轉(zhuǎn)換,所以只需要額外加載這兩個(gè)js文件,如果是其它或多個(gè)mode,就需要加載相應(yīng)的mode文件夾下的js】
【2、當(dāng)用戶在編輯框內(nèi)輸入字符,會(huì)觸發(fā)編輯框editor的change事件,此時(shí)調(diào)用更新函數(shù)update。同樣使用setTimeout,400ms的延遲也是為了提升頁(yè)面的性能?!?br>
【3、函數(shù)update的功能是進(jìn)行模式的轉(zhuǎn)換,用到的API是:editor.setOption('mode', ...)】
【4、關(guān)于editor如何檢測(cè)用戶輸入的字符的mode,就用到了正則,函數(shù)looksLikeScheme是用來判斷像不像Scheme mode,正則則是用來檢測(cè)是否是JS mode】
closebrackets.html【括號(hào)的自動(dòng)補(bǔ)全,這個(gè)很簡(jiǎn)單,就是閉合括號(hào)。你只輸入括號(hào)的前一半,后一半就會(huì)自動(dòng)補(bǔ)全,并且鼠標(biāo)也會(huì)定位在括號(hào)里面】
我編輯的時(shí)候括號(hào)自動(dòng)補(bǔ)全了。
代碼【畫紅框的是需要注意的實(shí)現(xiàn)該功能的關(guān)鍵】:
closetag.html【針對(duì)html和xml的標(biāo)簽的自動(dòng)閉合。開始標(biāo)簽輸
![Uploading close_tag_code_170025.png . . .]
完右尖括號(hào),標(biāo)簽就會(huì)自定閉合,并且鼠標(biāo)定位到里面】
代碼:
compelete.html【自動(dòng)補(bǔ)全代碼,前面也有一個(gè)自動(dòng)補(bǔ)全,有什么不一樣?這個(gè)我也沒測(cè)試出啥效果!】
代碼:
emacs.html【綁定emacs,做類似于emacs編輯器那樣的功能。感覺應(yīng)該是很多快捷鍵的不同。從未用過emacs,不想測(cè)試,先貼圖吧!】
【那段英文大致是:Emacs綁定需要包括keymap文件夾下的emacs.js,另外在可選參數(shù)中設(shè)置keyMap: emacs。因?yàn)镃odeMirror內(nèi)部的API與Emacs有很大的不同,因此這個(gè)功能也只是做到了大致與Emacs相仿。另外許多瀏覽器的快捷鍵也和Emacs的快捷鍵有沖突,因此Emacs綁定不能做到十全十美?!?br>
代碼【加載的那些js和css不知道都是用來做什么的?以后有需要再來研究,畢竟Emacs現(xiàn)在不是主要的?!浚?div id="u0z1t8os" class="image-package">
emacs_bindind_code.png
folding.html【針對(duì)文件夾的?并不是,代碼折疊,方便代碼量大的時(shí)候搜索查看代碼結(jié)構(gòu)】
代碼:【brace-fold.js】折疊js;【xml-fold.js】折疊xml和html;【markdown-fold.js】折疊md;【comment-fold.js】折疊注釋,但是測(cè)試一下只能折疊html的注釋;html的結(jié)構(gòu)。配置項(xiàng):【extraKeys】快捷鍵折疊,把鼠標(biāo)放在那一行,然后按該快捷鍵,就會(huì)折疊;【foldGutter】要啟用折疊功能的話,就寫true;【gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"]】為每一行前折疊的圖標(biāo)留位置,在行號(hào)后面?!緀ditor_js.foldCode(CodeMirror.Pos(13, 0));。。?!窟@不知道是干嘛的?我去掉了也可以折疊,以后再探究。
fullscreen.html【全屏顯示,按F11全屏顯示,按Esc退出全屏顯示】
頁(yè)面編輯器變成了黑色,是因?yàn)橛玫搅薾ight這個(gè)theme,需要引入css以及在參數(shù)選項(xiàng)中配置theme。【extraKeys】配置快捷鍵F11和Esc。
hardwrap.html【wrap應(yīng)該是和段落相關(guān)的】
定義了一個(gè)option變量,應(yīng)該就是段落的長(zhǎng)度,超過改長(zhǎng)度就會(huì)到下一行。還配置了一個(gè)快捷鍵【Ctrl+Q】,將setTimeout的時(shí)間設(shè)置大一點(diǎn),然后再頁(yè)面中做修改,再按快捷鍵,會(huì)體會(huì)到和定時(shí)器的回調(diào)起的一樣的作用。
html5complete.html【html5的代碼提示,需要按快捷鍵,不是自動(dòng)提示的?!?div id="u0z1t8os" class="image-package">
html5_complete.png
我在html頁(yè)面中編輯,然后按快捷鍵,Ctrl+A,就會(huì)提示。但是圖截不下來,<body>下面那個(gè)d會(huì)提示以d開頭的單詞。
代碼:
【各種hint應(yīng)該不能少,原來配置的快捷鍵是Ctrl+Space,但是這個(gè)快捷鍵是系統(tǒng)改變輸入法的,有沖突,因此改成了Ctrl+A,之前的一個(gè)demo中Ctrl+Space無法工作的原因應(yīng)該就是這個(gè)】
indentwrap.html【也是和段落相關(guān),段落內(nèi)部,一個(gè)段落按了enter之后是對(duì)齊的】
renderLine事件和refresh方法【不會(huì)用啊,這些API,有沒有API的中文文檔???】。配置lineWrapping。
lint.html【檢測(cè)代碼是否有語(yǔ)法錯(cuò)誤】
代碼:如果沒有gutters: ["CodeMirror-lint-markers"], lint: true這兩個(gè)配置,那么頁(yè)面中的警示和出錯(cuò)的提示就沒有了。
loadmode.html【模式的惰性加載:用戶輸入后按enter或者點(diǎn)擊按鈕后才加載該模式】
代碼:
第一行的作用應(yīng)該就是匹配mode文件夾下的各種mode,因?yàn)橛脩糨斎氲膍ode是不確定的,因此不能再一開始就引入所有的mode,而是根據(jù)用戶輸入按需要引入。用戶輸入完成后按enter鍵或者點(diǎn)擊按鈕調(diào)用change函數(shù)??梢暂斎?種類型:文件名【根據(jù)名稱后綴來確定mode】、MIME類型、直接就輸入mode。
marker.html【添加斷點(diǎn),但是好像不能調(diào)試】
代碼:注意js只有一句話:eval了一個(gè)字符串。該字符串才是真正要執(zhí)行的js代碼。編輯器有一個(gè)gutterClick事件,可以理解為顯示行號(hào)的位置就是gutter,用戶點(diǎn)擊后觸發(fā)回調(diào),在gutter上添加斷點(diǎn)符號(hào)。配置gutters: ["CodeMirror-linenumbers", "breakpoints"]不能少,要不然就沒有g(shù)utters來放置斷點(diǎn)符號(hào)了。但是這個(gè)斷點(diǎn)也只是添加一個(gè)符號(hào)而已,并沒有可以調(diào)試的功能,以后再慢慢摸索。
markselection.html【鼠標(biāo)點(diǎn)擊選中后的樣式的改變,背景色和字體的顏色】
代碼:配置styleSelectedText: true表示選中后文本顏色是否改變,該值為true表示字體顏色會(huì)變成在css中定義的,否則就不變,選中后字體還是黑色的。editor.markText({line: 6, ch: 26}, {line: 6, ch: 42}, {className: "styled-background"});這段代碼是為頁(yè)面中特定位置的字符添加類,從而有自己的樣式,此例中的background color。
matchhighlighter.html【點(diǎn)擊某個(gè)單詞-匹配-全局高亮】
代碼:
match_highlighter_code.png
配置highlightSelectionMatches: {showToken: /\w/, annotateScrollbar: true}如果沒有,該功能就不會(huì)實(shí)現(xiàn)。annotateScrollbar: false如果是false,則滾動(dòng)軸上面就不會(huì)標(biāo)記。showToken: /\w/應(yīng)該就是匹配單詞字符。
matchtags.html【匹配標(biāo)簽:點(diǎn)擊選中標(biāo)簽的一半,另一半也會(huì)高亮】
代碼:配置:matchTags: {bothTags: true},如果為false就沒有該功能??旖萱ICtrl+J的功能是:用戶點(diǎn)擊選中一部分標(biāo)簽以后,按Ctrl+J,就會(huì)定位到標(biāo)簽的另一部分。
<== 未完待續(xù) ==>
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
序言 概述 初始配置 代碼塊代碼塊在 Org-mode 中代碼塊在 Babel 中 源代碼執(zhí)行示例RubyShel...
教程存檔Github 序|Preface 先來一篇有趣的簡(jiǎn)介:Emacs和Vim:神的編輯器和編輯器之神 - 51...
北魏企鵝閱讀 141,603評(píng)論 18贊 223 昨天讀了浵媽的一篇文章,深有感觸。也許生活就是滿地的瑣碎雞毛,但確實(shí)不應(yīng)該讓自己的生活被這些雞毛團(tuán)團(tuán)圍住,讓...