[CodeMirror] 原始文本数据中有占位符(例如:{1}),想在 CodeMirror 显示代码的时候对占位符进行映射,显示为别的字符串(例如:$globalVariable1),基于不替换文本的条件下该如何实现?

2015-04-25 00:58:03 +08:00
 q84629462

声明:
占位符:假设为{1},{2},{3}这种格式,当然也可以为{a},{b},{c},{d};
CodeMirror:网页富文本编辑器,http://codemirror.org;
CM:CodeMirror的缩写;

特别声明:包含占位符的代码文件并非作为代码运行的用途。

要求:
1、多个代码文本中共用一些全局变量名,在某个全局变量名的名字改变后,其它代码文本在CM中打开后优雅地更新为新的全局变量名;
2、全局变量名要高亮;
附加要求:
1、在CM中,可以按一次退格键或del键删除整个全局变量名;
2、在CM中,不能更改全局变量名,即在CM中全局变量名不接受焦点;

附加要求结合起来通俗的去理解呢,就是把全局变量名理解为编辑器中的一幅图片对象,无法在编辑器中修改,按一次退格键或del键就把一幅图片删除了。

所以我想到了本文题目中的方法,就是用占位符代替全局变量名存放在文件中。
也就是说全局变量名在真实的文件数据中就是占位符,当用CodeMirror编辑器打开这个文本时,最终在CodeMirror中看到的是占位符变为一个个全局变量名。

最后来了:CM中怎么把占位符映射为全局变量名?附加要求怎么去实现?

如果没有答案的话,只能使用双替换大法了:读取文本后把占位符替换为对应的全局变量名再显示在CM中,保存前把全局变量名替换为占位符再保存。
但替换大法会有误伤,例如再PHP中,单引号'$a'和双引号"$a"中的$a就有不同的意义,这个误伤也不太容易解决。

2997 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/186156

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX