最近我遇到了一個挑戰:
> 如果使用 luarocks 安裝了 lua-cbor 的話,neovim 裡寫的 lua script 可以使用 lua-cbor 嗎?
答案是:預設不行,要做一些調整。
由於我的 luarocks 也是用 homebrew 去安裝的,而預設的 luarocks 它依賴的 lua interpreter 跟 neovim 預設依賴的 lua interpreter 不同。此外,neovim 的 package path 也很可能找不到 luarocks 的安裝 path 。
解法:
1. 重新安裝 luarocks ,下載 tar 包、重新編譯、安裝,讓它一定會依賴於 neovim 預設依賴的 lua interpreter ,即 luajit
2. 設定 neovim 內部的 path ,使它可以讀得到 luarocks 的 module/library paths
< 重新安裝 luarocks 的指令 >
1. brew install luajit
2. wget https://luarocks.org/releases/luarocks-3.9.2.tar.gz
3. tar zxvf; cd luarocks-3.9.2
4. mkdir ~/.luarocks-luajit
5. ./configure \
--with-lua=$(brew --prefix luajit) \
--with-lua-include=$(brew --prefix luajit)/include/luajit-2.1 \
--lua-suffix=jit \
--prefix=$HOME/.luarocks-luajit
6. make && make install
< 設定 neovim 內部的 path >
1. 在 lua 資料夾下生成一個檔案 luarocks.lua
2. 貼上以下的內容:
```
local function add_luarocks_paths()
local luarocks_path = "/Users/laurencechen/.luarocks-luajit/share/lua/5.1/?.lua;/Users/laurencechen/.luarocks-luajit/share/lua/5.1/?/init.lua"
local luarocks_cpath = "/Users/laurencechen/.luarocks-luajit/lib/lua/5.1/?.so"
package.path = package.path .. ";" .. luarocks_path
package.cpath = package.cpath .. ";" .. luarocks_cpath
end
return {add_luarocks_paths = add_luarocks_paths}
```
3. 在 init.vim 裡增加一行 lua require("luarocks").add_luarocks_paths()