新闻稿 #10 - Neovim v0.4.4

2020 年 10 月

什么是 Neovim?

Neovim 是久负盛名的文本编辑器 vim 的一个分支,专注于可扩展性和可用性。它不是重写,而是 Vim 的延续和扩展。存在许多克隆和衍生产品,其中一些非常巧妙,但没有一个是 Vim。Neovim 是为希望使用 Vim 的优点以及更多功能的用户而构建的。有关差异列表,请参见 :help vim-differences

参与

如果您有兴趣为 Neovim 做出贡献,请访问 github 页面 获取详细信息。我们拥有出色的测试套件和自动化 CI,因此您可以直接参与并尝试。不要害怕打开 PR 以获取评论或仅仅利用基础设施的优势!

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

有什么新消息

上一次新闻稿 涵盖了 Neovim v0.3.0 的发布,现在是时候用自那以后最令人兴奋的 Neovim 版本:v0.4.4 来做同样的事情了!

针对用户的 0.4.4

  • Neovim 开始为与 xterm 兼容的终端检测终端的背景颜色 (@joshtriplett, #9509)

  • 'maxcombine' 选项已被删除,现在始终默认设置为 6 (@bfredl, #7992)

  • 'fillchars' 设置现在具有 eob 选项,允许用户配置用于表示缓冲区末尾后的行的字符(以前硬编码为 ~)(@FriedSock, #8546)

  • F 已添加到默认的 'shortmess' 选项中,并且已删除 S (@justinmk, #8619, #10136)

  • CursorLine 类型现在将更智能:如果其前景色未设置,CursorLine 的文本将使用 CursorLine 的背景颜色和默认语法突出显示颜色作为前景色 (@zhou13, #8578).

  • 终端 UI 现在可以支持下划线和彩色下划线,前提是您的终端支持该功能 (@blueyed, #9052).

  • Neovim 的 'background' 设置现在默认设置为 dark,以便在跨平台获得一致的设置 (@justinmk, #9205).

  • 'fillchars''listchars' 现在是窗口本地选项 (@mhinz, #9539).

  • 弹出菜单现在可以被制作成(伪)透明的 (@bfredl, #9571).

  • 浮动窗口!这使得各种有用的功能成为可能,例如 大型时钟 (@bfredl, @dzhou121, #6619)

  • 自动命令现在具有 ++once 修饰符,使它们仅执行一次 (@justinmk, #9706)

  • 已实现一个名为 CompleteChanged 的新自动命令事件 (@chemzqm, #9616)

  • Vim 的 TermDebug 插件已移植到 neovim (@kwon-young, #8364).

  • 现在可以使用 wildoptions=pum 将通配符菜单变成弹出菜单 (@bfredl, #9607)。事实上,这是默认设置!

  • 当 UI 连接到和断开 Neovim 时,现在会触发两个事件:UIEnter 和 UILeave (@equalsraf, #6917).

  • 当进入/离开终端时,也会触发 TermEnterTermLeave 自动命令 (usama54321, #8550).

针对开发人员的 0.4.4

  • 新的 UI 扩展
    • ext_hlstate 扩展允许语义识别内置和语法突出显示 (@bfredl, #8221).
    • ext_linegrid 扩展发送更渐进的屏幕更新,以提高性能 (@bfredl, #9064).
    • ext_multigrid 扩展引入了“网格”的概念,它只是一个渲染表面 (@bfredl, @UtkarshMe #8455).
    • ext_messages 扩展使 UI 能够提供外部命令行 (@bfredl, @dzhou121 #7466)
    • ext_popupmenu 使 neovim 发送有关其弹出菜单的信息 (@bfredl #9607).
  • 新的 API 函数
    • nvim_buf_get_offset:返回行的字节偏移量 (@bfredl, #9180)
    • nvim_buf_is_loaded:检查缓冲区是否已加载 (@phodge, #7688).
    • nvim_create_buf:创建新缓冲区 (@bredl, #9272)
    • nvim_get_context/nvim_load_context:探索和恢复编辑器的状态 (@justinmk, #10619.
    • nvim_input_mouse:执行鼠标操作 (@bfredl, #9429).
    • nvim_open_win:创建浮动外部窗口
    • nvim_set_keymap:为模式设置全局映射 (@yilin-yang, #9224).
    • nvim_win_close:关闭窗口 (@bfredl, #9667).
    • nvim_win_set_buf:设置窗口的当前缓冲区 (@justinmk, #9100)
    • nvim_win_set_config:配置窗口的布局 (@mhinz, #9626).
  • 已更改的 API 函数
    • nvim_buf_lines_event 现在将为终端缓冲区发送事件 (@justinmk, #8616).
  • Neovim 现在始终等待 UI,除非也提供 –headless,否则使用 –embed 启动 (@bfredl, #9024).

  • Neovim 的 libuv 循环已公开到 lua 中,作为 vim.loop (@zhaozg, @andreypopp, #10123).

接下来是什么?

Neovim 贡献者一直在努力工作,并为 v0.5.0 添加了许多新功能,例如用 Lua 编写的 LSP 客户端TreeSitter 集成。下一个 Neovim 版本有望令人着迷!

围绕 Neovim

相关项目 的 wiki 页面是一个不断增长的项目列表,这些项目以某种方式利用了 Neovim 的扩展功能。以下是自上一次新闻稿以来的新增内容概览

插件

以下插件已找到进入我们 wiki 的方法

  • coc.nvim:语言服务器协议客户端,旨在复制 VSCode 的功能
  • markdown-preview.nvim:在您的浏览器中提供 markdown 文件的预览,并同步滚动。
  • nvim-gdb:GDB、LLDB 和 PDB 的瘦包装器
  • nero.nvim:Neovim 的 REPL
  • neogdb.vim:Neovim 的 Vim GDB 前端
  • nvim-luadev:用于开发 lua 插件的 REPL
  • Conjure:通过套接字为 Neovim 提供 Clojure 和 ClojureScript 工具
  • Aniseed:用 Fennel(一种编译为 Lua 的 Lisp)为 Neovim 编写插件。
  • nvim-luapad:嵌入式 lua 引擎的交互式实时 neovim 草稿板。

API 客户端

大量新的 API 客户端

python 客户端也已重命名为“pynvim”。

GUI

也许 2018/2019 年不是 Linux 桌面的年头,但它们一定是 Neovim GUI 的年头

  • veonim:一个非常酷的基于电子的 GUI,旨在复制 VSCode 体验。
  • DinVim Vim for Mac:适用于 Mac 的“安全可靠”Neovim GUI - 可在 OSX 应用商店中使用。
  • akiyosi/gonvim:gonvim 的维护分支。
  • etorth/libnvc:一个易于嵌入的基于 SDL 的 GUI。
  • mvilim/neovim-pytc-example:Neovim 的第一个终端 UI,而不是默认的终端 UI!
  • GNvim:用 Rust 编写的“没有任何 Web 膨胀的 Neovim GUI”。
  • Firenvim:一个将 Neovim 嵌入到 Chrome、Firefox 和其他浏览器中的庞大 Web 膨胀包。
  • glrnvim:一个在 alacritty 内部启动 neovim 的终端包装器。
  • yatli/fvim:一个用 F# 编写的漂亮 UI - 谁知道函数式语言实际上可以用来编写软件?
  • Neo Vim:一个将 neovim 集成到 VSCode 的新尝试。
  • kethku/neovide:一个用 Rust 编写的“无废话 Neovim 客户端”,带有一点光标疯狂。
  • dontpanic92/dotnvim:一个具有透明背景的 C# neovim 客户端。

博客文章

一些专门讨论 Neovim 相关事物的文章

  • 用 lua 编写 Neovim 插件:https://www.2n.pl/blog/how-to-write-neovim-plugins-in-lua
  • 用 lua 编写你的 init.vim:https://teukka.tech/luanvim.html
  • 从 lua 使用 Neovim 的事件循环:https://teukka.tech/vimloop.html

统计数据

自上次通讯以来的更改行

git log v0.3.0..v0.4.4 --numstat --pretty=tformat: --numstat | nawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 168844 removed lines: 75466 total lines: 93378

合并的提交

git log v0.3.0..v0.4.4 --pretty=oneline | wc -l
3477

不同的提交作者

git shortlog -e -s -n v0.3.0..v0.4.4 | wc -l
164

文档变更

git log v0.3.0..v0.4.4 --numstat --pretty=tformat: --numstat runtime/doc | nawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 9226 removed lines: 7002 total lines: 2224

感谢

感谢贡献者、赞助商、错误报告者和支持者。请注意,您现在可以通过 github SponsorsOpenCollective 赞助 neovim。感谢 @justinmk 的精彩项目,并感谢 @brammool 的基础工作。

新闻

新闻档案 中找到更多更新。还有一个 RSS Feed

什么是 Neovim?

Neovim 是一款基于 Vim 的文本编辑器,旨在实现 可扩展性可用性,以鼓励新应用和 贡献

讨论

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