emacs+stardict做一个单词本
1. 1. sdcv 是什么?
1.1. 核心功能
- sdcv(StarDict Console Version)是一个轻量级的命令行词典工具,支持查询 StarDict 格式的离线词典文件
- 它是图形界面词典软件 StarDict 的终端版本,适用于 Linux、Windows 等系统
1.2. 特点
- 离线使用
- 无需联网即可查词,适合无网络环境
- 多词典支持
- 可同时加载多个词典文件(如英汉、汉英、专业词典等)
- 跨平台
- 兼容 Linux、Windows 等操作系统
2. 2. 安装后的基本操作
2.1. 安装命令
- 使用
sudo apt-get install sdcv
会从软件源中直接安装 sdcv 主程序
2.2. 词典数据
- 需单独下载词典文件(例如牛津高阶、朗道词典等)
- http://www.github.com/boxmaking/sdcv-dict 我仅仅使用了stardict-cdict-gb-2.4.2 其他的没用.
- 解压到
~/.stardict/dic
目录下才能正常查词
3. 3. 使用场景
3.1. 终端查词
- 通过命令
sdcv <单词>
直接查询单词释义,例如sdcv example
3.2. 集成开发工具
- 可配置在 Vim/Emacs 中实现划词翻译(例如通过快捷键调用 sdcv)
1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2: ;; -*- coding: utf-8; lexical-binding: t -*- 3: ;;pengshao-translate.el emacs调用sdcv来翻译单词和英文短语 4: ;;<2025-03-12-071/Wednesday> 5: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 6: 7: 8: ;; 设置单词本和短语本的 org 文件路径 9: 10: ;; 定义文件路径 11: (defvar pengshao-english-file "~/personal_note/pengshao-english.org" 12: "File path for storing English vocabulary.") 13: 14: ;; 确保文件存在并初始化基本结构 15: (defun pengshao-english-init-file () 16: "Initialize the vocabulary org file if it doesn't exist." 17: (unless (file-exists-p pengshao-english-file) 18: (with-current-buffer (find-file-noselect pengshao-english-file) 19: (insert "#+STARTUP: show2levels\n* word\n* line\n") 20: (set-buffer-file-coding-system 'utf-8) ; 明确指定 UTF-8 编码 21: (save-buffer)))) 22: 23: ;; 添加单个单词 24: (defun pengshao-english-add-word (word) 25: "Add a single word to the vocabulary with its translation." 26: (interactive "sEnter word to translate: ") 27: (pengshao-english-init-file) 28: (let* ((translation (shell-command-to-string 29: (format "sdcv -n --utf8-output %s " 30: (shell-quote-argument word)))) 31: (current-date (format-time-string "%Y-%m-%d"))) 32: (with-current-buffer (find-file-noselect pengshao-english-file) 33: (set-buffer-file-coding-system 'utf-8) ; 确保缓冲区使用 UTF-8 34: (goto-char (point-min)) 35: (search-forward "* word") 36: (org-end-of-subtree) 37: (insert (format "\n** %s\n:PROPERTIES:\n:ADDED: %s\n:END:\n%s\n" 38: word current-date translation)) 39: (org-back-to-heading) 40: (org-set-tags ":VOCAB:") 41: (org-schedule nil "+1d") 42: (org-deadline nil "+7d") 43: (org-content 2) ; 只显示一级和二级标题 44: (save-buffer)))) 45: 46: ;; 添加短语并分解单词 47: (defun pengshao-english-add-phrase (phrase) 48: "Add a phrase and break it down into individual words with translations." 49: (interactive "sEnter phrase to translate: ") 50: (pengshao-english-init-file) 51: (let* ((words (split-string phrase "[^[:alnum:]]+" t)) 52: (current-date (format-time-string "%Y-%m-%d"))) 53: (with-current-buffer (find-file-noselect pengshao-english-file) 54: (set-buffer-file-coding-system 'utf-8) ; 确保缓冲区使用 UTF-8 55: (goto-char (point-min)) 56: (search-forward "* line") 57: (org-end-of-subtree) 58: (insert (format "\n** %s\n:PROPERTIES:\n:ADDED: %s\n:END:\n" 59: phrase current-date)) 60: (dolist (word words) 61: (let ((translation (shell-command-to-string 62: (format "sdcv -n --utf8-output %s " 63: (shell-quote-argument word)))) 64: (clean-word (downcase word))) 65: (insert (format "*** %s\n%s\n" clean-word translation)))) 66: (org-back-to-heading) 67: (org-set-tags ":PHRASE:") 68: (org-schedule nil "+1d") 69: (org-deadline nil "+7d") 70: (org-content 2) ; 只显示一级和二级标题 71: (save-buffer)))) 72: 73: 74: 75: ;; 定义全局快捷键 76: (global-set-key (kbd "C-c m e") 'pengshao-english-add-word) 77: (global-set-key (kbd "C-c m l") 'pengshao-english-add-phrase) 78: 79: 80: (provide 'pengshao-translate) 81: 82: ;;; pengshao-english.el ends here
- 支持通过参数调整输出格式(如
--color
启用彩色显示)
3.3. 脚本扩展
- 结合
xclip
和notify-send
工具,可实现“复制单词后自动弹出翻译结果”的功能
4. 4. 注意事项
4.1. 词典路径
- 默认存放目录为
~/.stardict/dic
- 需手动创建并放置词典文件
4.2. 词典来源
- 访问 StarDict 官方词典库 或第三方站点下载词典包
- http://www.github.com/boxmaking/sdcv-dict
5. 总结
通过 sudo apt-get install sdcv
安装的 sdcv 工具:
- 为 Linux 用户提供高效的命令行词典解决方案
- 尤其适合开发者、运维人员或偏好终端操作的用户
- 轻量化设计和灵活扩展性使其成为离线学习/工作的实用工具