電子報 #8 - 開啟視窗

2017 年 12 月

什麼是 Neovim?

Neovim 是著名文字編輯器 Vim 的分支,專注於可擴展性和可用性。它不是重寫,而是 Vim 的延續和擴展。存在許多複製和衍生版本,有些非常聰明,但沒有一個是 Vim。Neovim 是為想要 Vim 優點以及更多功能的使用者而建構的。請參閱 :help vim-differences 查看差異列表。

參與

如果您有興趣為 Neovim 做出貢獻,請閱讀 CONTRIBUTING.md 以開始。我們有一個很棒的測試套件和自動化 CI,因此您可以直接加入並嘗試。不要害怕開啟 PR 來取得意見或只是利用基礎架構!

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

新貢獻者致謝:@ckelsel 負責移植了大量的 vim 修補程式@lonerover 也是。謝謝你們!

老貢獻者致謝:@oni-link 這個名字在 commit 日誌中不常看到,但他一直以來在審查變更和改進複雜的 PR 方面非常有幫助。謝謝你!

新功能

上一份 電子報 有點過時了,所以我們想讓您了解 Neovim 世界的最新情況。

自那時以來,Neovim 已發布了 3 個 (!) 版本,所以首先讓我們回顧一下這些版本

版本 0.2

此版本帶來了許多修復和改進。我們將在下面更仔細地研究其中一些,但也請務必查看 發布頁面 以獲取所有詳細資訊。

使用者適用的 0.2

  • 現在完全支援 Microsoft Windows
    • 0.2.1 中提供了 :terminal 模式,請參閱下方!
  • 從這個版本開始,Neovim 提供 macOS 和 Windows(32 位和 64 位)的 預先建置的套件。Windows 套件包含 GUI 和一些其他工具,例如 curl.exe
  • :terminal 已進行各種改進 (@justinmk, #6185)
    • findfile():findgf 現在可以在 :terminal 緩衝區中使用 (@tweekmonster, #6009)
    • 現在會限制 Shell 輸出,以維持終端的響應速度 (@justinmk, #5396)
    • Shell 命令的參數現在可以正確與 :term 搭配使用 (@friedsock, #4504)
  • man.vim 進行了許多改進 (@m-wynn, @raichoo, @renstrom, @justinmk, #6693, #6766, #6815, #3104, #7405)
  • Man 和說明頁面現在包含 TOC (@tweekmonster, #5169)
  • 訊息 Reading from stdin 已移除 (@msva, #6298)
  • guicursor 現在可以在 TUI 中使用 (@teto, #6423)
  • 有一個新的醒目提示群組 Whitespace 用於與空格相關的 listchars (@zhou13, #6367)
  • 已實作命令列補全 (@justinmk, #6376)
  • 現在可為自動指令使用事件 DirChanged (@mhinz, #5928)
  • cpoptions:使用 _ 標誌切換 cw 行為 (@raichoo, @chrisbra, #6235)
  • 將內容貼到命令列時,CTRL-R 現在會省略尾隨的 ^M (@justinmk, #6137)
  • 您現在可以 :edit 沒有轉義空格的檔名 (@Kurt-Bonatz, #6119)
  • 預設變更
    • mouse=a 不再是預設值 (@justinmk, #6022)
    • NVIM_TUI_ENABLE_CURSOR_SHAPE 已移除,您可以改用 guicursor(請參閱 https://github.com/neovim/neovim/releases/tag/v0.2.0)
    • showcmdbelloff=allruler 現在是預設值 (@justinmk, #6087)

開發人員適用的 0.2

  • 完整的 API 文件請見 :help api
  • API 變更
  • writefile 現在會遵守 fsync 選項 (@ZyX-I, #6427)
  • 除了 vim 團隊的努力 (7.4.{2055,2057,2058}) 之外,eval.c 也經過重構,並且改進了錯誤訊息 (@ZyX-I, #5119)
  • 現在可以使用 id 函數,並且 printf(%p) 終於有用了 (@ZyX-I, #6095)
  • 如果存在 g:loaded_*,則所有提供程式都將停用 (@justinmk, commit)
  • setpos 現在可以在其他緩衝區中設定小寫標記 (@hardenedapple, #5753)
  • 您可以檢查 v:exiting 以查看 Neovim 是否正在退出 (@mhinz, #5651)

版本 0.2.1

接下來讓我們看看 0.2.1 中發生了什麼。和以前一樣,請查看 發行說明 以瞭解詳細資訊。

使用者適用的 0.2.1

  • Nvim 現在支援視窗本機醒目提示 (@bfredl, #6700)
  • 更多終端改進
    • 已合併 TUI 游標移動、SGR 和捲動最佳化、游標形狀和終端類型辨識改進 (@jdebp, #6816)
    • 使用數字列時,會調整終端緩衝區 (@tecywiz121, #7440)
    • 新建立的 :terminal 現在會保持在普通模式 (@nelstrom, #6808)
  • 現在可以為命令列著色 (@ZyX-l, #6364)
  • 現在可以設定自訂剪貼簿提供程式 (@nhooyr, #6030)
  • 剪貼簿提供程式現在可以回退到 tmux 支援 (@xu-cheng, #6894)
  • 針對 :Tutor 進行了進一步的改進 (@fmoralesc, #7028)
  • inccommand 現在可以使用前導修飾符,例如 keeppattern (@jamessan, #6967)
  • 可以設定 ruby 主機 (@alexgenco, #6841)
  • 未命名的暫存器會在重新啟動時保留 (@AdnoC, #4700)
  • 適用於 Windows 使用者
  • 給 Linux 使用者
    • 現在可以下載 AppImage 套件了 (@AdnoC, #6638)
    • 功能鍵現在可以在終端機介面中使用 (@rjmill, #5014)
    • 修復了處理極長行(超過 100 萬個虛擬欄位)時的崩潰問題 (@Grimy, #3527)
    • :cquit 現在可以接受可選的錯誤代碼作為參數 (@joshleeb, #7336)
    • 修復了 tmux 中的真色彩問題 (@DarkDefender, #7100)
    • :checkhealth 現在是內建功能,並且會驗證您的 $VIMRUNTIME (@justinmk, #7399)
    • cursorcolumncolorcolumn 現在會遵守語法高亮顯示 (@zhou13, @justinmk, #7364)

0.2.1 給開發者

發布 0.2.2

這是一個快速發布的版本,主要包含錯誤修復。詳情請參閱發行說明。 也有一些新功能加入。

0.2.3-dev

想知道下一個版本會有哪些功能嗎? 這有一個列表讓您先睹為快

近期:即將推出

如需了解 Neovim 的計劃功能、目標和想法的概述,請前往路線圖。一些值得注意的即將推出的 PR 有:

提醒:如果您從最新的 master 版本建置 Neovim,請務必查看追蹤 HEAD,了解任何變更。

關於 Neovim

相關專案的 wiki 頁面已經新增了一些內容,請查看 這裡 完整的變更。

API 客戶端

API 客戶端是 Neovim 架構的核心,並且可以顯著改善開發人員體驗。使用您想要的任何語言編寫插件!自從上次發佈新聞稿以來,我們看到增加了另一個 C++ 客戶端、一個用於 Elixir 的客戶端以及一個 Racket 客戶端。 node 客戶端進行了全面修改,並有了新的維護者。感謝 @billyvg 接管!雖然不是全新的,但特別要讚揚一下 ruby 客戶端的良好維護。謝謝 @alexgenco

如果您碰巧喜歡尚未列出的語言,一個好的起點是文件,並且務必在gitter 頻道上討論它。

GUI

在 GUI 方面發生了太多活動,無法列出所有新的客戶端,因此我們只需看看一些比較突出的客戶端即可。 VSCode 正在使用 Neovim 來正確整合 ex-mode 命令,而 Sublime Text 3 獲得了完整的 Neovim 整合。後者也使用了另一個很棒的 Neovim 特定功能,即外部化的彈出選單,而它們僅使用了 50 行程式碼。最後但並非最不重要的是,eovim 是 Neovim 的一個 enlightenment 客戶端。

Neovim 的架構

一些學生研究了 Neovim 的架構,並發表了一篇關於他們的發現的「分析論文」。如果您對全局感興趣,請務必查看

Vimcasts 和現代 Vim

vimcasts 的 Drew Neil 已經開始錄製關於 Neovim 的教學影片,並開始撰寫他廣受好評的著作 Practical Vim 的後續作品,名為 Modern Vim。 該書的大部分內容都將適用於 Vim 8 和 Neovim 用戶,但該書約 1/3 的內容將涵蓋 Neovim 特有的功能。

Libuv

Neovim 的基石之一是將 I/O 移植到 libuv。 因此,您會很高興聽到 libuv 已著手支援更多平台。 Neovim,很快就會在您附近的平台上推出!

測試套件

Neovim 透過非常簡單的 Lua 語言提供輕鬆的測試。 您會問,為什麼其他人不做呢? 結果發現,他們確實有做,或者至少 neomutt 專案正在為此做準備。 很高興看到 Neovim 的想法被採用

統計資料

自上次新聞稿以來變更的程式碼行數

git log  --since="2016-11-01" --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: 255393 removed lines: 221106 total lines: 34287

合併的提交

git log  --since="2016-11-01"|wc -l
3110

不同的提交作者

git shortlog -e -s -n --since="2016-11-01"|wc -l
146

文件變更

git log  --since="2016-11-01" --numstat --pretty=tformat: --numstat runtime/doc|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: 8579 removed lines: 6577 total lines: 2002

感謝

感謝貢獻者、贊助商、錯誤回報者、支持者。 感謝 @justinmk 提供了這個很棒的專案,並感謝 @brammool 的基礎性工作。

vim 團隊的 @brammool@chrisbra 在我們的 issue 追蹤器上留下了一些評論,很高興能一起工作!

新聞

新聞存檔中找到更多更新。 還有一個 RSS 訂閱

什麼是 Neovim?

Neovim 是一個基於 Vim 的文字編輯器,專為可擴展性可用性而設計,以鼓勵新的應用程式和貢獻

討論

訪問 #neovim:matrix.org 或 irc.libera.chat 上的 #neovim,與團隊聊天。