Wednesday, November 24, 2021

使用 Lisp 來開發 neovim 的 plugin

一直以來,使用 neovim ,我都是安裝 plugin 來用,從來沒有考慮自己來開發 plugin 。有改過一兩行,但是,開發一個新的 plugin 的念頭就不太有了。為什麼呢?大概是因為 vim script 實在太難學了,看到 vim script 就覺得心很累。

另一方面,看到 Emacs 的 user ,特別是 Clojure 社群的使用者,總是信手捻來,就開發一下自己的 plugin 。這種時候,我又心生羨慕。要是我也可以有個 lisp 來開發 plugin ,該有多好?

總之,這件事其實也辦得到了,Neovim 提供 lua 做為 embedded language。而 fennel 可以完美地編譯成為 lua 。aniseed 就是這個 compiler 。

我試了一下之後,還發現,居然意外的很簡單上手。做法如下。
  1. 使用 neovim 安裝 Conjure
  2. Olical/aniseed 頁面,找一行 curl 指令
    curl -fL https://raw.githubusercontent.com/Olical/aniseed/master/scripts/seed.sh | sh
    執行完,就可以生出一個 plugin directory
  3. 然後,就可以開始使用 REPL-driven 的方式開發 plugin
  4. 參考文件 => 開啟 neovim 之後, :help aniseed 

注意事項:
0. 教學部分,首先可以先看 aniseed 的網站,開頭的影片是一個範例。
1. REPL-driven 的感覺,會與 Clojure 有很大的不同。
2. aniseed 已經有提供標準的 library functions ,引入 aniseed.core 即可。
3. aniseed 也可以無縫地操作 neovim 的 API ,引入 aniseed.nvim 即可。 aniseed.nvim 可以界接 https://github.com/norcalli/nvim.lua