📝
NeoVimでmoonbitの開発環境を整備した
環境
$ moon version
moon 0.1.20250801 (edae1ae 2025-08-01)
$ nvim --version
NVIM v0.11.3
Build type: Release
LuaJIT 2.1.1748459687
Tree-sitter
NeoVimに組み込みのtree-sitterは標準ではmoonbitの構文をサポートしていない(2025/08/12時点)ので、独自で追加する必要があります。
moonbitから公式のtree-sitter構文が提供されています:
vim.api.nvim_create_autocmd("User", {
pattern = "TSUpdate",
callback = function()
require("nvim-treesitter.parsers").moonbit = {
install_info = {
url = "https://github.com/moonbitlang/tree-sitter-moonbit",
branch = "main",
queries = 'queries',
}
}
end
})
参考:
LSP
また、クローズドソースではありますが公式のLanguage Serverも提供されています
-- Enable moonbit lsp
vim.lsp.config['moonbit-lsp'] = {
cmd = { 'moonbit-lsp' },
filetypes = { "moonbit" },
root_markers = { { "moon.mod.json" }, ".git" }
}
vim.lsp.enable('moonbit-lsp')
LSPが有効になると、定義へのジャンプや補完候補なども取得出来るようになります。
errorformat
moonbitのエラーメッセージは視覚的にわかりやすい形式でエラーを報告してくれるのですが、:make
などでビルドをした場合にエラーメッセージをvimが標準では解釈することができません。
そこで、errorformatを指定します(暫定で定義しています、もっとよい定義があったら教えてください)
moonbitのエラー例
-- moonbit 用 errorformat(quickfix用)
local moonbit_efm = table.concat({
"%-Gfailed:%#",
"%-Gerror:%#",
"%-G%.%#╭%#",
"%-G%.%#│%#",
"%-G%.%#╰%#",
"%-G%.%#───%#",
"%-GFinished%.%#",
"%-Gmoon:%#",
"%EError:%m",
"%C%\\[ %f:%l:%c %\\]%.%#",
"%C\\s%#╰── %m",
"%Z%.%#───╯%#",
"%WWarning:%m",
"%C%\\[ %f:%l:%c %\\]%.%#",
"%C\\s%#╰── %m",
"%Z%.%#───╯%#",
}, ",")
-- FileTypeがmoonbitのときだけ適用
vim.api.nvim_create_autocmd("FileType", {
pattern = "moonbit",
callback = function()
vim.opt_local.errorformat = moonbit_efm
end,
})
Discussion