如何在Emacs中记录ispell拼写替换操作并存储到文件?
ispell拼写替换操作记录实现方案
你关注的ispell-update-post-hook完全可以满足需求,无需修改ispell核心源码,该钩子运行时可直接访问ispell的全局动态变量获取错误词、替换词两个值,以下是完整实现代码:
;; 自定义替换词对日志存储路径,可根据需要修改 (defvar my-ispell-replace-log-file "~/.emacs.d/ispell-replace-log.tsv" "存储ispell拼写替换词对的日志文件路径") (defun my-log-ispell-replace () "将ispell识别的错误词、最终替换词写入日志文件" ;; 确保变量已绑定避免报错 (when (and (boundp 'ispell-found-word) (boundp 'ispell-replace-word)) (let* ((wrong-word ispell-found-word) ;; 跳过更正的场景下替换词赋值为空字符串 (correct-word (or ispell-replace-word ""))) ;; 以制表符分隔两个词,追加写入文件,不覆盖历史记录 (append-to-file (format "%s\t%s\n" wrong-word correct-word) nil my-ispell-replace-log-file)))) ;; 将自定义函数绑定到ispell更新后钩子 (add-hook 'ispell-update-post-hook #'my-log-ispell-replace)
代码说明
- 变量
ispell-found-word存储ispell当前识别到的拼写错误单词 - 变量
ispell-replace-word存储最终替换后的正确单词,用户跳过更正操作时该变量为nil,代码中统一处理为空字符串 - 生成的日志是制表符分隔的文本格式,可直接导入表格工具、闪卡工具做后续处理
- 覆盖所有更正场景:手动按
r输入替换、从候选列表选择编号替换、跳过更正操作都会触发记录 - 如果不需要记录跳过更正的记录,只需在
let*块后添加判断(unless (string-empty-p correct-word)包裹写入逻辑即可
内容的提问来源于stack exchange,提问作者Captain Midday
相关产品推荐
相关产品推荐

