自2012年以来,我使用Alexei Torgashin创建的编辑器来查看和修改VFP / JS / Python / XML / HTML语言中的几乎所有文本文件,日志和程序代码:首先是SynWrite ,现在是其后代CudaText 。 他故意从测试列表中选择了编辑器,其中包括AkelPad , Notepad ++和Sublime Text 。 事实证明,技术支持的响应能力是决定性的-Alexey接受了用户的大量希望/抱怨并迅速实现了它们。 我会解释。 这些年来,愿望/抱怨的数量几乎是一致的,三年前切换到GitHub后, 它变得可衡量了,据我估计为每年400个愿望和每年100个错误。 令人惊讶的是,应工人的要求扩展功能并没有影响到整个编辑器的可靠性。 当SynWrite的可持续发展资源用尽时, CudaText出现了。
我把地板传给阿列克谢。我和Alexey就各种话题进行了交谈。 他最近列出了“ Sublime缺少的东西”。 对我来说似乎很有趣,我们同意在哈布雷(Habré)上提出这些想法。 此外,在我的编辑中还将介绍Alexei的论文。
在花了几年时间创建程序之后,您对竞争对手的结果有所不同。 您会在其中注意到不仅成功的特征(您已经应用或想要应用它们),而且还存在劣势。 如果将它与我的CudaText (以下称Cuda )进行比较,我将展示Sublime Text (以下称Sublime )中可以改进的地方 。 同时,我强调, Sublime早已广为传播时,我的编辑就出现了,他的许多想法对于Cuda都是基本的:
- 文字设定档
- 叠加设置
- 多功能马车
- Python插件
- 所有团队的调色板
Sublime严格地施加了文本团队的工作风格。
举个例子
- 没有配置对话框-只有json文件(有很多)。
- “按文件搜索”对话框中没有其他控件-而是有一种用于填充文本字段的“语言”。
这种风格是高效,灵活和可扩展的,但是需要用户不断学习。 对于初学者,这会创建一个明显的入门阈值。
Cuda试图成为一种更实惠的工具。 这是可能的,因为它是在Lazarus环境中创建的,该环境提供了丰富的GUI库和Win / Linux / Mac之间的可移植性。 结果, Cuda中json设置的灵活性与对话框插件结合在一起,例如Search By Files(有一个habr概述 ),设置编辑器等。
我将尝试表达一些有关如何改进Sublime的想法。 当然,这只是我的个人观点。
工具列
Sublime中没有工具栏。 因此,他的文本团队风格得以体现。 显然,假定对可编辑代码有用的位置更为重要。 您可以从菜单,从面板按名称或通过热键调用所有命令。 这种方法有一个明显的缺点-您需要事先知道团队的名称或其热键。 但是合适的团队及其名称远非总是显而易见的。
可定制(包括可断开连接)工具栏是降低使用率阈值的详细信息之一。
Cuda具有用于调用命令的水平自定义工具栏和用于切换面板的垂直侧边栏:树,项目,控制台。 API负责设置工具栏,即通过插件执行。 如果插件添加新面板,则新按钮可能会显示在侧栏中。

将工具栏添加到Sublime不会违反其任何以前的技术。
状态栏
在Sublime中,状态栏很差。

(1)控制台/搜索/替换/按面板文件开关
(2)发布
(3)编码
(4)类型EOL
(5)标签设定
(6)语法
在这六个字段中,只能通过配置隐藏两个(编码和EOL),并且在消息字段中,插件可以添加/删除键=值对。 您无法隐藏,重新排列或配置其余字段。 特别令人奇怪的是,有关车架/选区的重要信息进入“消息”字段中,在这里它与团队的文字混合在一起。
在Cuda中,用户可以在user.json
中的状态栏字段中指示其顺序,宽度和对齐方式:
"ui_statusbar_panels": "caret,L,250|msg,L,0|lexer,L,70|tabsize,L,70"
并可以使用宏替换分别配置caret
字段(有关回车/选择的信息)。 例如
"ui_statusbar_no_sel": "r={y}/{count} c={xx}", "ui_statusbar_carets": "carets={carets} top/bot={y}/{y2}", "ui_statusbar_col_sel":"r={y}/{count} c={xx} s=[{sel} x {cols}]",
这些设置的结果是, Cuda将显示在状态栏中
- 如果是一辆马车:

- 如果有四个车厢:

- 如果垂直选择:

Cuda还允许您配置在“消息”字段中显示文本所花费的时间。
代码树
Sublime希望以文本形式呈现所有内容的愿望是可以理解的。 但是,拒绝在所有IDE和高级文本编辑器中找到的Tree面板非常痛苦。 您可以使用放置在常规选项卡中的“文本树”(例如,带有Outline
插件),但是它与Sublime界面集成度很差,不是完整的替代品。
Cuda有一个Code tree
面板,用于显示活动文件的语法元素:用于程序语言的函数/类/字段,用于标记语言的标签/键。

整合:
- 显示是同步的,即,树在更改代码后立即显示代码的状态(带有自定义延迟)。
- 所选树节点与代码中滑架的位置同步。
- 树节点用于选择块,移动托架和其他操作。
此外, Cuda API允许您使用树创建新面板并填充它。 Project Manager
插件就是这样做的。
包含设置和插件的文件夹
对于那些不熟悉Sublime手册的用户,将设置/软件包/插件放在文件夹中的情况看起来令人困惑。 在新安装的编辑器中的第一步令人费解:在菜单命令Preferences -- Settings
打开了两个文件,其中一个文件名(默认设置)在编辑器标题中显示为(在Win中)
Sublime Text 3/Packages/Default/Preferences.sublime-settings
但是磁盘上没有这样的文件或文件夹。 通常,会猜出这种技巧的逻辑。 默认设置应连接到编辑器代码中,并且它们将在某些文件中复制或不复制-由开发人员决定。 Sublime假装在文件中。
在Cuda中,默认设置也受到保护,但是程序集中有一个真实文件
settings_default\default.json
在其中重复和评论。 这样的文件的存在不仅为用户而且为插件创造了便利。 例如,设置编辑器从该文件中提取选项列表本身,以及它们的注释,以及用于在树上分布选项的标记。
Sublime中的程序包也会发生类似的麻烦-您在Packages
查找它们却找不到它们。
尽管Cuda没有Sublime这样强大的附加软件包库,但Cuda的放置逻辑是透明的。 例如,对于插件,有一个py
文件夹,其中所有内容都可见-标准和预安装。 有一个用于data/themes
的data/themes
文件夹,用于data/snippets
data/lexlib
data/snippets
,用于词法分析器的data/lexlib
。
包装控制
Package Control
插件的奇怪情况。 一方面, Sublime不含此插件。 另一方面,如果没有它,几乎没有什么严肃的事情-如果没有添加,编辑器就很少。 即使将插件放置在“ Preferences
菜单中,而不是放置在“ Tools--Packages
表明其特殊状态。 显然,某些“版权”使我们无法将此插件包含在Sublime程序集中。
Cuda有多个插件(现在有10个),包括在发行版中的Addons Manager
。
浮板
Sublime具有整体窗口布局,即,控制台和选项卡组位于一起。 您可以运行多个实例,但是每个实例将始终具有选项卡,并且可能还会有一个控制台。
Cuda具有用于在单独窗口中显示控制台的设置和命令。 这使您可以方便地拉伸它,而不会影响主文本的高度,例如,将其放在第二个监视器上。 另外,您可以将面板与树分开,以免限制主文本的宽度。

顺便说一句, Atom (或VS Code )用户希望使用浮动面板,但是开发人员以Electron中的限制为由拒绝了。 因此,这可能是Sublime优于直接竞争对手的优势。
配置插件
Sublime具有一百多种内核设置(版本3.1.1中为107)和六个附加的重叠级别,以适应更改后的值:
(1) Packages/Default/Preferences (<platform>).sublime-settings
(2) Packages/User/Preferences.sublime-settings
(3) <Project Settings>
(4) Packages/<syntax>/<syntax>.sublime-settings
(5) Packages/User/<syntax>.sublime-settings
(6) <Buffer Specific Settings>
很难想象这样一种情况,即使仅手动跟踪700个值的一小部分(7个级别的100个键)也成为问题。
在Cuda中,几乎有300种内核设置,还有三个附加级别可以将它们重叠:
(1) settings/user.json
(2) settings/lexer <syntax>.json
(3) <File Settings>
问题是相同的-必须考虑太多的值(最大300 * 4)。 为了帮助用户,有一个插件可以在一个表中显示所有级别的所有设置,从而简化了搜索和编辑。

注意“ Section
列-设置已分配给树节点。 这提供了附加的排序和过滤器。 用于建立此树的标记包含在settings_default\default.json
文件的设置注释中。 例如,评论
// [UI/Listbox]`
会将其后的选项分配给UI/Listbox
节点。 整个树也可以看到

对于Sublime,可能会出现类似的对话框:
- 名称和七个重叠级别仅是表中的八列。
- 表单和控件可以从Tk或更高级的Python GUI库获取。
- 更改选项会导致文件更改以及保存后重新加载文件。
小事
有几个小问题,当然,这些问题不在此处,而是在Sublime技术支持论坛中。 让他们保持完整性。
PgDn
/ PgUp
在列表对话框中不起作用,例如在命令面板中。- 通常,您需要插入一些棘手的字符,例如箭头或分数。 没有足够的工具来查看/选择所有Unicode字符。 在Cuda中,此类工具采用的是“
Char map
对话框的形式。

- 无法设置单独的着色标签。 当打开许多文件时,通常希望将其中一些标签的颜色上色。 在Cuda中 ,“
Set tab color...
命令位于快捷方式上方的本地菜单中。 以这种方式配置的颜色将保存在会话中。
结论
给出提示是多么容易!
但是我认为上述考虑并非没有益处。 如果在Sublime Text的下一版本中有帮助,那就很好。 顺便说一句,也许有人会翻译思想并将其传递给Skinner(Jon Skinner)。