██████╗██╗ ██╗
██╔════╝██║ ██╔╝
██║ █████╔╝
██║ ██╔═██╗
╚██████╗██║ ██╗
╚═════╝╚═╝ ╚═╝
C Kit
Go 编写的小型 CLI,无子命令,默认行为即编译运行。附带 Vim 开发环境与 clang-format 全局风格配置。
⚡ 安装
安装前请确保系统已安装 gcc 和 vim。clang-format ≥ 14 为格式化必需依赖。
1. 安装 clang-format 14
如果系统中 clang-format 版本低于 14,请先运行以下脚本自动升级:
2. 安装 ck
~/.local/bin/ck,自动追加 PATH 到
~/.bashrc,并配置 ~/.vimrc、~/.clang-format 与 Bash 补全。
🗑️ 卸载
📖 用法
| 命令 | 说明 |
|---|---|
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 列表文件
把要一起编译的 .c 文件写入一个 .ck 文件(支持 # 注释、空行、CRLF、绝对/相对路径):
自动链库(-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:
编译标准优先级:命令行 -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 检查服务器版本并自动升级。模板远程拉取,无需重新编译。