標籤:

你對 Neovim 怎麼看?


Bram 估計急了,最新的幾個Vim版本中新功能十分給力,

目前(7.4.1689)已經包含幾個 NeoVim 類似的特性:

1. timer:

以前沒有timer,需要周期運行只有做 CursorHold/CursorHoldI/CursorMoved 幾個事件的autocmd來模擬,十分山寨,默認timeout是4秒,最短的觸發周期是4秒,修改短了又會影響其他插件,自從有了timer_start, timer_stop,這件時間容易很多了,比如:

func! MyHandler(timer)
echo "Handler called"
endfunc
let timer = timer_start(500, "MyHandler", {"repeat": 3})

這樣 MyHandler就會每隔500毫秒以後被調用,並持續3次。

使用前判斷下 has("timers") 即可,有了這個東西,實現後台任務就比較容易了,python用後台線程跑一個編譯任務,實時把stdout/stderr的內容不斷的投遞到前台隊列,然後vim script 裡面起一個100毫秒的時鐘去檢查隊列,並把剛才保存的 stdout/stderr 內容輸出到 quickfix中,幾百行代碼,一個非同步編譯系統就可以構建出來了。

從此,可以象ide一樣非同步編譯大工程,一邊編輯文件,一邊實時查看 quickfix中編譯信息的輸出,不必在那裡傻等著。

2. Jobs:

jobs可以非同步執行任務(其實我們上面已經用timer+python模擬了),為什麼不直接用jobs呢?因為目前 jobs依賴的版本太新了,估計還有個幾個月才能更新到各大系統,同時測試後發現vim的job實現類似上面的python後台線程監控狀態,並投遞內容給前台,但是前台更新比較慢,好像2秒才更新一次,就是說後台job結束了,你可能兩秒後才能收到結束callback,當然如果你不在乎也可以無視直接使用更直接的 jobs。需要檢查下 has("job"):

:echo has("job")

返回1代表你的版本支持job,這下那些什麼 vimproc等非同步任務模擬插件可以淘汰了,之前各種黑客手段來實現後台任務的也可以消停了。

3. channels:

vimscript中使用socket+json(或者換行分割原始字元串) 來和遠程服務端通信,鏈接成功後可以發送命令,收到數據後會觸發回調。需要檢查 has("channel") 來判斷。

4. guirenderoption:

windows下 gvim支持 direct2d 渲染,vimrc裡面設置這麼一行,渲染就使用directx了,效果更好,需要最新版本支持:

set renderoptions=type:directx,renmode:5,taamode:1

有了 guirenderoption,在 windows下字體能更加漂亮,而有了 timer/job/channel 三個套件,vim非同步問題終於被官方解決了,很多依賴非同步機制的插件再也不用搞一大堆飛線來實現這些事情了。

-----

估計被NeoVim 逼著更新了這麼多東西,不過也是好事。

---

2016.7.20 更新:上面是四月份 jobs, timer, channel 剛出來不久的評價,隨著5月份幾個重要bug的修改(上面1689中提到的job更新慢問題5月已經得到修正),以及六七月的相繼改進,jobs, timer, channel 如今很穩定了,:help channel 裡面的文字已經由 DRAFT 變為非 DRAFT。

我一直在用,今天這些介面確實穩定不少了,上面的回答是 vim 7.4.1689,如今已經到了 vim 7.4.2078,經歷了一共 389 次改進後 http://Vim.org 這月出了一條關於 8.0 的新聞:

Work on Vim 8 makes good progress

[2016-07-03] The past months many new features have been included, such as asynchronous communication, job control, timers and much more. The number of reported problems is steadily going down. This is an indication the quality is getting to an adequate level. There are still a few pieces to get in place and patches to include. (Bram Moolenaar)


vim 有那麼多坑,Bram 又不打算徹底解決。如果 neovim 能弄好必然投奔之。

之前試過一點點,目前遠未達到目標,很多功能還沒有,觀望中。


個人感受:

1.跟Vim完全兼容,遷移沒有任何成本,我的Vim配置沒有做任何修改就能在Neovim上使用;

2.新功能已經有很多了,如:terminal,job control,C-S- 鍵綁定等;

3.可以說項目進展非常不錯,管理也很好,有非常完善的CI和測試覆蓋,看得出來發起者是個很有經驗的PM;

4.項目很活躍,每天都能看到一大堆commit,而且Shougo等Vim大神也都有參與;

5.快,運行速度比Vim快多了!

6.目前Windows版本可用性還不高,但相信會很快改善;

個人感覺Neovim大有前途,坐等各種GUI


Neovim的項目進展很不錯,項目開發與管理也很健康,很多人反映Neovim是開源項目的一個比較不錯的典範,所以得到的支持也不錯,相關資源比如人力和資金也都還可以。另外Vim的Patches也差不多都能跟上,所以差不多可以說「Neovim IS Vim renewed",事實上最近的項目標語又更新了,成了:"Ambitious Vim-fork focused on extensibility and agility"。neovim/neovim · GitHub

P.S. I"m eagerly and desperately waiting for it Windows-ready(portable)!


用 vim 多年,用 neovim 一兩年,最近完全轉到 vscode 了。

neovim 來得太晚,動作太慢。或者說整個 vim 系都不夠進取。不過代碼編輯器這個東西,遷移成本太低了,本來就很難形成壁壘。


可以關注下SpaceVim的開發,會主要採用neovim的插件以及功能

https://spacevim.org


修改一下答案,

包括最近的使用體驗

給人感覺是, 跑在Terminal 裡面的 Neovim 和 Vim 比來還是比較遜色的

雖然說,可以無縫從Vim 遷移到 Neovim 同樣可以使用一套Vundle 來管理插件庫。

但是比較大的問題是用 Lua 做 UI 層

跑在Terminal 裡面那個性能真是令人堪憂, 只要稍微載入一點插件,

不過 Neovim 總體來說修正一些 Terminal Vim 問題(可能是BUG), 比如 Alt+按鍵 在 terminal vim 不生效的問題, 基本上就相當於是一個終端里的Gvim


最近讀完了《巨人的隕落》,在裡面找到了自己對這件事的看法。

剛開始他們為了各種理由參加戰爭,在經歷了一年的戰鬥後,他們自己已經漸漸記不起自己最初參加戰爭的目的了。

非常奇怪對吧。人們竟然會如此渴望在編輯器里啟動另一個進程,渴望在編輯器里擁有一個定時器。

你怎麼不去用vimscript寫個操作系統呢?

去用emacs吧,你要找的不是vim!


試用了一段時間,感覺還不成熟,和iTerm結合使用,選中複製功能用不了,:set paste後粘貼文本格式亂掉了,還是原來的vim用著舒服,升級下vim是個不錯的選擇。


試了一下,在mac下沒有GUI,終端輕度使用還可以,沒有GUI的單獨窗口就沒打算繼續用下去。

Ubuntu里,有QT GUI,就憑這一點,已經替換掉vim了,畢竟Ubuntu只是虛擬機,非常非常輕度的使用。

總結,就是,還是太早起的一個版本,0.1.17,遠遠不夠成熟。


三年vimer ,alt+key 一直無法使用 最大的槽點


vim復興 支持 頂


目前vim的功能完全夠用了,等到neo能做而vim做不了的時候遷移不遲。


我在linux subsystem for windows啟動neovim失敗,感嘆還是vim的平台依賴兼容性更高。


推薦閱讀:

如何用 vim 的插件開發?有什麼實際中的技巧?
如何使用 Vim ?
如何在 Windows 下使用 Vim 的 YouCompleteMe 插件?
如何將 Vim 剪貼板裡面的東西粘貼到 Vim 之外的地方?
Sublime Text 會取代 vim 或 emacs 嗎?

TAG:Vim | NeoVim |