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】

change_mode_demo.png
普及一下Scheme:Scheme是一種函數(shù)式編程語(yǔ)言,是Lisp的兩種主要方言之一(另一種為Common Lisp)。【表示沒用過,js也是一種函數(shù)式編程語(yǔ)言呀!】
代碼:
change_mode_code.png

代碼分析:
【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)里面】
close_brackets_demo.png

我編輯的時(shí)候括號(hào)自動(dòng)補(bǔ)全了。

代碼【畫紅框的是需要注意的實(shí)現(xiàn)該功能的關(guān)鍵】:
close_brackets_code.png

closetag.html【針對(duì)html和xml的標(biāo)簽的自動(dòng)閉合。開始標(biāo)簽輸
![Uploading close_tag_code_170025.png . . .]

完右尖括號(hào),標(biāo)簽就會(huì)自定閉合,并且鼠標(biāo)定位到里面】
close_tag_demo.png

代碼:
close_tag_code.png

compelete.html【自動(dòng)補(bǔ)全代碼,前面也有一個(gè)自動(dòng)補(bǔ)全,有什么不一樣?這個(gè)我也沒測(cè)試出啥效果!】
auto_complete_demo.png

代碼:
auto_complete_code.png

emacs.html【綁定emacs,做類似于emacs編輯器那樣的功能。感覺應(yīng)該是很多快捷鍵的不同。從未用過emacs,不想測(cè)試,先貼圖吧!】
emacs_binding.png

【那段英文大致是: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)】
js_no_folding.png
js_folding.png
html_no_folding.png

html_folding.png
md_no_folding.png
md_folding.png

代碼:
link_script.png
【brace-fold.js】折疊js;【xml-fold.js】折疊xml和html;【markdown-fold.js】折疊md;【comment-fold.js】折疊注釋,但是測(cè)試一下只能折疊html的注釋;
html_code.png
html的結(jié)構(gòu)。
js_code.png
配置項(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退出全屏顯示】
full_screen.png
fullscreen_code.png

頁(yè)面編輯器變成了黑色,是因?yàn)橛玫搅薾ight這個(gè)theme,需要引入css以及在參數(shù)選項(xiàng)中配置theme。【extraKeys】配置快捷鍵F11和Esc。


hardwrap.html【wrap應(yīng)該是和段落相關(guān)的】
hard_wrap.png
hard_wrap_code.png

定義了一個(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