Neovim 在溝通和處理錯誤方面表現出色。以我目前的經驗來看,這是一個典範的 FOSS 專案。@telemachus
歡迎來到 Neovim 的第五期電子報,這個專案的目標是成為 Vim 的開箱即用版本。
現在,除了郵件列表和 IRC 頻道之外,您還可以加入透過 Gitter.im 提供的 Neovim 聊天室。它具有方便的網頁介面,但也允許您使用您慣用的 IRC 客戶端連線。
Black Duck 是一家協助其他公司採用開源軟體的公司,選擇 Neovim 作為去年重點介紹的專案之一。該公司每年都會表彰一些年度新成立的頂尖開源專案。
如上一期電子報所述,Unixstickers 已將Neovim 貼紙加入其產品清單。每購買一張貼紙,捐給 Bram Moolenaar 的慈善機構 ICCF 荷蘭的金額就會增加。
自從加入以來,已募得 106 美元,Unixstickers 在 3 月 24 日剛捐出。
Neovim Wiki 包含一個名為相關專案的頁面,其中包含目前 GUI 專案、API 客戶端、利用 Neovim 功能的插件,以及直接支援 Neovim 的專案列表。
其中一些專案可能是實驗性的,這表示可能會出現錯誤,並且專案可能仍在進行中。
您是否知道可以列出的其他專案?請隨時自行新增連結!
@tarruda 已合併他的合併請求,以使用 libtermkey 和 unibilium 來重新實作終端使用者介面。
Libtermkey 是 @leonerd 的一個函式庫,可「輕鬆處理來自終端程式的鍵盤輸入」。它具有處理特殊按鍵、UTF-8 組合字符等功能。
Unibilium 是 @mauke 的一個函式庫,可與 terminfo 介接。Terminfo 是一個函式庫和資料庫,可讓您輕鬆地與顯示終端介接,而無需擔心裝置特定的詳細資訊。如需更多詳細資訊,請執行以下命令來查看 terminfo 的 man 頁面:man 5 terminfo
。
儘管 TUI 實作包含在 Neovim 中,但其架構上與編輯器核心分離:它使用與外部客戶端和 GUI 相同的 API。
由於使用了 libtermkey,Neovim 現在可以繫結meta 鍵和 Ctrl-Shift
組合,這兩者在以前的終端中都不可能實現。請務必閱讀更多有關更新的繫結功能,以取得其他範例和可能性。
@tarruda 已完成他的合併請求,新增了一個新的 :terminal
命令,該命令在執行時會啟動一個完整的終端模擬器。終端使用的是 Neovim 的原生緩衝區和視窗,這表示使用者可以按 <C-\><C-n>
來進入普通模式。
這旨在取代並提供比現有的 Vim 命令 :shell
更多的功能,該命令已從 Neovim 中移除。有關此功能決策的更多說明,請參閱 @tarruda 所做的此評論。
此功能的完整文件可在 :help nvim-terminal-emulator
下找到。
此功能是使用 @leonerd 的另一個專案 libvterm 來實作的。
透過上述 TUI 的變更,這讓 @tarruda 可以提出合併請求,將真彩色新增至支援的終端。
有關真彩色的詳細說明以及支援它的終端,請參閱由 @XVilka 撰寫的此 Gist。
若要啟用真彩色支援,請設定環境變數 NVIM_TUI_ENABLE_TRUE_COLOR
。
在 Windows 上建置 Neovim 的進度最早在2014 年 7 月的電子報中詳細說明。
在一個巨大的里程碑中,@equalsraf 已經能夠在 Windows 上建置 Neovim,並且在專為 Windows 而設的持續交付服務 AppVeyor 上也有一個建置。
@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 還提出了另一個合併請求,以合併 vimdiff
和 vim -d
。
@fmoralesc 也開啟了一個合併請求來移除 evim
。根據文件所述,它會在插入模式下啟動,使其可以像一般的編輯器一樣運作。
即使移除了此功能,仍可使用簡易模式所利用的底層 'insertmode'
選項來模擬它。
除了上述章節中的終端介面外,Neovim 的圖形方面也出現了一些變化。
自上一期電子報以來,以下專案已建立(不分先後順序):
由 @fmoralesc 在 此 pull request 中新增了三個新的 自動指令 事件。 自動指令事件是一種在特定事件發生時執行某些操作的方式。事件在插件中特別有用。
新的事件有:TabNew
、TabNewEntered
和 TabClosed
。
@tarruda 持續精進新的 job API。他在 此最新的 pull request 中繼續了他的工作。對於使用現有 job API 的現有插件來說,這可能是一個破壞性的變更。
此改進是為了使用函數回呼(用於輸入、輸出事件)來取代先前使用 自動指令 來回應事件的方式。
除此之外,VimL 中還有更多的 job 控制函數,包括 jobwait()
和 jobclose()
。
long_u
在經歷了之前兩期電子報(六月和十一月)針對 Vim 特定整數類型的史詩般討伐之後,@elmart 終於完成了移除整數類型 long_u
的工作。@elmart 的變更被拆分成了最後三個 pull request(1、2、3)。
這是朝著 @tarruda 移除所有專案特定類型 的目標邁進一步。剩下的只有 char_u
,目前大約有 12,300 處在使用。
@mhinz 希望能夠移除檔案結尾後的 ~。他提出了一個新的 :highlight
群組,稱為 EndOfBuffer
,以搭配目前的群組列表。
他的提議首先作為一個 patch 發送到 vim-dev,他的變更被 Bram 接受,並應在未來加入 Vim。@mhinz 讓 @fmoralesc 準備 pull request 將這些變更帶入 Neovim。該 pull request 已被合併到 master 分支中。
當使用 Vim 和分配大量物件的插件時,有時垃圾收集會啟動,並由於花費時間尋找要釋放的物件而導致 Vim 卡住。
Yasuhiro Matsumoto 將此問題 發布 到 vim_dev。Ariya Mizutani 編寫了一個 patch 並提交到郵件列表,該 patch 改進了搜尋物件的演算法。在 Yasuhiro 的測試案例中,未修補的 Vim 執行需要 100 秒,但應用 patch 後僅需 0.134 秒。
@Shougo 創建了一個 issue 來討論將此 patch 應用於 Neovim。@oni-link 隨後創建了一個 pull request 來應用該 patch,並在不久後合併。
@tarruda 在 pull request 中創建了一個小的 Vimscript 庫,該庫模擬了 Tcl 的 Expect 以用於 Neovim。
Expect(在 Tcl 中)的目的是為了讓腳本化和自動化不提供該功能的基於文字的應用程式變得容易。
@tarruda 提供了一個 GDB 插件範例 作為概念證明。該插件的創建是為了更容易開發 Neovim 並展示 vimexpect 的可能性。
compatible
Vim 有一個 compatible
選項,讓 Vim 更相容於 Vi。也可以透過執行 vim -C
來啟動。
在十二月,@klusark 發起了一個 pull request,將 nocompatible
(開啟不與 Vi 相容的模式)變更為始終設定。
這表示 set nocompatible
和 -N
旗標是不起作用的。這也表示,由於沒有相容模式,如果您執行 set compatible
,則會出現錯誤。
edcompatible
創建了一個 issue 來討論移除 edcompatible
選項。開啟此功能會為 :substitute
命令的 g
和 c
旗標提供特殊行為。Vim 的文件實際上不鼓勵使用此選項。
@Pyrohh 創建了一個 pull request 來移除此功能,並已合併到 master 分支中。
ttyfast
Vim 有一個名為 ttyfast
的選項,如果存在「快速終端連線」,則會設定此選項。設定後,它將傳送更多要繪製的字元,而不是使用插入/刪除行命令。
討論 開始,並同意該選項應在八月設定為預設值。不久之後,@fornwall 創建了一個 pull request 使其成為預設值。
在成為預設值幾個月且沒有出現問題後,@Pyrohh 創建了一個 pull request 以完全移除它。
由於以下三個選項已移除,並且可能會移除更多選項,@fwalch 創建了一個 pull request 來簡化這些始終開啟/始終關閉選項的處理方式。
Neovim 繼續合併提交到 Vim 郵件列表的上游 Vim patches。
自上一期電子報以來,已有超過 60 個 pull request 的 patches 被提交到 Neovim。所有 patches 的目前狀態可以在 Vim patch 報告中找到。
如果您想協助支持開發,您可以使用比特幣在此處捐款:1Evu6wPrzjsjrNPdCYbHy3HT6ry2EzXFyQ
或在 Neovim Bountysource 頁面支持團隊。
如果您是經驗豐富的開發人員或經驗不足但想學習的人,請訪問 GitHub repo 並查看 README、CONTRIBUTING 指南,最後查看 Wiki 以了解更多資訊。
有很多機會可以提供協助,也有很多事情可以做。
您對此電子報有任何回饋或建議嗎?歡迎透過 Neovim Twitter 與我們聯繫。
此電子報無法涵蓋社群的所有貢獻和支持。感謝自上一期電子報以來以某種方式提供協助的所有其他貢獻者。
請務必訂閱 RSS 訂閱源,以隨時了解 Neovim 世界的最新動態。下一期電子報將在幾個月後發布。
下次見。 :wq
Neovim 是一個基於 Vim 的文字編輯器,專為 可擴展性 和 可用性 而設計,旨在鼓勵新的應用程式和 貢獻。
訪問 #neovim:matrix.org 或 irc.libera.chat 上的 #neovim 與團隊聊天。