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/xrcai40sbp2y9p63s85lx9gjm0w5d05-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)。