ITPub博客

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

仓颉语言Neovim开发环境配置指南

C/C++ 作者:Flow_Official 时间:2026-10-09 13:45:28 0 删除 编辑

本文档介绍如何在 openEuler (aarch64) 系统上配置 Neovim (AstroNvim) 开发环境以进行仓颉语言开发。

本文档介绍如何在 openEuler (aarch64) 系统上配置 Neovim (AstroNvim) 开发环境以进行仓颉语言开发。

目录

  • 系统要求:

  • 安装 Cangjie SDK(软件开发工具包)

  • 安装 Cangjie STDX

  • 环境变量配置

  • Neovim 配置

  • 常见问题

系统要求:

  • 操作系统:openEuler 2403 SP1 (aarch64)

  • GCC 版本:12.3.1 或更高版本

  • Neovim 版本:0.9.0 或更高版本

安装 Cangjie SDK

  • 从官方渠道下载 Cangjie SDK(aarch64 版本)

  • 解压到目录 ~/.config/cjvs/store/

目录结构示例:

~/.config/cjvs/
└── store/
    └── 1.1.0-beta.25/
        ├── envsetup.sh
        ├── lib/
        ├── runtime/
        └── ...

安装 Cangjie STDX

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 库的路径

创建指向 GCC 运行时库的符号链接

由于 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 时找不到运行时库的问题

Neovim 配置

1. 安装 AstroNvim

git clone --depth 1 https://github.com/AstroNvim/AstroNvim ~/.config/nvim

2. 配置 Cangjie LSP 插件

创建文件 :~/.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,
}

3. 启动 Neovim 并安装插件

nvim

AstroNvim 会自动检测并安装插件。首次打开文件时,插件会自动下载 LSP wrapper 二进制文件。cangjie-nvim.cj

LSP Wrapper 地址:

  • 项目地址: https://gitcode.com/ystyle/cangjie-lsp-wrapper

  • 自动下载位置: ~/.local/share/nvim/data/cangjie-nvim/bin/

常见问题

1. 链接错误:cannot find crtbeginS.o

/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

2. LSP 无法工作

  • 验证 Cangjie SDK 环境变量是否已加载:echo $CANGJIE_HOME

  • 确认 LSP wrapper 已下载:ls ~/.local/share/nvim/data/cangjie-nvim/bin/

  • 手动安装 LSP wrapper:

:lua require(”cangjie-nvim”).install()

3. 找不到 STDX

error: cannot find stdx module

解决方案:确认环境变量指向正确的目录:CANGJIE_STDX_PATH

ls $CANGJIE_STDX_PATH
# 应该能看到 stdx.cjo 文件

4. 快速事件上下文错误

E5560: nvim_create_namespace must not be called in a fast event context

解决方案:该问题已在插件中修复,请确保您使用的是最新版本。cangjie-nvim

键位映射

关于本文的讨论

准备好了解更多了吗?


转载声明:本文为转载整理,原文版权归原作者及原站点所有。

原文来源:Harmony Developers Feed

原创地址:https://www.harmony-developers.com/p/cangjie-language-neovim-development

原文作者:Harmony OS Developers;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-08-02

  • 博文量
    36
  • 访问量
    32565