文本编辑器kate

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