CodeMirror学习(2)

changemode.html【支持一种语言到另一种语言模式的转换;示例中是Scheme mode和JS mode的相互转换。编辑器会自动监测编辑框内用户输入的代码是哪一种mode,检测之后就会更改它的mode】

change_mode_demo.png
普及一下Scheme:Scheme是一种函数式编程语言,是Lisp的两种主要方言之一(另一种为Common Lisp)。【表示没用过,js也是一种函数式编程语言呀!】
代码:
change_mode_code.png

代码分析:
【1、因为示例只是js和scheme这两种mode的转换,所以只需要额外加载这两个js文件,如果是其它或多个mode,就需要加载相应的mode文件夹下的js】
【2、当用户在编辑框内输入字符,会触发编辑框editor的change事件,此时调用更新函数update。同样使用setTimeout,400ms的延迟也是为了提升页面的性能。】
【3、函数update的功能是进行模式的转换,用到的API是:editor.setOption('mode', ...)
【4、关于editor如何检测用户输入的字符的mode,就用到了正则,函数looksLikeScheme是用来判断像不像Scheme mode,正则则是用来检测是否是JS mode】


closebrackets.html【括号的自动补全,这个很简单,就是闭合括号。你只输入括号的前一半,后一半就会自动补全,并且鼠标也会定位在括号里面】
close_brackets_demo.png

我编辑的时候括号自动补全了。

代码【画红框的是需要注意的实现该功能的关键】:
close_brackets_code.png

closetag.html【针对html和xml的标签的自动闭合。开始标签输
![Uploading close_tag_code_170025.png . . .]

完右尖括号,标签就会自定闭合,并且鼠标定位到里面】
close_tag_demo.png

代码:
close_tag_code.png

compelete.html【自动补全代码,前面也有一个自动补全,有什么不一样?这个我也没测试出啥效果!】
auto_complete_demo.png

代码:
auto_complete_code.png

emacs.html【绑定emacs,做类似于emacs编辑器那样的功能。感觉应该是很多快捷键的不同。从未用过emacs,不想测试,先贴图吧!】
emacs_binding.png

【那段英文大致是:Emacs绑定需要包括keymap文件夹下的emacs.js,另外在可选参数中设置keyMap: emacs。因为CodeMirror内部的API与Emacs有很大的不同,因此这个功能也只是做到了大致与Emacs相仿。另外许多浏览器的快捷键也和Emacs的快捷键有冲突,因此Emacs绑定不能做到十全十美。】

代码【加载的那些js和css不知道都是用来做什么的?以后有需要再来研究,毕竟Emacs现在不是主要的。】:
emacs_bindind_code.png

folding.html【针对文件夹的?并不是,代码折叠,方便代码量大的时候搜索查看代码结构】
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】折叠注释,但是测试一下只能折叠html的注释;
html_code.png
html的结构。
js_code.png
配置项:【extraKeys】快捷键折叠,把鼠标放在那一行,然后按该快捷键,就会折叠;【foldGutter】要启用折叠功能的话,就写true;【gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"]】为每一行前折叠的图标留位置,在行号后面。【editor_js.foldCode(CodeMirror.Pos(13, 0));。。。】这不知道是干嘛的?我去掉了也可以折叠,以后再探究。

fullscreen.html【全屏显示,按F11全屏显示,按Esc退出全屏显示】
full_screen.png
fullscreen_code.png

页面编辑器变成了黑色,是因为用到了night这个theme,需要引入css以及在参数选项中配置theme。【extraKeys】配置快捷键F11和Esc。


hardwrap.html【wrap应该是和段落相关的】
hard_wrap.png
hard_wrap_code.png

定义了一个option变量,应该就是段落的长度,超过改长度就会到下一行。还配置了一个快捷键【Ctrl+Q】,将setTimeout的时间设置大一点,然后再页面中做修改,再按快捷键,会体会到和定时器的回调起的一样的作用。


html5complete.html【html5的代码提示,需要按快捷键,不是自动提示的。】
html5_complete.png

我在html页面中编辑,然后按快捷键,Ctrl+A,就会提示。但是图截不下来,<body>下面那个d会提示以d开头的单词。

代码:
html5_complete_code.png
【各种hint应该不能少,原来配置的快捷键是Ctrl+Space,但是这个快捷键是系统改变输入法的,有冲突,因此改成了Ctrl+A,之前的一个demo中Ctrl+Space无法工作的原因应该就是这个】

indentwrap.html【也是和段落相关,段落内部,一个段落按了enter之后是对齐的】
indent_wrap.png
indent_wrap_code.png

renderLine事件和refresh方法【不会用啊,这些API,有没有API的中文文档???】。配置lineWrapping。


lint.html【检测代码是否有语法错误】

lint.png
代码:
lint_code.png
如果没有gutters: ["CodeMirror-lint-markers"], lint: true这两个配置,那么页面中的警示和出错的提示就没有了。


loadmode.html【模式的惰性加载:用户输入后按enter或者点击按钮后才加载该模式】
load_mode.png

代码:
load_mode_html.png
load_mode_js.png
第一行的作用应该就是匹配mode文件夹下的各种mode,因为用户输入的mode是不确定的,因此不能再一开始就引入所有的mode,而是根据用户输入按需要引入。用户输入完成后按enter键或者点击按钮调用change函数。可以输入3种类型:文件名【根据名称后缀来确定mode】、MIME类型、直接就输入mode。

marker.html【添加断点,但是好像不能调试】

breakpoint.png
代码:
breakpoint_code.png
注意js只有一句话:eval了一个字符串。该字符串才是真正要执行的js代码。
breakpoint_js.png
编辑器有一个gutterClick事件,可以理解为显示行号的位置就是gutter,用户点击后触发回调,在gutter上添加断点符号。配置gutters: ["CodeMirror-linenumbers", "breakpoints"]不能少,要不然就没有gutters来放置断点符号了。但是这个断点也只是添加一个符号而已,并没有可以调试的功能,以后再慢慢摸索。


markselection.html【鼠标点击选中后的样式的改变,背景色和字体的颜色】

mark_selection.png

代码:
mark_selection_code.png
配置styleSelectedText: true表示选中后文本颜色是否改变,该值为true表示字体颜色会变成在css中定义的,否则就不变,选中后字体还是黑色的。editor.markText({line: 6, ch: 26}, {line: 6, ch: 42}, {className: "styled-background"});这段代码是为页面中特定位置的字符添加类,从而有自己的样式,此例中的background color。


matchhighlighter.html【点击某个单词-匹配-全局高亮】

match_hightlighter.png
代码:
match_highlighter_code.png
配置highlightSelectionMatches: {showToken: /\w/, annotateScrollbar: true}如果没有,该功能就不会实现。annotateScrollbar: false如果是false,则滚动轴上面就不会标记。showToken: /\w/应该就是匹配单词字符。


matchtags.html【匹配标签:点击选中标签的一半,另一半也会高亮】

match_tag.png
代码:
match_tag_code.png
配置:matchTags: {bothTags: true},如果为false就没有该功能。快捷键Ctrl+J的功能是:用户点击选中一部分标签以后,按Ctrl+J,就会定位到标签的另一部分。

<== 未完待续 ==>


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容