惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
Last Week in AI
Last Week in AI
月光博客
月光博客
D
DataBreaches.Net
WordPress大学
WordPress大学
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
Recent Announcements
Recent Announcements
宝玉的分享
宝玉的分享
MyScale Blog
MyScale Blog
C
Check Point Blog
F
Fortinet All Blogs
B
Blog
小众软件
小众软件
Vercel News
Vercel News
罗磊的独立博客
有赞技术团队
有赞技术团队

东方星痕

忆时塔 OOM 追凶记 仓颉服务 - 忆时塔 OOM 追凶记 戴森球与光伏文明:一个被忽略的最优解 戴森球与光伏文明:一个被忽略的最优解 | 东方星痕 鸿蒙PC上使用box64运行x86_64鸿蒙SDK编译HAP 鸿蒙PC上使用box64运行x86_64鸿蒙SDK编译HAP | 东方星痕 仓颉语言 Neovim 开发环境配置指南 鸿蒙PC融合开发引擎中编译安装Neovim与AstroNvim配置指南 鸿蒙PC融合开发引擎中编译安装Neovim与AstroNvim配置指南 | 东方星痕 鸿蒙PC融合开发引擎架构解析:虚拟机与容器双模式 鸿蒙PC融合开发引擎架构解析:虚拟机与容器双模式 | 东方星痕 MCP-Term:一个未出生即夭折的想法 MCP-Term:一个未出生即夭折的想法 | 东方星痕 鸿蒙PC Matebook Pro上全局安装GIT 鸿蒙PC Matebook Pro上全局安装GIT | 东方星痕 Neovim移植鸿蒙PC:三方库适配实战与挑战解析 Neovim移植鸿蒙PC:三方库适配实战与挑战解析 | 东方星痕 鸿蒙PC Matebook Pro上安装仓颉编译器每日构建版 鸿蒙PC Matebook Pro上安装仓颉编译器每日构建版 | 东方星痕 鸿蒙pc上Vite 7 + Rollup原生模块问题的解决方案 鸿蒙pc上Vite 7 + Rollup原生模块问题的解决方案 | 东方星痕 hypyland实现alt + tab切换到任意工作区的窗口 hypyland实现alt + tab切换到任意工作区的窗口 | 东方星痕 使用泛型设计gorm扩展字段 使用泛型设计gorm扩展字段 | 东方星痕 使用qemu8.0安装龙芯loongarch64版本archlinux 使用qemu8.0安装龙芯loongarch64版本archlinux | 东方星痕 在archlinux aur上提交龙芯loongarch的软件包 在archlinux aur上提交龙芯loongarch的软件包 | 东方星痕 k3s云上master+内网agent的部署方式
仓颉语言 Neovim 开发环境配置指南 | 东方星痕
2026-04-03 · via 东方星痕

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

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

目录

  • 系统要求
  • 安装仓颉 SDK
  • 安装 Cangjie STDX
  • 环境变量配置
  • Neovim 配置
  • 常见问题

系统要求

  • 操作系统:openEuler 2403 SP1 (aarch64)
  • GCC 版本:12.3.1 或更高
  • Neovim 版本:0.9.0 或更高

安装仓颉 SDK

  1. 从官方渠道下载仓颉 SDK (aarch64 版本)
  2. 解压到 ~/.config/cjvs/store/ 目录

目录结构示例:

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

安装 Cangjie STDX

STDX 是仓颉的标准扩展库,需要单独安装:

  1. 从发布页面下载:https://gitcode.com/Cangjie/cangjie_stdx/releases/v1.1.0-beta.24.1
  2. 选择 linux_aarch64_cjnative 版本
  3. 解压到 ~/.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"

配置完成后执行:

说明

  • envsetup.sh:设置仓颉编译器所需的环境变量
  • CANGJIE_STDX_PATH:指定 STDX 库的路径

创建 GCC 运行时库符号链接

由于仓颉链接器脚本默认搜索 /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. 配置仓颉 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", "<leader>li", "<cmd>LspInfo<cr>", "LSP Info")
        map("n", "K", vim.lsp.buf.hover, "Hover Document")
        map("n", "<leader>lf", function() vim.lsp.buf.format { async = true } end, "Format Document")
        map("n", "gl", vim.diagnostic.open_float, "Line Diagnostics")
        map("n", "<leader>ld", vim.diagnostic.open_float, "Line Diagnostics")
        map("n", "<leader>lD", vim.diagnostic.setqflist, "All Diagnostics")
        map("n", "gra", vim.lsp.buf.code_action, "Code Actions")
        map("n", "<leader>la", vim.lsp.buf.code_action, "Code Actions")
        map("n", "<leader>lh", vim.lsp.buf.signature_help, "Signature Help")
        map("n", "grn", vim.lsp.buf.rename, "Rename")
        map("n", "<leader>lr", vim.lsp.buf.rename, "Rename")
        map("n", "<leader>ls", vim.lsp.buf.document_symbol, "Document Symbols")
        map("n", "<leader>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 并安装插件

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

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 不工作

检查步骤

  1. 确认仓颉 SDK 环境变量已加载:echo $CANGJIE_HOME
  2. 确认 LSP wrapper 已下载:ls ~/.local/share/nvim/data/cangjie-nvim/bin/
  3. 手动安装 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 插件中修复,请确保使用最新版本。

键位映射

快捷键 功能
K 显示悬停文档
gd 跳转到定义
gD 跳转到声明
gy 跳转到类型定义
gri 跳转到实现
grr 查找引用
grn 重命名
<leader>lf 格式化文档
<leader>la 代码操作
<leader>li LSP 信息
]d / [d 下一个/上一个诊断
]e / [e 下一个/上一个错误
]w / [w 下一个/上一个警告

参考链接