新闻稿 #5 - 开箱即用

2015 年 4 月

Neovim 杰出的沟通和错误处理。在我迄今为止的经历中,它是示范性的 FOSS 项目。 @telemachus

欢迎来到 Neovim 的第五期新闻稿,该项目旨在成为开箱即用的 Vim 开箱即用

一般新闻

Neovim 的 Gitter.im

除了 邮件列表 和 IRC 频道之外,您还可以加入 Neovim 聊天室,该聊天室由 Gitter.im 提供。它具有方便的 Web 界面,但也能让您使用 您喜欢的 IRC 客户端 连接。

Black Duck 2014 年开源新秀

Black Duck 是一家帮助其他公司采用开源软件的公司,该公司将 Neovim 评选为过去一年中要重点展示的项目之一。该公司每年都会表彰一些在当年开始的顶级新开源项目。

ICCF 荷兰捐赠

正如上一期新闻稿中提到的,Unixstickers 已将 Neovim 贴纸 添加到其库存中。每购买一张贴纸,都会增加捐赠给 Bram Moolenaar 的慈善机构 ICCF 荷兰 的金额。

自它们被添加以来,Unixstickers 在 3 月 24 日 刚刚捐赠了 106 美元的捐款。

Neovim Wiki 包含一个名为 相关项目 的页面,其中包含当前 GUI 项目、API 客户端、利用 Neovim 功能的插件以及直接支持 Neovim 的项目的列表。

某些项目可能是实验性的,这意味着可能存在错误,并且项目可能仍在进行中。

您是否知道可以列出的其他项目?不要犹豫,自己添加链接!

开发新闻

终端用户界面 (TUI)

@tarruda 已合并了他的 拉取请求,以使用 libtermkeyunibilium 重新实现终端用户界面。

Libtermkey 是 @leonerd 编写的库,它“允许轻松处理来自基于终端的程序的键盘输入”。它具有处理特殊键、UTF-8 组合 等等的功能。

Unibilium 是 @mauke 编写的库,它与 terminfo 交互。Terminfo 是一个库和数据库,它可以轻松地与显示终端交互,而无需担心设备特定的细节。有关更多详细信息,请参阅 man 5 terminfo 中的 terminfo 手册页。

尽管 TUI 实现包含在 Neovim 中,但它在架构上与编辑器核心分离:它使用与外部客户端和 GUI 相同的 API。

附加键绑定

由于使用了 libtermkey,Neovim 现在可以绑定 元键Ctrl-Shift 组合,这两者在终端中以前是不可能的。请务必 阅读有关更新的绑定功能的更多信息,以获取其他示例和可能性。

内置终端仿真

@tarruda 已完成他的 拉取请求,添加了新的 :terminal 命令,该命令在运行时会启动一个完整的终端仿真器。终端使用 Neovim 的本机缓冲区和窗口,这意味着用户可以通过按下 <C-\><C-n> 进入 普通模式

这旨在取代并提供比已有的 Vim 命令 :shell 更多功能,该命令已从 Neovim 中删除。有关此功能决策的更多解释,请参阅 此评论,该评论由 @tarruda 作出。

此功能的完整文档可在 :help nvim-terminal-emulator 中找到。

此功能是使用 @leonerd 的另一个项目 libvterm 实现的。

真彩色

随着对上面描述的 TUI 的更改,这允许 @tarruda 发布了一个 拉取请求,以将真彩色添加到支持的终端中。

有关真彩色的更详细解释以及支持它的终端,请参阅 此 Gist,该 Gist 由 @XVilka 编写。

若要启用真彩色支持,请设置环境变量 NVIM_TUI_ENABLE_TRUE_COLOR

Windows 构建

2014 年 7 月 的新闻稿中首次详细介绍了在 Windows 上构建 Neovim 的进度。

在取得一个巨大的里程碑后,@equalsraf 已经能够在 Windows 上构建 Neovim,并且还在 AppVeyor 上进行了 构建,AppVeyor 是一款专门针对 Windows 的持续交付服务。

@equalsraf 提供了有关要求、构建依赖项/Neovim 以及已知错误的 详细说明

展望未来,@equalsraf 仍在努力完成他的主要 拉取请求,而 @justinmk 已开始了一个 新问题 用于收集要求和讨论。

特殊接口清理

Vim 有多种方法可以通过其许多别名来启动它。完整的列表可以在 Vim 文档的 启动部分 中找到。

@Pyrohh 开启了一个 问题 来讨论删除此类别名。所有别名都有相应的标志,可以改为使用这些标志。

经过一番讨论后,决定删除使用较少的别名。然后,@Pyrohh 发布了一个 拉取请求 来删除以下内容

  • ex: Ex 模式。
  • exim: “改进的”Ex 模式。
  • view: 只读模式。
  • gvim: 使用 GUI。
  • gex: GUI 且处于 Ex 模式。
  • gview: GUI 且处于只读模式。
  • rvim: 受限模式。
  • rview: 只读且处于受限模式。
  • rgvim: GUI 且处于受限模式。
  • rgview: GUI、只读且处于受限模式。

此外,@Pyrohh 发布了另一个 拉取请求 来合并 vimdiffvim -d

删除“简单模式”

@fmoralesc 还发布了一个 拉取请求 来删除 evim。根据 文档,它会在插入模式下启动,这使它可以像普通的编辑器一样工作。

即使删除了该功能,仍然可以使用底层的 'insertmode' 选项来模拟它,简单模式就是利用该选项。

GUI 状态

除了上面某一节中提到的终端界面之外,Neovim 的图形方面也发生了一些变化。

自上一期新闻稿以来,以下项目按任意顺序创建

  • SolidOak@oakes 编写:“一个简单的 Rust IDE”,它嵌入了 Neovim 来提供文本编辑功能。请访问 网站 以获取有关 IDE 的更多详细信息和二进制文件。
  • Neovim.app@rogual 编写:一款对 OS X 友好的编辑器,具有鼠标支持、选项卡、剪贴板等等。
  • vim-mode@carlosdcastillo 编写:一款正在开发中的 Atom 包,它使用 Neovim 来绑定和操作文本。请观看 此视频 以了解它。
  • python-client@tarruda 编写:除了作为与 Neovim 通信的 Python 库之外,它还包含使用 GTK 的界面。
  • neovim.as@coolwanglu 编写:一款使用 Atom Shell 的应用程序。可以在 此处 查看它的运行视频。

新选项卡事件

@fmoralesc此拉取请求 中添加了三个新的 自动命令 事件。 自动命令事件 是一种在响应特定事件时执行某些操作的方法。事件在插件中特别有用。

新的事件是:TabNewTabNewEnteredTabClosed

改进作业 API 的重大更改

@tarruda 正在继续完善新的作业 API。他的工作在 此最新的拉取请求 中得以继续。这可能是对使用现有作业 API 的现有插件的重大更改。

此改进是利用函数回调(用于输入、输出事件)而不是以前使用 自动命令 来响应事件。

除此之外,VimL 中还有更多作业控制函数,包括 jobwait()jobclose()

再见 long_u

在为期两期简报(6 月和 11 月)的针对 Vim 特定整数类型的史诗级十字军东征中,@elmart 已完成删除整数类型 long_u@elmart 的更改被分解为最后三个拉取请求(123)。

这是朝着 @tarruda 的目标迈出的一步,即 删除所有项目特定类型。目前,唯一剩下的就是 char_u,目前它有大约 12,300 个实例在使用中。

添加 EndOfBuffer 突出显示组

@mhinz 希望找到一种方法来 删除文件末尾后的 ~。他提出了一个新的 :highlight 组,名为 EndOfBuffer,与当前的 组列表 配合使用。

他的 提案 最初是以补丁的形式发送到 vim-dev,他的更改被 Bram 接受,并将成为未来 Vim 的一部分。 @mhinz@fmoralesc 准备了 拉取请求 以将更改引入 Neovim。该拉取请求已合并到主分支。

垃圾收集性能

当使用具有大量对象分配的插件的 Vim 时,有时垃圾收集会启动并导致 Vim 由于花费在查找要释放的对象上的时间而挂起。

这个问题是由松本泰宏在 vim_dev发布 的。由水谷淳也编写并提议给邮件列表的 补丁 改进了遍历对象的算法。在松本泰宏的测试用例中,未打补丁的 Vim 执行需要 100 秒,而应用补丁后只需 0.134 秒。

@Shougo 创建的 问题 用于讨论将该补丁应用于 Neovim。然后,@oni-link 创建了一个 拉取请求 来应用该补丁,该补丁很快就被合并了。

Vimexpect 和示例 GDB 插件

@tarruda 在一个 拉取请求 中创建了一个小的 Vimscript 库,它模仿了 Tcl 的 Expect 用于 Neovim。

Expect(在 Tcl 中)的目的是简化对不提供该功能的基于文本的应用程序的脚本编写和自动化。

@tarruda 提供了一个示例 GDB 插件 作为概念证明。创建该插件是为了简化 Neovim 的开发并展示 vimexpect 的可能性。

选项更新

删除 compatible

Vim 有一个 compatible 选项,它可以让 Vim 更兼容 Vi。它也可以通过运行 vim -C 来启动。

在 12 月,@klusark 做了一个 拉取请求 来更改 nocompatible(它开启了与 Vi 的不兼容模式)始终设置。

这意味着 set nocompatible 和标志 -N 是无操作的。这也意味着,由于没有兼容模式,如果你运行 set compatible,它会报错。

删除 edcompatible

创建了一个 问题 来讨论删除 edcompatible 选项。启用此功能将为 gc 标志提供针对 :substitute 命令的特殊行为。Vim 的文档实际上不鼓励使用此选项。

@Pyrohh 创建了一个 拉取请求 来删除该功能,该请求已被合并到主分支。

删除 ttyfast

Vim 有一个名为 ttyfast 的选项,如果存在“快速终端连接”,则会设置该选项。设置后,它将发送更多字符以进行绘制,而不是使用插入/删除行命令。

在 8 月份,讨论 开始,人们一致认为应该将该选项设置为默认值。不久之后,@fornwall 创建了一个 拉取请求 来使其成为默认值。

经过几个月设置为默认值且没有出现任何问题后,@Pyrohh 创建了一个 拉取请求 来完全删除它。

更简单的始终开启/始终关闭选项处理

由于删除了以下三个选项,并且可能还会删除更多选项,因此 @fwalch 创建了一个 拉取请求 来简化始终开启/始终关闭选项的处理方式。

上游 Vim 补丁

Neovim 继续合并提交到 Vim 邮件列表的上游 Vim 补丁。

自从上次简报以来,提交到 Neovim 的补丁已超过 60 个拉取请求。所有补丁的当前状态可以在 Vim 补丁报告 中找到。

帮助

捐赠

如果您想帮助支持开发,您可以使用比特币捐赠,地址:1Evu6wPrzjsjrNPdCYbHy3HT6ry2EzXFyQ,或在 Neovim Bountysource 页面上支持团队。

贡献

如果您是经验丰富的开发人员,或者没有经验但想学习,请访问 GitHub 仓库 并查看 READMECONTRIBUTING 指南,最后是 Wiki 以了解更多信息。

有很多机会可以帮助,也有很多事情可以做。

总结

您对这份简报有任何反馈或建议吗?欢迎通过 Neovim Twitter 与我们联系。

这份简报无法涵盖社区的所有贡献和支持。感谢自上次简报以来以各种方式提供帮助的所有其他贡献者。

请务必订阅 RSS 订阅 以了解 Neovim 世界的最新动态。下一份简报将在几个月后发布。

下期再见。 :wq

新闻

新闻存档 中查找更多更新。此外,还有 RSS 订阅

什么是 Neovim?

Neovim 是一款基于 Vim 的文本编辑器,旨在增强 可扩展性可用性,鼓励开发新的应用程序和 贡献

讨论

访问 #neovim:matrix.org 或 irc.libera.chat 上的 #neovim 与团队聊天。