電子報 #10 - Neovim v0.4.4

2020年10月

什麼是 Neovim?

Neovim 是歷史悠久的文字編輯器 vim 的分支,專注於可擴展性和易用性。它不是重寫,而是 Vim 的延續和擴展。存在許多克隆和衍生品,有些非常聰明,但沒有一個是 Vim。Neovim 是為那些想要 Vim 的優點以及更多功能的使用者而打造的。請透過 :help vim-differences 查看差異列表。

參與

如果您有興趣為 Neovim 做出貢獻,請訪問 github 頁面 以了解詳細資訊。我們有一個很棒的測試套件和自動化 CI,所以您可以直接開始嘗試。不要害怕開啟 PR 來獲取意見或只是利用基礎設施!

要與團隊聯繫,請加入 gitter 頻道(也可透過 IRC 存取),或訪問 Neovim subreddit,許多開發人員都會閱讀。參與對話也是一種貢獻!

新功能

上一個 電子報 涵蓋了 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 以 –embed 啟動,除非也提供了 –headless (@bfredl, #9024)。

  • Neovim 的 libuv 迴圈已作為 vim.loop 公開給 lua (@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:一個非常酷的基於 electron 的 GUI,旨在複製 VSCode 的體驗。
  • DinVim Vim for Mac:一個「安全可靠」的 Neovim GUI - 在 OSX 應用程式商店提供。
  • akiyosi/gonvim:gonvim 的維護分支。
  • etorth/libnvc:一個基於 SDL 的易於嵌入的 GUI。
  • mvilim/neovim-pytc-example:第一個不是預設終端機 UI 的 Neovim 終端機 UI!
  • GNvim:一個用 Rust 撰寫的「用於 neovim 的 GUI,沒有任何網頁膨脹」。
  • Firenvim:將 Neovim 嵌入 Chrome、Firefox 和其他瀏覽器中的一個大網頁膨脹。
  • 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,與團隊聊天。