Ecode是一种轻巧的多平台代码编辑器,专为现代硬件而设计,重点是响应能力和性能。它是使用硬件加速的EEEPP GUI开发的,EEPEP GUI为编辑提供了核心技术。该项目是使用EEPEP GUI的第一个严肃项目,目前正在开发该项目以改善EEPEP GUI库,这是其主要目标之一。
有关在MacOS上运行的更多屏幕截图,请在Windows上运行,在Haiku上运行,低DPI,代码完成,终端,文件定位器,文件格式,全局查找,全局替换,Linter。
.gitignore支持的项目 * Ecode像许多其他编辑一样将文件夹视为项目。主要区别在于,它还试图通过滤除在.gitignore库中过滤的任何文件来自动消毒项目文件。这个想法是将.gitignore文件用作项目设置。项目文件将是用于查找项目中文件并进行全局搜索的文件。通常,对于任何与项目相关的搜索,这都可以转化为更好的结果。还有一个非常简单的机制,可以通过在加载的文件夹中添加带有允许的过滤模式的文件,允许.gitignore对.gitignore的过滤文件可见性,从而在.ecode/.prjallowed中使用必要的球模式创建文件,从而允许过滤的模式“未过滤””。 Ecode只会添加由编辑器支持的文件,编辑器不会尝试使用不正式支持的文件来执行任何操作。
一些要说明项目理念的要点:
可以将Ecode汇编为WASM并在任何现代浏览器中运行。没有计划将开发集中在网络版本上(至少目前),因为那里有很多好的解决方案。但是您可以尝试一下:
演示在这里
当前,源代码位于EEPP项目存储库中。 Ecode编辑器源位于SRC/Tools/ecode。 Ecode被用来积极改善和迭代EEEPP GUI库。在某个时候,它将迁移到此存储库。 Ecode存储库应用于问题和文档。 EEPP存储库将接受ECODE的PRS。
每个受支持的平台都有准备构建应用程序的脚本。对于Linux和MacOS,构建该项目是微不足道的,您只需要安装GCC/Clang以及LIBSDL2的开发库即可。 Windows Build脚本当前是一个交叉编译脚本,它使用MingW64。但是它也可以轻松地使用安装的Visual Studio和LibsDL2开发库来构建。有关如何手动构建项目的更多信息,请遵循EEPP构建说明。项目名称始终是Ecode (因此,如果您使用Make构建,则需要运行make ecode )。
build.app.sh将尝试使用压缩应用程序构建AppImage软件包和tar.gz ecode文件夹将包含未压缩的应用程序。build.app.sh将创建ecode.app 。运行create.dmg.sh以创建dmg文件。 ecode.app文件夹将包含未压缩的应用程序。build.app.sh将使用zipped应用程序包创建一个zip文件。 ecode文件夹将包含未压缩的应用程序。从Windows构建,请按照此处的说明进行操作。build.app.sh将尝试使用压缩应用程序构建tar.gz ecode.app文件夹将包含未压缩的应用程序。build.app.sh将尝试使用压缩应用程序构建tar.gz ecode.app文件夹将包含未压缩的应用程序。 夜间构建正在这里为更不耐烦的用户分发。正在积极开发Ecode,除非用户需要未决的修复程序,否则每天的构建可能不会稳定。
Ecode不断添加更多的语言支持,还支持通过配置文件扩展其语言支持(对于每个功能:语法突出显示,LSP,Linter和Formatter)。
| 语言 | 强调 | LSP | Linter | 格式化 |
|---|---|---|---|---|
| .htaccess | ✓ | 没有任何 | 没有任何 | 没有任何 |
| .ignore文件 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| [x]它! | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 熟练 | ✓ | Adeptlsp | 没有任何 | 没有任何 |
| Angelscript | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 尴尬脚本 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 蝙蝠 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 巴泽尔 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 弯曲 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 蓝图 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 脑力 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 嗡嗡声 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| c | ✓ | clangd | CPPCHECK | 叮当声 |
| 碳 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 克洛杰尔 | ✓ | clojure-lsp | 没有任何 | 没有任何 |
| cmake | ✓ | CMAKE语言服务器 | 没有任何 | 没有任何 |
| CPP | ✓ | clangd | CPPCHECK | 叮当声 |
| 水晶 | ✓ | 结晶 | 没有任何 | 没有任何 |
| CSHARP | ✓ | 无所不能 | 没有任何 | 没有任何 |
| CSS | ✓ | emmet语言服务器 | 没有任何 | 本国的 |
| d | ✓ | 服务-D | 没有任何 | 没有任何 |
| 镖 | ✓ | 飞镖语言服务器 | 没有任何 | 没有任何 |
| 差异 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| Dockerfile | ✓ | Docker-Langserver | 没有任何 | 没有任何 |
| 长生不老药 | ✓ | elixir-ls | 没有任何 | 没有任何 |
| 榆树 | ✓ | Elm语言服务器 | 没有任何 | 没有任何 |
| 环境文件 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 幻想 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| Fortran | ✓ | 堡垒 | 没有任何 | 没有任何 |
| FSTAB | ✓ | 没有任何 | 没有任何 | 没有任何 |
| gdscript | ✓ | 没有任何 | 没有任何 | 没有任何 |
| glsl | ✓ | GLSL_ANALYZER | 没有任何 | 没有任何 |
| 去 | ✓ | gopls | 没有任何 | gopls |
| GraphQl | ✓ | 没有任何 | 没有任何 | 没有任何 |
| Groovy | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 野兔 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 哈斯克尔 | ✓ | Haskell语言服务器 | hlint | Ormolu |
| 哈克斯 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| HAXE编译器论点 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| HLSL | ✓ | 没有任何 | 没有任何 | 没有任何 |
| html | ✓ | emmet语言服务器 | 没有任何 | 更漂亮 |
| ini | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 杰伊 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 爪哇 | ✓ | JDTLS | 没有任何 | 叮当声 |
| JavaScript | ✓ | 打字稿 - 语言服务器 | eslint | 更漂亮 |
| JavasCripTreact | ✓ | 打字稿 - 语言服务器 | 没有任何 | 没有任何 |
| JSON | ✓ | 没有任何 | JQ | 本国的 |
| 朱莉娅 | ✓ | 语言ERGAGESERVER.JL | 没有任何 | 没有任何 |
| 科特林 | ✓ | 科特林语言服务器 | ktlint | ktlint |
| 乳胶 | ✓ | Texlab | 没有任何 | 没有任何 |
| 龙虾 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 卢阿 | ✓ | Lua语言服务器 | 卢阿切克 | 没有任何 |
| makefile | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 降价 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 介子 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 月经 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 内鲁亚 | ✓ | 没有任何 | 内鲁亚 | 没有任何 |
| 尼姆 | ✓ | nimlsp | 尼姆 | 没有任何 |
| Objeck | ✓ | 没有任何 | 没有任何 | 没有任何 |
| Objective-C | ✓ | clangd | 没有任何 | 叮当声 |
| OCAML | ✓ | OCAML-LSP | 没有任何 | 没有任何 |
| 奥丁 | ✓ | OLS | 没有任何 | 没有任何 |
| OPENSCAD | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 帕斯卡 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 珀尔 | ✓ | perlnavigator | 没有任何 | 没有任何 |
| php | ✓ | Phpactor | php | 没有任何 |
| Pico-8 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 明文 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| po | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 小马 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| Postgresql | ✓ | 没有任何 | 没有任何 | 没有任何 |
| Powershell | ✓ | 没有任何 | 没有任何 | 没有任何 |
| Python | ✓ | pylsp | 拉夫 | 黑色的 |
| r | ✓ | R语言服务器 | 没有任何 | 没有任何 |
| 戒指 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 红宝石 | ✓ | Solargraph | 没有任何 | 没有任何 |
| 锈 | ✓ | 生锈的分析仪 | 没有任何 | rudfmt |
| Sass | ✓ | emmet语言服务器 | 没有任何 | 没有任何 |
| Scala | ✓ | 金属 | 没有任何 | 没有任何 |
| ShellScript | ✓ | Bash语言服务器 | 没有任何 | 没有任何 |
| 小基础 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 坚固 | ✓ | Solc | Solhint | 没有任何 |
| SQL | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 迅速 | ✓ | sourcekit-lsp | 没有任何 | 没有任何 |
| TCL | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 蓝绿色 | ✓ | 没有任何 | TL | 没有任何 |
| 汤姆 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 打字稿 | ✓ | 打字稿 - 语言服务器 | eslint | 更漂亮 |
| 类型进行反应 | ✓ | 打字稿 - 语言服务器 | 没有任何 | 没有任何 |
| v | ✓ | V-Analyzer | 没有任何 | v |
| 瓦拉 | ✓ | 瓦拉语言服务器 | 没有任何 | 没有任何 |
| Verilog | ✓ | 没有任何 | 没有任何 | 没有任何 |
| 视觉基本 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| Vue | ✓ | VLS | 没有任何 | 没有任何 |
| 鹪 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| x86组件 | ✓ | 没有任何 | 没有任何 | 没有任何 |
| XML | ✓ | emmet语言服务器 | 本国的 | 本国的 |
| XTEND | ✓ | 没有任何 | 没有任何 | 没有任何 |
| yaml | ✓ | Yaml语言服务器 | 没有任何 | 没有任何 |
| ZIG | ✓ | ZLS | ZIG | ZIG |
本机标签意味着该功能由Ecode本机支持,并且不需要任何外部工具才能运行。
Ecode带来了显示当前语言支持健康的工具。从Ecode您可以从Settings -> Tools -> Check Language Health状况中检查其健康状况,并且可以从CLI使用--health标志: ecode --health 。使用健康检查标志对缺少语言服务器,衬里和格式化器进行故障排除。
用ecode --health或询问有关具有ecode --health-lang=<lang> 。
插件扩展了基本代码编辑器功能。目前,默认情况下所有插件都启用,但它们是可选的,可以随时禁用。 Ecode实现了内部协议,该协议允许插件相互通信。 LSP协议将用作实现插件通信的基础。例如,Linter插件将消耗LSP来改善其诊断。此外,自动完成模块将要求LSP(如果有)提供帮助,以改善完成并提供签名帮助。
通过从每种语言中执行已经稳定的衬里来提供衬里支持。默认情况下, Ecode提供了对几种语言的支持,并且可以通过扩展linters.json配置轻松扩展。 linters.json默认配置可以从此处获得。要配置新的Linters,您可以在Ecode的默认配置路径中创建一个新的linters.json文件。
linters.json格式该格式是一个非常简单的JSON对象,具有配置对象和包含支持的文件格式的对象数组,LUA模式,以查找Linter在Stdout上打印的任何错误,图案的每个组的位置以及执行的命令。它还支持一些可选的额外对象键。
JavaScript Linter示例(使用ESLINT)
{
"config" : {
"delay_time" : " 0.5s "
},
"linters" : [
{
"file_patterns" : [ " %.js$ " , " %.ts$ " ],
"warning_pattern" : " [^:]:(%d+):(%d+): ([^%[]+)%[([^ n ]+) " ,
"warning_pattern_order" : { "line" : 1 , "col" : 2 , "message" : 3 , "type" : 4 },
"command" : " eslint --no-ignore --format unix $FILENAME "
}
]
}这就是我们需要在Ecode中使用一个工作的衬里。 Linters的可执行文件必须由用户手动安装,编辑器不会随附衬里,并且还需要可见的。这意味着它必须在PATH环境变量上,否则二进制的路径必须是绝对的。
请检查语言支持表
"disable_lsp_languages": ["lua", "python"] ,禁用lua和python。"disable_languages": ["lua", "python"] ,分别禁用Luacheck和Ruff。格式插件的工作原理与Linter插件完全一样,但是它将执行自动编码的工具。默认情况下, Ecode可以通过扩展formatters.json配置来轻松扩展对几种语言的支持。 formatters.json可以从此处获得默认配置。它还本地支持某些格式化,这意味着格式配方带有ecode,而无需任何外部依赖。并且还支持LSP文本文档格式化,这意味着,如果您正在运行支持格式化文档的LSP,则格式也将可用。要配置新格式器,您可以在Ecode的默认配置路径中创建一个新的formatters.json文件。
formatters.json格式{
"config" : {
"auto_format_on_save" : false
},
"keybindings" : {
"format-doc" : " alt+f "
},
"formatters" : [
{
"file_patterns" : [ " %.js$ " , " %.ts$ " ],
"command" : " prettier $FILENAME "
}
]
}请检查语言支持表
通过执行每种语言已经稳定的LSP来提供LSP支持。默认情况下, Ecode提供了对几种语言的支持,并且可以通过扩展lspclient.json配置轻松扩展。 lspclient.json默认配置可以从此处获得。要配置新的LSP,您可以在Ecode的默认配置路径中创建一个新的lspclient.json文件。
重要说明:LSP服务器可能是非常重要的资源密集型,并且可能不是简单项目的最佳选择。
实施详细信息:仅在需要时加载LSP服务器,直到项目中打开支持的文件之前,不会打开任何过程。
lspclient.json格式格式遵循与所有以前的配置文件相同的模式。配置在带有三个主要键的JSON文件中表示: config , keybindings , servers 。
C和C ++ LSP服务器示例(使用clangd)
{
"config" : {
"hover_delay" : " 0.5s "
},
"servers" : [
{
"language" : " c " ,
"name" : " clangd " ,
"url" : " https://clangd.llvm.org/ " ,
"command" : " clangd -log=error --background-index --limit-results=500 --completion-style=bundled " ,
"file_patterns" : [ " %.c$ " , " %.h$ " , " %.C$ " , " %.H$ " , " %.objc$ " ]
},
{
"language" : " cpp " ,
"use" : " clangd " ,
"file_patterns" : [ " %.inl$ " , " %.cpp$ " , " %.hpp$ " , " %.cc$ " , " %.cxx$ " , " %.c++$ " , " %.hh$ " , " %.hxx$ " , " %.h++$ " , " %.objcpp$ " ]
}
]
}这就是我们需要在Ecode中使用的LSP。 LSPS可执行文件必须由用户手动安装,LSP不会随附编辑器,并且还需要可见的可执行文件。这意味着它必须在PATH环境变量上,否则二进制的路径必须是绝对的。
请检查语言支持表
lspclient.json配置中声明服务器来覆盖默认LSP命令。鉴于每个平台可能会在每个平台上更改,也可以为每个平台指定一个不同的命令。在这种情况下,应使用一个对象,每个键是一个平台,还有一个通配符平台“其他”来指定与平台定义不匹配的任何其他平台。例如, sourcekit-lsp使用: "command": {"macos": "xcrun sourcekit-lsp","other": "sourcekit-lsp"}{"name": "clangd","command_parameters": "--background-index-priority=background --malloc-trim"}Ecode提供了一些基本的GIT集成(将来会有更多功能)。其主要目的是帮助用户使用GIT进行最大的基础操作。当前支持的一些功能:GIT状态和统计数据可视化(文件状态),提交,推送,结帐,拉力,获取,快速合并,创建+重命名+重命名+删除分支,管理藏匿处。所有统计数据将自动实时更新/刷新。还有一些基本配置。该插件要求用户在PATH环境变量中安装git二进制并提供。
git.json格式格式遵循与所有以前的配置文件相同的模式。配置在带有三个主要键的JSON文件中表示: config , keybindings , servers 。
C和C ++ LSP服务器示例(使用clangd)
{
"config" : {
"silent" : false ,
"status_recurse_submodules" : true ,
"statusbar_display_branch" : true ,
"statusbar_display_modifications" : true ,
"ui_refresh_frequency" : " 5s "
},
"keybindings" : {
"git-blame" : " alt+shift+b "
}
}.git目录中检测到更改时才触发更新)。自动完整插件负责为代码完成和签名帮助提供建议。
XML工具插件(默认情况下为禁用)在编辑XML内容时提供了一些改进的功能。
Ecode尊重每个OS上的标准配置路径:
XDG_CONFIG_HOME ,通常转换为~/.config/ecode/pluginsHOME中使用Application Support文件夹,通常转化为~/Library/Application Support/ecode/pluginsAPPDATA ,通常转换为C:Users{username}AppDataRoamingecodeplugins所有插件配置均设计为用户可以覆盖。这意味着可以用用户的自定义配置替换默认配置。例如,如果用户想使用其他衬里,它只需要在其自己的Linter配置文件中声明新的Linter定义即可。格式和LSPS服务器也适用。插件将始终为插件自定义实现“配置”,并始终实现“钥匙限制”键来配置自定义键键。
自定义编辑器配色方案可以在用户配色方案目录中添加:
XDG_CONFIG_HOME ,通常转换为~/.config/ecode/editor/colorschemesHOME中使用Application Support文件夹,通常转化为~/Library/Application Support/ecode/editor/colorschemesAPPDATA ,通常转换为C:Users{username}AppDataRoamingecodeeditorcolorschemes目录中编写的任何文件都将被视为编辑配色方案文件。每个文件都可以包含任何数量的配色方案。
可以从这里读取配色方案的格式。
自定义终端配色方案可以在用户终端配色方案目录中添加:
XDG_CONFIG_HOME ,通常转换为~/.config/ecode/terminal/colorschemesHOME中使用Application Support文件夹,通常转换为~/Library/Application Support/ecode/terminal/colorschemesAPPDATA ,通常转换为C:Users{username}AppDataRoamingecodeterminalcolorschemes目录中编写的任何文件都将被视为终端配色文件。每个文件都可以包含任何数量的配色方案。
可以从这里读取配色方案的格式。
可以在用户UI主题目录中添加自定义UI方案:
XDG_CONFIG_HOME ,通常转化为~/.config/ecode/themesHOME中使用Application Support文件夹,通常转化为~/Library/Application Support/ecode/themesAPPDATA ,通常转换为C:Users{username}AppDataRoamingecodethemes自定义UI主题文件必须具有扩展名.css ,Ecode将在目录中使用.css扩展名来查找所有文件,UI主题名称是没有扩展名的文件名。新主题将出现在Settings -> Window -> UI Theme中。
自定义UI主题允许在用户的意愿下自定义编辑器。由于Ecode使用CSS来设计UI的所有元素,因此创建新主题非常容易。可以仅自定义调色板,但也可以根据需要自定义所有UI元素。自定义整个UI主题可能是广泛的,但是自定义颜色就像更改用于为UI上色的CSS变量的值一样简单。作为参考,可以在此处看到Ecode使用的完整基础UI主题。最重要的选择器将是:root选择器,其中所有变量被定义。颜色变量可以轻松从该文件中提取。
自定义UI主题的一个简单示例,该主题仅更改色调颜色,让我们称其为Breeze Light Red.css :CSS:
: root {
--inherit-base-theme : true;
--primary : # e93d66 ;
--scrollbar-button : # a94074 ;
--item-hover : # 502834 ;
--tab-hover : # 5e3347 ;
}这有效地将创建/添加带有浅红色的新UI主题。一个非常重要的细节是,如果UI主题必须继承默认主题的完整定义,我们必须补充--inherit-base-theme: true to to :root元素,否则必须完全定义UI主题,这意味着,每个小部件都必须从scratch中进行造型(不推荐使用其复杂性)。还可以使用适用于众所周知的CSS规范的通常规则(又称使用足够特异性,可能滥用!重要的标志)的通常规则重新定义其属性的不同小部件的样式。
可以在以下语言目录中添加自定义语言支持:
XDG_CONFIG_HOME ,通常转化为~/.config/ecode/languagesHOME中使用Application Support文件夹,通常转化为~/Library/Application Support/ecode/languagesAPPDATA ,通常转换为C:Users{username}AppDataRoamingecodelanguages Ecode将使用json扩展名读取位于该目录的每个文件。每个文件可以包含一种或几种语言。为了设置几种语言,JSON文件的根元素应该是一个数组,其中包含每个语言的一个对象,否则如果根元素是一个对象,则应包含语言定义。语言定义可以覆盖当前支持的任何定义。 Ecode将优先考虑用户定义的定义。
{
"name" : " language_name " ,
"files" : [ " Array of file extensions supported " ],
"comment" : " Sets the comment string used for auto-comment functionality. " ,
"patterns" : [
{ "pattern" : " lua_pattern " , "type" : " type_name " },
{ "pattern" : " no_capture(pattern_capture_1)(pattern_capture_2) " , "type" : { " no_capture_type_name " , " capture_1_type_name " , " capture_2_type_name " } },
{ "pattern" : [ " lua_pattern_start " , " lua_pattern_end " , " escape_character " ], "type" : " type_name " }
],
"symbols" : [
{ "symbol_name" : " type_name " }
],
"visible" : true , /* sets if the language is visible as a main language in the editor, optional parameter, true by default */
"auto_close_xml_tag" : false , /* sets if the language defined supports auto close XML tags, optional parameter, false by default */
"lsp_name" : " sets the LSP name assigned for the language, optional parameter, it will use the _name_ in lowercase if not set "
}Ecode使用与Lite和Lite-XL编辑器相同的语言定义格式。这使在Ecode中添加新语言变得更加容易。还有一个辅助工具可以从此处的Ecode存储库中下载,该工具允许将Lite语言定义直接导出到Ecode中使用的JSON文件格式。
可以使用提供的CLI参数来轻松扩展任何语言定义: --export-lang和--export-lang-path 。想要扩展或改进语言定义的用户可以将其导出,对其进行修改并使用.json扩展名中的定义语言路径。例如,要扩展语言vue ,您需要运行: ecode --export-lang=vue --export-lang-path=./vue.json ,退出导出的文件并将其移动到自定义语言路径。
{
"name" : " Elixir " ,
"files" : [ " %.ex$ " , " %.exs$ " ],
"comment" : " # " ,
"patterns" : [
{ "pattern" : " #.* n " , "type" : " comment " },
{ "pattern" : [ " : " " , " " " , " \ " ], "type" : " number " },
{ "pattern" : [ " """ " , " """ " , " \ " ], "type" : " string " },
{ "pattern" : [ " " " , " " " , " \ " ], "type" : " string " },
{ "pattern" : [ " ' " , " ' " , " \ " ], "type" : " string " },
{ "pattern" : [ " ~%a[/ " |'%(%[%{<] " , " [/ " |'%)%]%}>] " , " \ " ], "type" : " string " },
{ "pattern" : " -?0x%x+ " , "type" : " number " },
{ "pattern" : " -?%d+[%d%.eE]*f? " , "type" : " number " },
{ "pattern" : " -?%.?%d+f? " , "type" : " number " },
{ "pattern" : " : " ?[%a_][%w_]* " ? " , "type" : " number " },
{ "pattern" : " [%a][%w_!?]*%f[(] " , "type" : " function " },
{ "pattern" : " %u%w+ " , "type" : " normal " },
{ "pattern" : " @[%a_][%w_]* " , "type" : " keyword2 " },
{ "pattern" : " _%a[%w_]* " , "type" : " keyword2 " },
{ "pattern" : " [%+%-=/%*<>!|&] " , "type" : " operator " },
{ "pattern" : " [%a_][%w_]* " , "type" : " symbol " }
],
"symbols" : [
{ "def" : " keyword " },
{ "defp" : " keyword " },
{ "defguard" : " keyword " },
{ "defguardp" : " keyword " },
{ "defmodule" : " keyword " },
{ "defprotocol" : " keyword " },
{ "defimpl" : " keyword " },
{ "defrecord" : " keyword " },
{ "defrecordp" : " keyword " },
{ "defmacro" : " keyword " },
{ "defmacrop" : " keyword " },
{ "defdelegate" : " keyword " },
{ "defoverridable" : " keyword " },
{ "defexception" : " keyword " },
{ "defcallback" : " keyword " },
{ "defstruct" : " keyword " },
{ "for" : " keyword " },
{ "case" : " keyword " },
{ "when" : " keyword " },
{ "with" : " keyword " },
{ "cond" : " keyword " },
{ "if" : " keyword " },
{ "unless" : " keyword " },
{ "try" : " keyword " },
{ "receive" : " keyword " },
{ "after" : " keyword " },
{ "raise" : " keyword " },
{ "rescue" : " keyword " },
{ "catch" : " keyword " },
{ "else" : " keyword " },
{ "quote" : " keyword " },
{ "unquote" : " keyword " },
{ "super" : " keyword " },
{ "unquote_splicing" : " keyword " },
{ "do" : " keyword " },
{ "end" : " keyword " },
{ "fn" : " keyword " },
{ "import" : " keyword2 " },
{ "alias" : " keyword2 " },
{ "use" : " keyword2 " },
{ "require" : " keyword2 " },
{ "and" : " operator " },
{ "or" : " operator " },
{ "true" : " literal " },
{ "false" : " literal " },
{ "nil" : " literal " }
]
}有关更复杂的语法定义,请参阅此处由Ecode支持的所有母语的定义。
没有特定顺序列出:
作者不仅仅是对合作开放。邀请对该项目感兴趣的任何人参加。许多功能仍在待处理中,随着时间的流逝,项目将越来越多。请协作。 =)
开箱即用的编辑器中不会呈现一些Unicode字符。您需要更改默认的单拼字体,而有利于支持您想要看到的字符的字体。如果您想使用传统的单型字体,您也可以更改默认的后备字体。默认的后备字体应涵盖多种语言,但您可能需要一些特殊的字体(目前涵盖CJK语言)。
*1当前EEP的特征限制。
*2我不喜欢子像素暗示。但是我非常愿意实施它,我并不是很精通此事,因此任何帮助都将不胜感激。
*3我真的不喜欢韧带。我愿意实施PRS。
*4我不是VIM用户,也没有资格实现VIM模式或任何模态编辑。欢迎PRS支持这一点。
*5更好的文本支持会随着时间的推移而出现,但目前却没有急事。 EEPP架构准备添加Harfbuzz支持。
该编辑器具有Lite,Lite-XL,QTCreator和Sublime Text Editor的深刻根深蒂固的灵感。基于Lite/Lite-XL实现开发了几个功能。某些功能可以直接从Lite移植:颜色式和语法高光模式(EEPP实现扩展了原始的Lite实现,以添加更多功能)。
Ecode主要用于Linux和MacOS,在Windows中未经过很好的测试。如果您发现编辑器的任何问题,请在此处报告。
这是一项正在进行的工作,无法保证稳定性。请不要将其用于关键任务。我每天都使用编辑器,对我来说足够稳定,但要自负地使用它。
Niels Lohmann为现代C ++的JSON
尼尔·亨宁(Neil Henning)
所有的无味终端仿真器的作者
弗雷德里克·亚历山大(Fredrik Aleksander)
RXI用于Lite
Franko和Lite-XL的所有合作者
安德烈亚斯·克林(Andreas Kling)
还有更多的人!
麻省理工学院许可证