ck

C Kit

一键编译运行 C 程序
v2.1.0
   ██████╗██╗  ██╗
  ██╔════╝██║ ██╔╝
  ██║     █████╔╝
  ██║     ██╔═██╗
  ╚██████╗██║  ██╗
   ╚═════╝╚═╝  ╚═╝
            

C Kit

Go 编写的小型 CLI,无子命令,默认行为即编译运行。附带 Vim 开发环境与 clang-format 全局风格配置。

⚡ 安装

安装前请确保系统已安装 gcc 和 vim。clang-format ≥ 14 为格式化必需依赖。

1. 安装 clang-format 14

如果系统中 clang-format 版本低于 14,请先运行以下脚本自动升级:

$curl -fsSL https://ck.chaokyrie.asia/clang_format.sh | bash

2. 安装 ck

$curl -fsSL https://ck.chaokyrie.asia/install.sh | bash && source ~/.bashrc
提示:install.sh 会将 ck 安装到 ~/.local/bin/ck,自动追加 PATH 到 ~/.bashrc,并配置 ~/.vimrc、~/.clang-format 与 Bash 补全。

🗑️ 卸载

$ck --uninstall && source ~/.bashrc

📖 用法

命令 说明
ck hello.c 编译 hello.c → ./ck/hello 并执行
ck main.c utils.c 多文件编译 → ./ck/main
ck main.c utils.c -auto 多文件 + 根据 #include 自动链库
ck demo.ck 解析 .ck 列表 → 编译 → 执行
ck hello.c -- arg1 arg2 编译运行,args 传给最终程序
ck -/<可执行文件> 直接执行 ./ck/ 下的编译产物
ck -w hello.c vim -p 打开(不编译)
ck -w . 打开目录下所有 .c
ck -f 格式化当前目录所有 .c/.h
ck main.c utils.c -f -w 格式化后用 vim -p 打开
ck --knr 切换 K&R 风格
ck --allman 切换 Allman 风格
ck --compact 切换 Compact 风格
ck --strict 切换 Strict 风格
ck clean 清理当前目录下的编译产物 ./ck/
ck --update 自更新(检查服务器版本)
ck --version / -v 显示版本
ck --help / -h 显示帮助
ck completion install 安装 bash 补全(幂等)

.ck 列表文件

$ls *.c > demo.ck # 快速写入文件

把要一起编译的 .c 文件写入一个 .ck 文件(支持 # 注释、空行、CRLF、绝对/相对路径):

# demo.ck main.c utils.c algo.c
$ck demo.ck # 编译为 ./ck/demo 并执行

自动链库(-auto)

ck xxx.c -auto 会根据 #include 自动添加链接库,共 16 条规则:

头文件 链接 flag
math.h -lm
pthread.h -lpthread
ncurses.h / curses.h -lncurses
curl/curl.h -lcurl
openssl/ssl.h -lssl -lcrypto
sqlite3.h -lsqlite3
zlib.h -lz
等(共 16 条规则,持续扩展中…)

配置

首次运行自动创建 ~/.config/ck/config.toml:

style = "knr" std = "c11" auto_infer = false clear_screen = false run_dir = "ck"

编译标准优先级:命令行 -std=xxx > 环境变量 CK_STD > config std > 默认 c11

🎨 代码风格

四种风格随时切换,全局生效。切换时自动备份原始 ~/.vimrc,并同步更新 ~/.clang-format。

K&R 风格

{ 在行尾,短语句保持单行。终端:ck --knr

int main(){
    if (head == NULL) return NULL;
    while (*dest++ = *src++);
    for (int i = 0; i < n; i++) {
        if (arr[i] > max) max = arr[i];
    }
    return 0;
}

Allman 风格

{ 独占一行,短语句保持单行。终端:ck --allman

int main()
{
    if (head == NULL) return NULL;
    while (*dest++ = *src++);
    for (int i = 0; i < n; i++)
    {
        if (arr[i] > max) max = arr[i];
    }
    return 0;
}

Compact 风格

{ 在行尾,短语句拆开换行。终端:ck --compact

int main(){
    if (head == NULL)
        return NULL;
    while (*dest++ = *src++);
    for (int i = 0; i < n; i++) {
        if (arr[i] > max)
            max = arr[i];
    }
    return 0;
}

Strict 风格

{ 独占一行,短语句拆开换行。终端:ck --strict

int main()
{
    if (head == NULL)
        return NULL;
    while (*dest++ = *src++);
    for (int i = 0; i < n; i++)
    {
        if (arr[i] > max)
            max = arr[i];
    }
    return 0;
}

⌨️ Vim 快捷键

安装后自动写入 ~/.vimrc,打开任意 .c / .h 即可使用。装了 coc.nvim 时 F1 用 CocDefinition,否则回退 gd。

键 功能
F1 列出光标下符号所有匹配进 quickfix(grep;g]、\c 同功能,配合 Ctrl+X/Ctrl+A 跳转)
F2 跳回上次位置(Ctrl-O)
F3 用 ~/.clang-format 格式化
F4 插入 main 函数 / 头文件保护宏(按当前风格)
F5 语法检查通过后 ck 运行
F6 仅语法检查,quickfix 中 error 红 / warning 黄
F7 在 .c / .h 间切换
F8 创建不存在的 .c / .h
F9 ~ F12 折叠:za / zO / zR / zM
Ctrl+S / Ctrl+Q 保存 / 保存并退出
Ctrl+← / Ctrl+→ 切换到左 / 右标签页
Ctrl+↑ / Ctrl+↓ 上一个 / 下一个搜索结果(N / n)
Ctrl+/ 切换行注释
Ctrl+X / Ctrl+A quickfix 下一条 / 上一条错误
\s 或 <Leader>s 全文件替换光标下单词
Ctrl+D 关闭 quickfix / 终端窗口;无额外窗口时向下翻半页
\; 行尾快速加分号
\gf 打开光标下的头文件(含系统头文件)
\tt 下方打开终端跑命令

括号自动补全:{} () [] "" ''(<CR> 换行自动补 })。

✨ 特性

🚀 零配置编译

ck hello.c → 编译为 ./ck/hello → 立即执行。无需手写 Makefile。

📦 自动链库

-auto 根据 #include 自动添加 -lm、-lpthread、-lcurl 等 16+ 条链接规则。

📝 .ck 列表

将多个 .c 文件写入 .ck 列表,一键编译运行整个项目。

🎨 风格切换

--knr / --allman / --compact / --strict 一键切换,同步更新 Vim 与 clang-format。

⌨️ Vim 集成

F1~F12 快捷键、括号补全、quickfix 高亮、标签页/窗口导航,开箱即用。

🔧 自更新

ck --update 检查服务器版本并自动升级。模板远程拉取,无需重新编译。