27 个版本 (8 个重大更改)
0.13.0 | 2023 年 11 月 12 日 |
---|---|
0.11.2 | 2023 年 10 月 25 日 |
0.10.0 | 2023 年 4 月 17 日 |
0.9.0-alpha8 | 2022 年 9 月 25 日 |
0.7.7 | 2021 年 6 月 10 日 |
在 文本编辑器 中排名 72
每月下载量 235
用于 hired
215KB
5K SLoC
添加-编辑器
标准编辑器,现在作为一个库
以前我决定写一个具有语法高亮的 ED 克隆版 hired。在这个过程中,我发现宏命令(如 g
、v
、G
、V
、:
)几乎要求你为它们编写一个 ED 库。所以我做了,这就是它。
与 GNU Ed 的差异
我对一些不太方便的命令做了一些改动,因此特别是高级命令与 GNU Ed 有一些差异(包括语法和行为)。以下是这些更改的列表。
g
和相关命令以命令列表作为输入模式(以正则表达式分隔符作为终止符而不是 '.')。(另外,不实现不区分大小写的匹配的 'I' 后缀)#
接受一个选择,并将状态 selection 设置为它而不会打印任何内容。这是为了能够设置选择而不打印。
核心概念
选择
原始 ED 会跟踪你最后交互的行,并且对于大多数命令默认在该行上工作。我觉得这值得扩展,所以 add-ed 跟踪你最后交互的行段。我希望这更直观。(为了避免诸如某些命令默认保存整个缓冲区等不愉快的情况,一些命令默认为整个缓冲区,例如 w
。)
灵活的 API
该库已设计为具有清晰的特质,以使更换大多数组件变得容易。例如,创建一个用于远程编辑的 SSH/SFTP IO 实现、实现 UI 特质的 GUI 前端或从任何给定的文件路径加载宏的 MacroGetter 应该是相当容易的。
与 Ed 相比的新功能
-
A
和I
命令,这些命令首先a
/i
,然后j
前一行或下一行。非常适合注释掉单行或添加遗忘的 ';'。 -
C
命令,相当于c
,但会将选择的前一个值传递给UI的输入法。这使得您能够编辑选择而不是替换它。(可用性取决于UI和
initial_input_data
功能。) -
P
命令,切换给定打印标志的默认值。 -
:
命令,运行具有给定名称作为参数的宏(空格被删除)。宏执行的行为类似于 'g' 执行。'q' 或错误会提前返回。 -
|
命令,将选择通过给定的shell命令(类似于<selection>!
在vim中执行)传递。它与!
不同,以便在没有给出显式选择时默认使用当前选择。
功能标志
local_io
包含并公开一个简单的本地文件系统和shell IO
实现。
initial_input_data
添加 'C' 命令。这会修改UI特性。
serde
#[derive(serde::Serialize, serde::Deserialize)]
在 Macro
结构体上。
其他结构体可以根据请求获得派生,但 Macro
(及其成员)是唯一一个似乎相关的。
归属
该项目基本上是在regex crate的基础上构建的,因为正则表达式是Ed的核心。
贡献
截至目前,有两个主要的贡献受到欢迎。
- 添加测试。虽然命令的核心用法已经过测试,但应该验证更多行为。如果您有时间,添加测试用例以验证以下内容:
- 命令的行为与 COMMANDS.md 中所述一致。
- 命令的行为与GNU Ed相同,除非在上面的 与GNU Ed的差异 部分中另有说明。
- 检查待办事项。查看 TODOS.md 文件,选择一个任务去做,尽情发挥。您可以通过添加PR来防止其他人处理相同的任务(在相关的审查之前将其标记为WIP)。
- 为未记录或意外的行为创建问题。
- 请求支持您的用例。为您的需求创建一个功能请求问题。(查看 POTENTIAL_FEATURES.md 以查看是否已准备类似的特性,如果是,请在功能请求中注明。)
依赖
~2.2–3.5MB
~60K SLoC