#command #ed #语法高亮 #编辑器 #可嵌入 #输入 #选择

bin+lib add-ed

基于 ED 的可嵌入纯 Rust 编辑器

27 个版本 (8 个重大更改)

0.13.0 2023 年 11 月 12 日
0.11.2 2023 年 10 月 25 日
0.10.0 2023 年 4 月 17 日
0.9.0-alpha82022 年 9 月 25 日
0.7.7 2021 年 6 月 10 日

文本编辑器 中排名 72

Download history 6/week @ 2024-04-20 3/week @ 2024-04-27 6/week @ 2024-05-18 2/week @ 2024-05-25 12/week @ 2024-06-01 7/week @ 2024-06-08 4/week @ 2024-06-15 3/week @ 2024-06-22 19/week @ 2024-06-29 1/week @ 2024-07-20 215/week @ 2024-07-27

每月下载量 235
用于 hired

MIT 许可证

215KB
5K SLoC

添加-编辑器

标准编辑器,现在作为一个库

以前我决定写一个具有语法高亮的 ED 克隆版 hired。在这个过程中,我发现宏命令(如 gvGV:)几乎要求你为它们编写一个 ED 库。所以我做了,这就是它。

与 GNU Ed 的差异

我对一些不太方便的命令做了一些改动,因此特别是高级命令与 GNU Ed 有一些差异(包括语法和行为)。以下是这些更改的列表。

  • g 和相关命令以命令列表作为输入模式(以正则表达式分隔符作为终止符而不是 '.')。(另外,不实现不区分大小写的匹配的 'I' 后缀)
  • # 接受一个选择,并将状态 selection 设置为它而不会打印任何内容。这是为了能够设置选择而不打印。

核心概念

选择

原始 ED 会跟踪你最后交互的行,并且对于大多数命令默认在该行上工作。我觉得这值得扩展,所以 add-ed 跟踪你最后交互的行段。我希望这更直观。(为了避免诸如某些命令默认保存整个缓冲区等不愉快的情况,一些命令默认为整个缓冲区,例如 w 。)

灵活的 API

该库已设计为具有清晰的特质,以使更换大多数组件变得容易。例如,创建一个用于远程编辑的 SSH/SFTP IO 实现、实现 UI 特质的 GUI 前端或从任何给定的文件路径加载宏的 MacroGetter 应该是相当容易的。

与 Ed 相比的新功能

  • AI 命令,这些命令首先 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的核心。

贡献

截至目前,有两个主要的贡献受到欢迎。

  1. 添加测试。虽然命令的核心用法已经过测试,但应该验证更多行为。如果您有时间,添加测试用例以验证以下内容:
    • 命令的行为与 COMMANDS.md 中所述一致。
    • 命令的行为与GNU Ed相同,除非在上面的 与GNU Ed的差异 部分中另有说明。
  2. 检查待办事项。查看 TODOS.md 文件,选择一个任务去做,尽情发挥。您可以通过添加PR来防止其他人处理相同的任务(在相关的审查之前将其标记为WIP)。
  3. 为未记录或意外的行为创建问题。
  4. 请求支持您的用例。为您的需求创建一个功能请求问题。(查看 POTENTIAL_FEATURES.md 以查看是否已准备类似的特性,如果是,请在功能请求中注明。)

依赖

~2.2–3.5MB
~60K SLoC