Kate 运行手册(max2-nixos)
============================================================
因为kate经常触发oom(64G内存),专门分析并设置限制kate最大内存上限,避免波及其它应用
本文件只讲「运行时不 nixos-rebuild 就能改」的 Kate 参数。
需要 rebuild 的声明式设置统一在:
/etc/nixos/modules/system/component/kate.nix
============================================================
A. 内存上限(当前 1 GiB,声明式)
============================================================
机制:kate.nix 的单例启动器 kate-singleton 会把每次启动包进
systemd-run --user --scope -p MemoryMax=1G -p MemorySwapMax=0 -- kate …
所有启动路径(菜单 / Dolphin / 终端敲 kate)都走它。
一旦某次分配超过 1G → 内核在该 cgroup 内 OOM 杀掉 Kate
(只杀这一个 Kate,不动系统;cgroup 约束,不是全局 OOM)。
查看某次 Kate 的实际用量 / 上限:
systemctl --user status 'app-org.kde.kate@*.service' # 看 Memory / Memory peak 行
systemctl --user show 'run-*.scope' -p MemoryMax -p MemoryCurrent
ps -eo pid,rss,comm | grep -i kate
临时用「别的大上限」启动一次(不重建、不改默认):
systemd-run --user --scope -p MemoryMax=8G -p MemorySwapMax=0 -- kate 文件…
(前台阻塞;要后台就末尾加 &)
完全绕过上限启动(应急/危险,不经 kate-singleton):
/run/current-system/sw/bin/kate 文件… ← 直调本体
ks=/nix/store/xrcai40sbhp2y9p63s85lx9gjm0w5d05-kate-26.04.3/bin/kate # 或直接调 store 本体
永久改上限 = 改 kate.nix 一行再 rebuild:
kateMemMax = "1G"; # 想 2G/4G 就改这里 → nixos-rebuild switch
被上限杀掉后看现场:
journalctl --user -u 'app-org.kde.kate@*.service' | grep -i oom
sudo journalctl -b -k | grep -iE 'kate|oom|Memory cgroup'
============================================================
B. 配置项(katerc,运行时改)
============================================================
用户级(优先级最高,运行时改): ~/.config/katerc
系统级默认(声明式,在 kate.nix,改要 rebuild): /etc/xdg/katerc
命令行:
读: kreadconfig6 --file katerc --group <组> --key <键>
写: kwriteconfig6 --file katerc --group <组> --key <键> <值>
GUI:设置 → 配置 Kate → …
常用键(组名/键名照抄,非通用 KDE 拼法):
[General] SDI Mode=false # false=单窗口多标签;true=一窗一文档
[General] Startup Session=last # 启动恢复哪个会话(manual=不自动恢复)
[KTextEditor Document] Tab Width=4
[KTextEditor Document] Indentation Width=4
[KTextEditor Document] ReplaceTabsDyn=true # Tab 键插空格
[KTextEditor Document] On-The-Fly Spellcheck=false # 实时拼写检查
[KTextEditor Document] Backup Local=false # 不生成 file~ 备份
[KTextEditor View] Dynamic Word Wrap=true
[KTextEditor View] Line Numbers=true
[KTextEditor View] Folding Bar=true
生效时机:多数键要「重开 Kate」或对该文档重新加载才生效,不是全部热生效。
============================================================
C. 插件开关(运行时)
============================================================
kwriteconfig6 --file katerc --group Plugins --key <插件名> false
例:kateprojectplugin (项目插件:会索引 git 仓库,大仓库可致内存暴涨——KDE #525771)
lspclientplugin (LSP 客户端)
katefiletreeplugin (文件树)
katectagsplugin (ctags 符号)
查看是否已关:kreadconfig6 --file katerc --group Plugins --key kateprojectplugin
GUI:设置 → 配置 Kate → 插件 → 勾选/取消。改完需重启 Kate。
============================================================
D. 会话 / 文档
============================================================
匿名会话文件:~/.local/share/kate/anonymous.katesession(记录上次打开的文档)
卡死/异常恢复:关掉所有 Kate 后删该文件即可重置(只丢「上次打开列表」,不丢磁盘文件)
============================================================
E. 应急速查
============================================================
看谁在吃内存: ps -eo pid,rss,comm --sort=-rss | head
强杀某个 Kate 实例: systemctl --user stop 'app-org.kde.kate@<hash>.service'
(或 KDE「系统监视器 / 任务管理器」里结束 kate)
完整链:内核 OOM Killer ← systemd 用户 cgroup (app.slice) ← kate-singleton(带 MemoryMax) ← Kate
提醒:别用文本编辑器打开 .qcow2/.img/.vhdx 等虚拟磁盘(超大二进制)。
这类文件的打开方式在 ~/.config/mimeapps.list 里控制(已移除 octet-stream→Kate)。
============================================================
F. Markdown 支持(语法高亮 / 实时预览 / LSP) [2026-10-15 补]
============================================================
结论:语法高亮本来就内置、无需装任何东西;唯一缺的是「预览」的渲染后端 markdownpart。
另:Kate 的 LSP 客户端内置默认把 markdown 指向 marksman,不装则每次打开 .md 都报错。
① 语法高亮(已内置,无需额外组件)
由 KSyntaxHighlighting 提供,自查:
ksyntaxhighlighter6 --list | grep -i markdown # 应见 Markdown / R Markdown(全量 456 条)
② 实时预览(要装 1 个包 + 开 1 个插件开关)
Kate 自带预览插件(ktexteditorpreviewplugin.so);界面名是「预览」,不是「文档预览」。
渲染 markdown 需要一个 KPart 渲染器 = kdePackages.markdownpart:
/run/current-system/sw/lib/qt-6/plugins/kf6/parts/markdownpart.so # 装好后应存在
插件开关(组名 Plugins、键名 ktexteditorpreviewplugin):
kreadconfig6 --file katerc --group Plugins --key ktexteditorpreviewplugin
kwriteconfig6 --file katerc --group Plugins --key ktexteditorpreviewplugin true
GUI:设置 → 配置 Kate → 插件 → 勾「预览」
用法:勾上后 视图 → 工具视图 里出现 Preview 面板(打开 .md 即实时渲染)。
注意:Kate 是「退出时」才把插件状态写进 ~/.config/katerc ⇒ 故 kate.nix 在 /etc/xdg/katerc
预置了一份(系统级 fallback;用户级同键存在时以用户级为准)。
③ LSP(marksman)
为什么必须装:Kate 的 LSP 客户端内置默认就把 markdown 指向 marksman
(~/.config/kate/lspclient/settings.json 为 0 字节 = 用内置默认);不装则每次打开 .md 都报
「查找语言 markdown 的服务器二进制 marksman 失败」。装上后无需手配:
which marksman && marksman --version # 2026-02-08
④ 声明式落点(要 rebuild):/etc/nixos/modules/system/component/kate.nix
environment.systemPackages →
pkgs.kdePackages.markdownpart # 预览后端(KPart)
pkgs.marksman # LSP 服务器
environment.etc."xdg/katerc" → [Plugins] ktexteditorpreviewplugin=true
不装 kparts(是 markdownpart 的构建依赖,nix 自动带上);不装第三方 Katemark(排版/导出向,与「浏览+修改」用途不符)。
⑤ 验证:用户实测预览与 LSP 均正常(世代 200,标签 kate-md-part-and-marksman)。