新闻稿 #8 - 打开窗口

2017 年 12 月

什么是 Neovim?

Neovim 是久负盛名的文本编辑器 vim 的一个分支,专注于可扩展性和可用性。它不是重写,而是 vim 的延续和扩展。许多克隆和衍生产品存在,有些非常聪明——但没有一个是 vim。Neovim 是为那些想要 vim 的优点,以及更多功能的用户而构建的。在 :help vim-differences 查看差异列表。

参与

如果您有兴趣为 Neovim 做贡献,请阅读 CONTRIBUTING.md 开始。我们有一个很棒的测试套件和自动化的 CI,所以您可以直接跳入并尝试。不要害怕打开 PR 以获取评论或只是利用基础设施!

要与团队取得联系,请加入 gitter 频道(也可以通过 IRC 访问),或者访问 Neovim subreddit,许多开发人员都会阅读。参与对话也是一种贡献!

新贡献者感谢:@ckelsel 负责移植大量 vim 修补程序,就像 @lonerover 一样。谢谢!

旧贡献者感谢:@oni-link 不是你在提交日志中经常看到的名称,但他一直在审查更改和改进复杂 PR 方面非常有帮助。谢谢!

有什么新消息

上一个 新闻稿 已经积满了灰尘,所以我们想让你了解 Neovim 世界的最新动态。

Neovim 从那时起已经发布了 3 个 (!) 版本,所以让我们首先回顾一下这些版本。

版本 0.2

此版本带来了一系列修复和改进。我们将在下面更详细地介绍其中一些,但请务必查看 发布页面 以获取所有详细信息。

面向用户的 0.2

  • 现在完全支持 Microsoft Windows
    • :terminal 模式在 0.2.1 中可用,请参阅下文!
  • 从这个版本开始,Neovim 为 macOS 和 Windows(32 位和 64 位)提供 预构建软件包。Windows 软件包包含一个 GUI 和一些额外的工具,例如 curl.exe
  • :terminal 已经进行了各种改进(@justinmk#6185
    • findfile():findgf 现在可以在 :terminal 缓冲区中使用(@tweekmonster#6009
    • 现在对 shell 输出进行节流,以保持终端响应能力(@justinmk#5396
    • shell 命令的参数现在可以与 :term 正常工作(@friedsock#4504
  • 对 man.vim 做出了许多改进(@m-wynn@raichoo@renstrom@justinmk#6693#6766#6815#3104#7405
  • Man 和帮助页面现在包含 TOC(@tweekmonster#5169
  • 消息 Reading from stdin 已删除(@msva#6298
  • guicursor 现在可以在 TUI 中使用(@teto#6423
  • 有一个新的突出显示组 Whitespace 用于与空白相关的 listchars@zhou13#6367
  • 已实现命令行补全(@justinmk#6376
  • 事件 DirChanged 现在可用于自动命令(@mhinz#5928
  • cpoptions:使用 _ 标志切换 cw 行为(@raichoo@chrisbra#6235
  • CTRL-R 现在在粘贴到命令行时会省略尾随的 ^M@justinmk#6137
  • 您现在可以 :edit 文件名,无需转义空格(@Kurt-Bonatz#6119
  • 对默认值的更改
    • mouse=a 不再是默认值(@justinmk#6022
    • NVIM_TUI_ENABLE_CURSOR_SHAPE 已删除,您可以使用 guicursor 代替(请参阅 https://github.com/neovim/neovim/releases/tag/v0.2.0)
    • showcmdbelloff=allruler 现在是默认值(@justinmk#6087

面向开发者的 0.2

  • 完整的 API 文档,请访问 :help api
  • API 更改
  • writefile 现在遵守 fsync 选项(@ZyX-I#6427
  • 除了来自 vim 团队的努力(7.4.{2055,2057,2058}),eval.c 已重构,并且错误消息已改进(@ZyX-I#5119
  • 现在可以使用 id 函数,并且 printf(%p) 终于有用(@ZyX-I#6095
  • 如果存在 g:loaded_*,将禁用所有提供程序(@justinmkcommit
  • setpos 现在可以在其他缓冲区中设置小写标记(@hardenedapple#5753
  • 您可以检查 v:exiting 以查看 Neovim 是否正在退出(@mhinz#5651

版本 0.2.1

接下来让我们看看 0.2.1 中发生了什么。与以前一样,查看 发布说明 以获取详细信息。

面向用户的 0.2.1

  • Nvim 现在支持窗口局部突出显示(@bfredl#6700
  • 更多终端改进
    • 已合并 TUI 光标移动、SGR 和滚动优化、光标形状和终端类型识别改进(@jdebp#6816
    • 使用数字列时会调整终端缓冲区(@tecywiz121#7440
    • 新创建的 :terminal 现在将保持在普通模式(@nelstrom#6808
  • 命令行现在可以着色(@ZyX-l#6364
  • 现在可以配置自定义剪贴板提供程序(@nhooyr#6030
  • 剪贴板提供程序现在可以回退到 tmux 支持(@xu-cheng#6894
  • :Tutor 做出了进一步改进(@fmoralesc#7028
  • inccommand 现在可以使用前导修饰符,例如 keeppattern@jamessan#6967
  • 可以配置 ruby 主机(@alexgenco#6841
  • 未命名寄存器在重启时保留(@AdnoC#4700
  • 面向 Windows 用户
  • 面向 Linux 用户
    • 您现在可以下载 AppImage 软件包(@AdnoC#6638
    • 功能键现在可以在终端 UI 中使用(@rjmill#5014
    • 修复了极长行(超过 100m 个虚拟列)导致的崩溃(@Grimy#3527
    • :cquit 现在可以接受可选的错误代码作为参数(**@joshleeb**,#7336)。
    • tmux 中的真彩色已修复(**@DarkDefender**,#7100)。
    • :checkhealth 现在是内置命令,它会验证你的 $VIMRUNTIME(**@justinmk**,#7399)。
    • cursorcolumncolorcolumn 现在会尊重语法高亮(**@zhou13**,**@justinmk**,#7364)。

开发者版 0.2.1

  • 更改
    • 外部 UI 现在应该使用 FocusGained 事件,而不是发送 <FocusGained> 伪键(**@justinmk**,#7221)。
  • Neovim 源代码现在使用 PVS 进行分析(**@ZyX-l**,#6493)。
  • 外部 UI 现在可以绘制
  • Lua 正在蓬勃发展
  • 通过 get_keymap 以编程方式获取有关映射的信息(**@tjdevries**,#6236)。
  • 你现在可以使用 nvim_get_hl_by_name/by_id 来检索高亮(**@teto**,#7082)。
  • bufhl 现在可以用来创建新的高亮组(**@bfredl**,#7414)。
  • 外部 UI 可以从 menu_get 获取菜单(**@teto**,#6322)。
    • menu_get 会对特殊字符进行美化打印,使其可以将结果重新输入到例如 nvim_input 中(**@teto**,**@KillTheMule**,#7340)。
  • RPC 客户端可以使用 sockconnect 连接到套接字(**@bfredl**,#6594)。
  • serverstart 现在使用 uv_getaddrinfo(),带来了 IPv6 支持(**@mhinz**,#6680)。
  • 你现在可以在一个 :execute 调用中定义多个函数(**@ZyX-I**,#6914)。
  • 日志记录已默认启用(**@justinmk**,#6827)。

发布 0.2.2

这是一个快速修复版本,主要包含 bug 修复。查看 发行说明 获取详细信息。也有一些新功能。

  • curdir 已作为视图选项添加(**@EricR86**,#7447)。
  • 节点主机可用(**@billyvg**,#7458)。
  • :checkhealth 现在还会验证运行时路径(**@justinmk**,#7526)。
  • scrollback 现在默认设置为 10000(**@justinmk**,#7556)。
  • 一个值得注意的 bug 修复是撤销 netrw 更新,我们已经收到了很多关于这个问题的报告!(**@justinmk**,#7557)。

0.2.3-dev

想知道下一个版本会有什么?以下列出了一些值得期待的功能。

  • CmdlineEnterCmdlineLeave 自动命令(**@bfredl**,#7422)。
  • 通道:支持缓冲输出和字节套接字/标准输入输出(**@bfredl**,#6844)。
  • 一个完整的 viml 表达式解析器(**@ZyX-l**,#7234)。
  • 我们投入了大量工作来让 Neovim 更好地与不同的终端模拟器协同工作,并且仍在继续(**@justinmk**,#7664#7653#7720#7640#7624 和 **@florolf**,#7676)。

近期展望:即将到来

有关 Neovim 的计划功能、目标和想法的概述,请访问 路线图。以下是一些值得注意的即将发布的 PR。

PSA:如果你从最新的 master 分支构建 Neovim,请始终查看 跟踪 HEAD 以了解任何更改。

关于 Neovim

相关项目 的维基页面添加了不少内容,查看完整的更改 在此

API 客户端

API 客户端是 Neovim 架构的核心,它们极大地改善了开发者的体验。用你喜欢的任何语言编写插件!自从上次通讯以来,我们看到了另一个 C++ 客户端、一个 Elixir 客户端和一个 Racket 客户端。 节点客户端 进行了全面检修,并获得了一位新的维护者。感谢 **@billyvg** 接手!虽然不是全新的,但需要特别感谢 ruby 客户端 维护得很好。感谢 **@alexgenco**!

如果你碰巧喜欢其他尚未列出的语言,一个很好的起点是 文档,并且一定要在 gitter 频道 上讨论。

GUI

GUI 方面发生了太多活动,无法列出所有新的客户端,所以我们只关注一些突出的客户端。VSCode 正在使用 Neovim 来 正确集成 ex 模式命令,Sublime Text 3 也获得了 完整的 Neovim 集成。后者还利用了另一个很酷的 Neovim 特定功能,即外部化的弹出菜单,而且他们只花了 50 行代码 就实现了。最后但并非最不重要的是,eovim 是一个 enlightenment 的 Neovim 客户端。

Neovim 的架构。

一些学生研究了 Neovim 的架构,并发表了一篇关于他们发现的“分析文章”。如果你对更大的图景感兴趣,请务必 查看

Vimcasts 和现代 Vim

vimcasts 的著名人物 Drew Neil 开始录制 关于 Neovim 的节目,并开始着手编写他备受赞誉的书籍 实用 Vim 的后续作品 现代 Vim。这本书的大部分内容都适用于 Vim 8 和 Neovim 用户,但大约 1/3 的内容将涵盖 Neovim 特定功能。

Libuv

Neovim 的基石之一是将 I/O 移植到 libuv。所以你会很高兴地听到 libuv 已经着手 支持更多平台。Neovim 即将登陆你附近的平台!

测试套件

Neovim 通过简单易用的 Lua 语言提供轻松的测试功能。为什么其他人不这样做?原来,他们确实在做,或者至少,neomutt 项目正在为此做准备。很高兴看到 Neovim 的理念被 采纳

统计数据

自上次通讯以来的更改行数

git log  --since="2016-11-01" --numstat --pretty=tformat: --numstat|gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 255393 removed lines: 221106 total lines: 34287

合并的提交

git log  --since="2016-11-01"|wc -l
3110

不同的提交作者

git shortlog -e -s -n --since="2016-11-01"|wc -l
146

文档更改

git log  --since="2016-11-01" --numstat --pretty=tformat: --numstat runtime/doc|gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 8579 removed lines: 6577 total lines: 2002

感谢

感谢贡献者、赞助商、bug 报告者和支持者。感谢 **@justinmk** 开发了这个很棒的项目,还要感谢 **@brammool** 的基础性工作。

vim 团队的 **@brammool** 和 **@chrisbra** 在我们的问题跟踪器上留下了几条评论,很高兴能与他们一起合作!

新闻

新闻存档 中查找更多更新。还有一个 RSS Feed

什么是 Neovim?

Neovim 是一个基于 Vim 的文本编辑器,它专为 可扩展性可用性 而设计,旨在鼓励新的应用程序和 贡献

讨论

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