Neovim 電子報來了!如果您只關心新功能,請跳到樂趣和功能章節。您也應該了解專案管理的變更。
每分鐘都有一個新的文字編輯器誕生(來源:Hacker News)。有數不清的文字編輯器在解決「常見情況」。
Neovim 使用者想要的不是另一個類 Vim 的文字編輯器,而是一個更好的 Vim。Vim 核心中存在數千個小的決策,這些決策是數十年來累積的;其中大多數決策仍然相關,解決了新專案尚未遇到、消化和決定的細微問題。
Neovim 是 Vim 的重構版本,使其在未來 30 年的黑客生涯中仍然可行。請參閱 :help vim-differences
以參考變更和改進。
Neovim 非常有意地建立在 Vim 社群的長期知識和使用者習慣之上。這表示從 Vim「切換」到 Neovim 只是「升級」,就像安裝新版本的 Vim 一樣。如果您登入只有 Vim 的伺服器或工作站,您不會迷路。如果您找到一篇關於 Vim 的文章,它也可能適用於 Neovim,除非它是關於 :smile
。
所以,如果您喜歡 Vim,請嘗試 Neovim。如果您熱愛 Vim,請嘗試 這個 ;)
從一開始,Neovim 的明確目標之一就是
簡化維護並鼓勵貢獻
我們想要一個可駭客的 Vim:一個程式碼庫和社群,能夠進行實驗並以低成本試用新功能。
而且有證據顯示朝著這個目標取得了真正的進展。我們已成功執行了重要的「路線圖外」修補程式:對其作者來說很重要,但並非專案最高優先級的功能。
:tchdir
啟用標籤頁本機「工作目錄」'statusline'
支援無限的對齊區段 (PR #4489)man.vim
提供補全、改進的高亮顯示等功能這些修補程式被收錄是因為它們
它們在 :help nvim-features
中被隨意提及 :)
:smile
的樂趣?新的用戶端和創新的應用程式出現的頻率比以往任何時候都更高。
<neovim-editor>
web 元件可以用在您自己的專案中,包括 VS Code、Atom 和其他 Electron 或 nw.js 專案!nvim
,他正在快速開發新的基於 nvim
的後端,用於他知名的 VimR 專案,這是一個精緻的 macOS GUI。在 發佈頁面中有為 macOS 10.11 預先建立的 .app
套件。:Lispdo
!--servername
、--remote
等。nvr
非常適合從 :terminal
緩衝區與父 nvim
實例進行通訊。有適用於 go、julia、perl、Java、R、Elixir、Clojure 等的用戶端。請瀏覽 相關專案 wiki 頁面以探索新出現的專案!
清晰和一致性會帶來貢獻。 — @robertmeta
7 月,Thiago (@tarruda) 因為個人原因減少了在專案中的活躍度。他希望未來能夠恢復活躍貢獻。
有些人要求任命一位「BDFL」。@justinmk 扮演這個角色,除非您想要這個角色:我們已採取措施來記錄維護者的角色,以便未來任何受大多數貢獻者信任的人都可以挺身而出。
最終目標是盡可能橫向地分散任務,並繼續將「提交權」授予我們信任的人。目前有 14 位核心貢獻者;我們希望將其擴展到 50 位。我們不希望專案依賴於英雄般的努力,而是希望讓感興趣的各方在 Vim 社群的慣例和禮儀中工作。
(正在進行的) 成功的 資助活動 產生了 libmpack、:terminal
,以及主要的重構和改進(例如,將 UI 邏輯與 TUI 解耦)。由於 Thiago 在專案中的活躍度降低,因此資金可以提供給其他開發人員。
Neovim 的多產提交者 (貢獻了 21 kLOC) 和 Vim (13 kLOC,包括 if_python
) @ZyX-I 同意擔任「首席開發人員」的角色,即接收資金的開發人員。他在 Neovim 上的工作包括
msgpackparse()
和 os/fileio.c
(緩衝 I/O)資金並不總是提供給一個人。它可供任何想要花一個月或更長時間專注於 Neovim 的 核心貢獻者使用。
由於資金是按月提供的,因此(希望)這是一個低摩擦的決策
:smile
),請讓承諾繼續下去!Neovim API 是該專案的定義性技術和「軟體」功能之一。在 PR #5535 中,我們制定了一項策略,用於在不破壞用戶端的情況下擴展 API。
2.0
(如果有的話)。API 應該只會成長,而不是破壞。每個 API 函數都標記了它首次可用的 API 層級。這使得眾多 Neovim API 用戶端可以實際支援任何發佈版本的 Neovim。
自 PR #4934 以來,您可以直接從 VimL 呼叫目前 nvim
處理程序的 API
:echo nvim_buf_get_lines(42, 1, 3, v:false)
請在命令列嘗試 :call nvim_<Tab>
以查看可用的 API 函數,或安裝 nvim-api-viewer 外掛程式以查看可用 API 函數的精美概述。
我們非常重視 API 的可靠性,並且我們已嘗試仔細思考設計。感謝來自外掛程式和用戶端作者的回饋!
一年前,我們宣布了第一個發佈版本 0.1
。我們已簡化發佈流程(版本控制、標記、變更記錄、公告)。
有些使用者想知道 0.1
是否表示 Neovim 不穩定。
0.1
以來的每個版本都被認為在所有系統(Windows 除外)上穩定可用。0.2
開始成為一流的目標。1.0
之前,某些非 API 功能可能會破壞向後相容性。這種情況並不常見,並且這些情況始終有記錄。0.1.6
中,我們引入了 API 版本控制。用戶端可以動態決定要使用哪些函數。我們遵循 semver;那裡的建議說明了 0.x
系列的意圖。
越來越多的作業系統套件正在出現。Neovim 是 Debian 的下一個版本的一部分!特別感謝 @jamessan (Debian 維護者和 Neovim 貢獻者)、@fwalch 和其他為他們喜歡的系統建立套件,並與我們合作解決不可避免的編譯器/平台怪癖的人。
自 2014 年以來,Neovim 的貢獻者完成了哪些事?
根據保守估計,至少撰寫了 20,000 行新的 C 程式碼。除了通過 Vim 自己的測試套件之外,我們還撰寫了 2200 個新的測試。共有 273 位不同的貢獻者參與了核心專案。在 3 年內,核心專案的提交次數比 Vim 在 12 年內的提交次數還多。
除了主要的重構和功能開發外,我們還投入了大量的時間在 Neovim 的持續整合 (CI) 系統上。在一個穩定但脆弱的 C 程式碼庫中,維護者傾向於忽略「小型」功能,因為它們可能風險太高。CI 降低了脆弱性,因此我們可以歡迎大型和小型的功能開發,而不是害怕改變。
新的功能可以透過螢幕測試進行嚴格的測試。例如,這裡有一個測試可以驗證 'wildmode'
UI 行為
describe("'wildmenu'", function()
it(':sign <tab> shows wildmenu completions', function()
execute('set wildmode=full')
execute('set wildmenu')
feed(':sign <tab>')
screen:expect([[
|
~ |
~ |
define jump list > |
:sign define^ |
]])
end)
end)
在 2014 年我們從 Vim 分叉出來後,有一段不穩定的時期;這個差距變得越來越小,並將在 2017 年消失。每個回歸錯誤修復都由整合測試涵蓋。每個拉取請求都會針對 12 種不同的環境進行建置。特別感謝 @jszakmeister、@fwalch 和 @ZyX-I 在建置系統上的工作,以及 @oni-link 修復了一些非常困難的錯誤。
從社群媒體上得到的最強烈的印象之一是,人們在使用 Neovim 時,真的非常欣賞較少的摩擦。預設值很重要。Tim Pope 在策劃我們選擇的許多預設值方面功不可沒。
@fmoralesc 和其他人仔細思考如何實作這些預設值,而不會造成回歸錯誤(encoding=utf8
和 syntax/filetype 很棘手)。這項工作很繁瑣,但值得:這是一次性的成本,可以幫助新使用者、新系統上的舊使用者(這些系統現在隨處可見:虛擬機、容器、伺服器…),並透過傳播 Vim 的「最佳實踐」來幫助所有使用者。
以下是自上次電子報以來的一些新開發項目。
:ruby*
命令(因此現有的 Vim+Ruby 外掛程式可以在 Neovim 中運作,例如 Command-t 和 vim-github-dashboard)。gem install neovim
。您無需擔心針對特定版本進行編譯。:CheckHealth
會偵測常見問題(例如 Homebrew 的 doctor
)。每當您安裝或升級 Neovim 時,請執行它。:help api-highlights
)類似於 matchaddpos()
,但有一些關鍵差異:它與緩衝區相關聯,並且會適應行插入和刪除。適用於監控緩衝區變更並在背景計算高亮顯示的 linter 或語意高亮顯示外掛程式。在 PR #4432 中,@bfredl 邁出了第一步,讓 UI 對「小工具」的顯示有更多控制權。@romgrk 很快就製作了一個概念驗證。
很快就有一個雄心勃勃的修補程式將 cmdline、tab、wildmenu 和預覽視窗小工具 外部化。示範影片顯示了令人興奮的潛力
這項工作之所以能實現,是因為 @tarruda 清晰地將終端機 UI (TUI) 與內部螢幕分開,因此即使是內建的 TUI 也是由 UI 事件驅動,就像任何其他外部化的 UI 一樣。
:substitute
在 2016 年 5 月,一群由 Eric Burel 指導的學生聯繫我們,表示要為 Neovim 做出貢獻。從我們提供的一系列想法中,他們決定為 :substitute
實作「即時預覽」。我們在 PR #5561 中合併了它,並在 0.1.7
中發佈。設定 inccommand
選項來嘗試它
:set inccommand=split
此功能之所以能實現,歸功於我們的開發模型:儘管「沒有時間」進行副專案,我們仍概述了基本概念,學生們在帶外做出決策,並且我們在需要時提供澄清。
Eric 寫了一篇關於此經驗的文章。感謝 Eric、ENSIMAG 的學生、@KillTheMule 和 @bfredl 將此功能推向我們引以為傲的結論。
在 2017 年的 Neovim 0.3
中尋找以下開發項目。
eval.c
將被分成模組,這標誌著 Neovim 的 VimL 實作與 Vim 的實作分道揚鑣。這將是世界上第二個替代的 VimL 實作(ZyX 的 VimL 到 Lua 的 PR 是第一個)。這就是 Neovim 的 2016 年。2017 年會是 Neovim 桌面的元年嗎?
Neovim 的想法正在融入其他專案中,例如 Xi 編輯器 和 Vim 本身,今年的活躍程度比其歷史上的任何一年都高。
在 Gitter 和 IRC 頻道中有一大群人在活動(這些頻道透過 matrix 橋接,感謝 @leonerd!)。造訪我們以討論該專案。
別忘了,如果您想查看專案的發展方向,可以到 neovim.io 查看路線圖。
感謝您的閱讀。
—Justin M. Keyes (@justinmk)
$ git log --grep='\([zZ]y[xX]\)\|\([nN]ikolai [pP]av\)\|\([nN]ikolay [pP]av\)' --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: 22590 removed lines: 8620 total lines: 13970
$ git log --grep='[cC]hristian [bB]rab' --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: 10000 removed lines: 3033 total lines: 6967
$ ohcount msgpack_rpc/ api/ os/ event/ tui/ shada.c rbuffer.c terminal.c memory.c
c 79 14576 2863 16.4% 2154 19593
Neovim 是一個基於 Vim 的文字編輯器,專為可擴充性和易用性而設計,以鼓勵新的應用程式和貢獻。
造訪 #neovim:matrix.org 或 irc.libera.chat 上的 #neovim 與團隊聊天。