歡迎來到 Neovim 的第三期(也是遲來的)電子報,這個專案的目標是全面改造 Vim 的程式碼庫。
下一期電子報將於 11 月初發布。為了不讓任何敏感的 Neovim 愛好者感到過多的驚奇,已改為每隔一個月發布一次。
GitHub 上的 Issue 追蹤器現在有超過 1,000 個 issue/pull request。幸運的第 1000 個 pull request在 8 月初開啟。
如上期 7 月的電子報所述,文件已成功移至neovim.io/doc/。
它提供了一些一般文件連結,以及一些針對開發人員和貢獻者的更具體的報告。這些報告已經幫助開發人員貢獻和改進程式碼庫。
以下是過去兩個月的主要新聞,不分先後順序。
system()
這個 issue 在六月電子報中提到了即將發生的事情。
@aktau已完成實作 VimL 的 system()
函式,以使用管道和工作系統,而不是重定向到臨時檔案。此變更提供了一定的速度提升,並避免了一些權限問題(主要影響尚未支援的 Windows)。
當被呼叫的程序有大量輸出時,舊的 system()
實作速度特別慢。一個例子是:system('cat largefile')
。
@aktau利用 libuv 在許多系統上提供高解析度時鐘的能力,透過這個 pull request改進了 Neovim 的效能分析能力。
先前的實作使用 gettimeofday()
。這是 Neovim 無法在 Windows 上執行的障礙(如上一節所述),因為此函式在 Windows 中不受支援。
如需更多關於 Vim 中效能分析的資訊,只需執行 :help profiling
。
在專案開始時,MoonScript 與 Lua 的辯論是廣泛討論的話題。
MoonScript(一種編譯為 Lua 的語言)被選為單元測試的語言。在更新單元測試庫 Busted 之後,一些單元測試失敗了。
因此,決定移除此相依性,以簡化測試並移除一層抽象化。@tarruda製作了隨附的變更和 pull request。
關於 Neovim 未完全符合 msgpack-rpc 規格的討論出現。
他也一直在努力將 msgpack 的使用升級到最新版本 2.0,應該很快就會合併。
在第一期電子報中,首次討論了Python 客戶端。從那時起,@tarruda已重構它以進行各種改進。
@myitcv已提出關於以類似 Python 整合的方式新增 Go 整合的提案。該提案還涉及與語言無關。
雖然這裡的細節太多無法詳細說明,但上面的連結還包含更多關於實作和相關討論的詳細資訊。
在兩個不同的 pull request 中移除了更多已失效或用於不受支援的舊版系統的程式碼(1、2)。
仍然有程式碼殘留的系統包括 SGI IRIS、BeOS 和 EBCDIC。
在 Neovim 中建立暫存檔案的函式需要 libuv 中沒有的功能。
Neovim 的貢獻者之一 @Hinidu 向 libuv 發送了一個 pull request,以新增一個新函式 uv_fs_mkdtemp
。這些變更(現在是 libuv 0.11.27 版的一部分)正被 Neovim 使用以提供暫存檔案/目錄的建立,並且這些變更適用於跨平台。
由於跨平台程式碼已貢獻給 libuv,因此所有基於 libuv 的專案都可以從這些變更中受益。
早在 4 月 9 日,就在 Neovim 的 Bountysource上建立了第一個賞金。該請求是將 Christian Brabandt 從 Vim 撰寫的現有修補程式移植到 Neovim。該修補程式提供了一個 breakindent
選項,該選項將在換行時匹配縮排。
@fmoralesc建立了一個pull request來領取賞金。經過一番討論並進行了一些修訂。從那時起,它們已合併到主分支中,並且 @fmoralesc已獲得賞金!
@war1025已為兩個現有檔案:buffer.c 和 fileio.c新增了單元測試。在重構程式碼時,為程式碼新增更多單元測試涵蓋範圍是 Neovim 的目標之一。
@tarruda製作了一個pull request,透過 msgpack API 公開 Neovim 的一些核心功能。
雖然它仍在發展中,但此核心功能包括:
@tarruda已新增了 --embedded-mode
旗標,這將允許另一個程式在背景啟動 Neovim,並將其用作無頭實例。
從技術上講,它使用 msgpack-rpc透過 stdin 和 stdout 與客戶端進行通訊。
Neovim 已分別在 此 issue 和 此 issue 中,成功使用 Microsoft Visual C++ 以及 MinGW 進行編譯。
如果您想幫助支援開發,可以使用比特幣在此處捐款:1Evu6wPrzjsjrNPdCYbHy3HT6ry2EzXFyQ
,或在Neovim Bountysource頁面上支援團隊。
如果您是經驗豐富的開發人員,或是沒有經驗但想要學習的開發人員,請造訪GitHub 儲存庫並查看 README、CONTRIBUTING 指南,最後查看 Wiki 以瞭解更多資訊。
有很多機會可以提供幫助,並且有很多事情可以做。
您對這第三期電子報有任何回饋或建議嗎?請隨時透過Neovim Twitter聯繫我們。
另外,請務必訂閱 RSS feed,以隨時掌握 Neovim 世界的最新動態。下一期電子報將於兩個月後,在 11 月初發布。
下次見。:wq
Neovim 是一個基於 Vim 的文字編輯器,專為可擴展性和可用性而設計,以鼓勵新的應用程式和貢獻。
造訪 #neovim:matrix.org 或 irc.libera.chat 上的 #neovim,與團隊聊天。