首页 > 应用开发 > C/C++ > 仓颉语言Neovim开发环境配置指南

本文档介绍如何在 openEuler (aarch64) 系统上配置 Neovim (AstroNvim) 开发环境以进行仓颉语言开发。
系统要求:
安装 Cangjie SDK(软件开发工具包)
安装 Cangjie STDX
环境变量配置
Neovim 配置
常见问题
操作系统:openEuler 2403 SP1 (aarch64)
GCC 版本:12.3.1 或更高版本
Neovim 版本:0.9.0 或更高版本
从官方渠道下载 Cangjie SDK(aarch64 版本)
解压到目录 ~/.config/cjvs/store/
目录结构示例:
~/.config/cjvs/ └── store/ └── 1.1.0-beta.25/ ├── envsetup.sh ├── lib/ ├── runtime/ └── ...
STDX 是仓颉的标准扩展库,需要单独安装:
从发布页面下载: https://gitcode.com/Cangjie/cangjie_stdx/releases/v1.1.0-beta.24.1
选择版本 linux_aarch64_cjnative
解压到目录 ~/.config/cjvs/stdx/
目录结构示例:
~/.config/cjvs/ └── stdx/ └── 1.1.0-beta.24/ └── linux_aarch64_cjnative/ └── static/ └── stdx/ ├── stdx.cjo └── ...
编辑 ~/.zshrc 添加以下配置:
# 仓颉 SDK 环境配置 source $HOME/.config/cjvs/store/1.1.0-beta.25/envsetup.sh # STDX 路径配置 export CANGJIE_STDX_PATH=”$HOME/.config/cjvs/stdx/1.1.0-beta.24/linux_aarch64_cjnative/static/stdx”
配置完成后,执行:
source ~/.zshrc
envsetup.sh :设置 Cangjie 编译器所需的环境变量
CANGJIE_STDX_PATH :指定 STDX 库的路径
由于 Cangjie 链接器脚本默认搜索 /lib64 目录,需要创建符号链接:
sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtbeginS.o /lib64/crtbeginS.o sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtendS.o /lib64/crtendS.o sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtbegin.o /lib64/crtbegin.o sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtend.o /lib64/crtend.o
注意 :解决链接 crtbeginS.o 时找不到运行时库的问题
git clone --depth 1 https://github.com/AstroNvim/AstroNvim ~/.config/nvim
创建文件 :~/.config/nvim/lua/plugins/cangjie-lsp.lua
return {
“https://gitcode.com/ystyle/cangjie-nvim”,
dependencies = { “neovim/nvim-lspconfig” },
opts = { auto_install = true },
config = function(plugin)
require(”cangjie-nvim”).setup(plugin.opts)
vim.api.nvim_create_autocmd(”LspAttach”, {
callback = function(args)
if vim.bo[args.buf].filetype ~= “Cangjie” then return end
local function map(mode, lhs, rhs, desc)
vim.keymap.set(mode, lhs, rhs, { buffer = args.buf, desc = desc })
end
map(”n”, “li”, “LspInfo”, “LSP Info”)
map(”n”, “K”, vim.lsp.buf.hover, “Hover Document”)
map(”n”, “lf”, function() vim.lsp.buf.format { async = true } end, “Format Document”)
map(”n”, “gl”, vim.diagnostic.open_float, “Line Diagnostics”)
map(”n”, “ld”, vim.diagnostic.open_float, “Line Diagnostics”)
map(”n”, “lD”, vim.diagnostic.setqflist, “All Diagnostics”)
map(”n”, “gra”, vim.lsp.buf.code_action, “Code Actions”)
map(”n”, “la”, vim.lsp.buf.code_action, “Code Actions”)
map(”n”, “lh”, vim.lsp.buf.signature_help, “Signature Help”)
map(”n”, “grn”, vim.lsp.buf.rename, “Rename”)
map(”n”, “lr”, vim.lsp.buf.rename, “Rename”)
map(”n”, “ls”, vim.lsp.buf.document_symbol, “Document Symbols”)
map(”n”, “lG”, vim.lsp.buf.workspace_symbol, “Workspace Symbols”)
map(”n”, “]d”, vim.diagnostic.goto_next, “Diagnostic Next”)
map(”n”, “[d”, vim.diagnostic.goto_prev, “Diagnostics Previous”)
map(”n”, “]e”, function() vim.diagnostic.goto_next { severity = vim.diagnostic.severity.ERROR } end, “Error Next”)
map(”n”, “[e”, function() vim.diagnostic.goto_prev { severity = vim.diagnostic.severity.ERROR } end, “Error Previous”)
map(”n”, “]w”, function() vim.diagnostic.goto_next { severity = vim.diagnostic.severity.WARN } end, “Warning Next”)
map(”n”, “[w”, function() vim.diagnostic.goto_prev { severity = vim.diagnostic.severity.WARN } end, “Warning Previous”)
map(”n”, “gD”, vim.lsp.buf.declaration, “Declaration”)
map(”n”, “gy”, vim.lsp.buf.type_definition, “Type Definition”)
map(”n”, “gd”, vim.lsp.buf.definition, “Definition”)
map(”n”, “gri”, vim.lsp.buf.implementation, “Implementation”)
map(”n”, “grr”, vim.lsp.buf.references, “References”)
end,
})
end,
}nvim
AstroNvim 会自动检测并安装插件。首次打开文件时,插件会自动下载 LSP wrapper 二进制文件。cangjie-nvim.cj
LSP Wrapper 地址:
项目地址: https://gitcode.com/ystyle/cangjie-lsp-wrapper
自动下载位置: ~/.local/share/nvim/data/cangjie-nvim/bin/
/usr/bin/ld: cannot find crtbeginS.o: No such file or directory
解决方案:创建指向 GCC 运行时库的符号链接:
sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtbeginS.o /lib64/crtbeginS.o sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtendS.o /lib64/crtendS.o sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtbegin.o /lib64/crtbegin.o sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtend.o /lib64/crtend.o
验证 Cangjie SDK 环境变量是否已加载:echo $CANGJIE_HOME
确认 LSP wrapper 已下载:ls ~/.local/share/nvim/data/cangjie-nvim/bin/
手动安装 LSP wrapper:
:lua require(”cangjie-nvim”).install()
error: cannot find stdx module
解决方案:确认环境变量指向正确的目录:CANGJIE_STDX_PATH
ls $CANGJIE_STDX_PATH # 应该能看到 stdx.cjo 文件
E5560: nvim_create_namespace must not be called in a fast event context
解决方案:该问题已在插件中修复,请确保您使用的是最新版本。cangjie-nvim

转载声明:本文为转载整理,原文版权归原作者及原站点所有。
原创地址:https://www.harmony-developers.com/p/cangjie-language-neovim-development
原文作者:Harmony OS Developers;如有侵权,请联系管理员删除。