无论是在Emacs中写英文日记(diary)、Org mode笔记,还是撰写程序的注释和文档,拼写检查都是一项提高工作效率、保证成果品质的必不可缺的工具。拼写检查对于常见的文字处理软件(如Word、LibreOffice)来说并不是什么稀罕的功能,但是对于Emacs这个纯粹的文本编辑器来说,实现起来就显得有些繁琐、笨拙。具体说来,Emacs本身并不具备任何拼写检查的能力,它是通过ispell模块调用外部的aspell命令来达成的。以此为基础,为了能够进一步实现一边输入一边检查的效果,Emacs又需要通过flyspell minor mode调用ispell来实现。不管怎样,拼写检查的功能总归是在Emacs中能用的——当然了,这既有助于无所不能的Emacs作为一个神器的美好形象,也完全符合UNIX的小而精、多个工具协同配合的设计思想。接下来,本文将具体介绍一下Emacs中的拼写检查功能与使用方法。

首先说一下aspell。根据其官方网站的说法,它是一个自由、开源的拼写检查工具,最终是要用来替代以前的ispell命令。相较于ispell,aspell具有如下的优势:

  • 能够直接检查UTF8编码的文档而无需专门的词典。

  • 可以同时使用多个词典。

  • 当有多个aspell进程时,能够智能地分别处理相应的用户自定义词典。

由于apsell被Emacs ispell调用(当然,Emacs ispell也可以被设置为调用其他拼写检查工具,如ispell),所以需要事先配置好aspell的默认语言。例如,我需要对英文做拼写检查,就在~/.aspell.conf文件中加入下面一行即可:

 lang en

aspell工作时会用到两类词典:

  • 标准词典:它们需要通过apt命令安装诸如aspell-en、aspell-de、aspell-fr这样的包。已经在系统中安装的标准词典可以通过如下命令列出:

     $ aspell dicts
     en
     en-variant_0
     en-variant_1
     en-variant_2
     en-w_accents
     en-wo_accents
     ...
  • 用户自定义词典:它们是诸如~/.aspell.LANG.pws这样的文本文件。如果默认语言设置为英文,则该文件为~/.aspell.en.pws

接下来,需要在Emacs的启动配置文件~/.emacs中指定Emacs ispell需要调用的外部拼写检查器为aspell:

 (setq-default ispell-program-name "aspell")

然后,就可以使用Emacs ispell提供的如下功能,对Emacs中的当前光标处、缓冲区、区域进行单词拼写检查和错误单词的更改了:

  • M-$:执行ispell-word命令,弹出临时缓冲区,显示光标当前所在位置处错误单词的备选修改列表。如下图所示:

  • M-TAB, C-M-i :执行ispell-complete-word命令,对光标当前所在位置处的单词进行补全。

  • M-x ispell-buffer:对当前缓冲区进行拼写检查。

  • M-x ispell-region:对当前活跃区域进行拼写检查。

  • M-x ispell-change-dictionary <RET> DICT <RET>:重新启动后台的aspell进程,将拼写检查词典设为指定的DICT。

有了Emacs ispell提供的基本功能后,flyspell minor mode进一步提供了即时拼写检查功能。这包括:

  • M-x flyspell-mode:打开即时拼写检查功能。随后,错误输入的单词会被高亮。如下图所示:

  • M-x flyspell-prog-mode:在编程环境下,我们只需要对注释段和字符串进行拼写检查。这对于撰写高质量的注释和文档非常有用。将flyspell-prog-mode函数添加到相应编程环境的mode hook中,则可以激活该功能。例如,

     (add-hook 'c++-mode-hook (lambda () (flyspell-prog-mode)))
  • 在拼错的单词上点击鼠标中键,则会调用flyspell-correct-word函数,弹出正确的单词列表菜单以供选择。如下图所示:

  • C-.:执行flyspell-auto-correct-word函数,自动修改光标处的单词。

  • C-,:令光标跳至下一个错误单词。

对于以上介绍的Emacs ispell、flyspell,Emacs定义了一系列变量用于指定需要使用的词典,具体如下:

  • 标准词典配置

    • ispell-local-dictionary:其默认值为nil。该变量的值被前面讲到的ispell-change-dictionary交互命令改写,只对当前的缓冲区有效。所以,它用于设置临时性的拼写检查词典。

    • ispell-dictionary:这是Emacs ispell对于aspell命令所用标准词典的全局设置,亦即默认的拼写检查词典。

    • flyspell-default-dictionary:该变量用于指定使用flyspell minor mode时的aspell标准词典,其默认值为nil

    • 当以上变量均为nil时,则使用拼写检查器aspell自己默认的标准词典。

  • 用户自定义词典配置

    • ispell-personal-dictionary:用于指定用户自定义的词典文件,默认值为nil

    • ispell-personal-dictionarynil时,使用aspell默认的用户自定义词典,即~/.aspell.LANG.pws

  • 单词补全词典配置

    • ispell-complete-word-dict:用于指定单词自动补全时所用的词典,默认值为nil

    • ispell-alternate-dictionary:当ispell-complete-word-dictnil时,该变量的值用于指定单词补全词典。其默认值为/usr/share/dict/words

  • 现有词典列表

    • ispell-local-dictionary-alist:该变量存储了一组本地或自定义词典的信息。默认值为nil

    • ispell-dictionary-alist: 该变量存储了一组系统已安装的aspell标准词典信息,一般为非空。

由于Emacs的拼写检查功能是通过多工具配合、逐层开发出来的,所以上述介绍的词典配置变量是层级搜索式的,非常繁琐。但在实际使用的时候,如果我们只对一种常用的语言(如英语)做拼写检查并大体上使用系统默认设置,那么就只需要在~/.emacs中设定ispell-dictionary的值就足够了。例如,

 (setq ispell-dictionary "en")

至此,本文关于Emacs中拼写检查功能的配置与使用已经介绍完了。感兴趣的读者不妨在自己的电脑上体验一下在Emacs中用标准、正确的英文抒写自己思想的感觉。

Emacs中的拼写检查的更多相关文章

  1. solr拼写检查配置

    拼写检查功能,能在搜索时,提供一个较好用户体验,所以,主流的搜索引擎都有这个功能. 那么什么是拼写检查,其实很好理解,就是你输入的搜索词,可能是你输错了,也有可能在它的检索库里面根本不存在这个词,但是 ...

  2. Android基础知识之拼写检查框架

    原文:http://android.eoe.cn/topic/android_sdk 拼写检查器框架 Android平台提供了一个拼写检查器的框架,来方便你在你的应用中实现并使用拼写检查.这个框架是A ...

  3. 如何在Word中排出漂亮的代码,去除回车符,去除拼写检查

    这位博主写到很到位,这里补充一下在VBA里用模块的部分. https://blog.csdn.net/code4101/article/details/41802715 1.放代码的方式是贴纯文本. ...

  4. 关闭英文拼写检查,关闭xml验证

    http://blog.sina.com.cn/s/blog_70b623e4010173ce.html eclipse里面的许多设置对于国内开发者日常使用不太适用,反而会成为干扰.既然是完全可配置的 ...

  5. 1.7.7 Spell Checking -拼写检查

    1. SpellCheck SpellCheck组件设计的目的是基于其他,相似,terms来提供内联查询建议.这些建议的依据可以是solr字段中的terms,外部可以创建文本文件, 或者其实lucen ...

  6. lucene拼写检查模块

    Lucene是Apache发布的开源搜索引擎开发工具包,不仅提供了核心的搜索功能,还提供了许多其他功能插件,例如:拼写检查功能模块. 搜索拼写检查模块实现类在lucene-suggest-x.xx.x ...

  7. solr拼写检查代码逻辑

    自定义的solr搜索系统作为web应用发布到tomcat后,运行过程中其搜索代码逻辑如下: 用户solr搜索应用发送搜索请求URL,solr应用的org.apache.solr.servlet.Sol ...

  8. python 拼写检查代码(怎样写一个拼写检查器)

    原文:http://norvig.com/spell-correct.html 翻译:http://blog.youxu.info/spell-correct.html 怎样写一个拼写检查器 Pete ...

  9. [Swift]LeetCode966.元音拼写检查器 | Vowel Spellchecker

    Given a wordlist, we want to implement a spellchecker that converts a query word into a correct word ...

随机推荐

  1. echart在X轴下方添加字

    使用Echart做统计图表,这个方便快捷还高大上 官方网址 https://www.echartsjs.com/ 按照文档,很快就做出了一个柱图表 在X轴下方,要显示出对应日期是星期几(上图最下方,用 ...

  2. Docker 介绍及基础命令

    Docker 简介 Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linu ...

  3. P4180 严格次小生成树[BJWC2010] Kruskal,倍增

    题目链接\(Click\) \(Here\). 题意就是要求一个图的严格次小生成树.以前被题面吓到了没敢做,写了一下发现并不难. 既然要考虑次小我们就先考虑最小.可以感性理解到一定有一种次小生成树,可 ...

  4. Vue(小案例_vue+axios仿手机app)_购物车(计算商品总金额)

    一.前言                 1.计算总金额                 2.点击删除按钮,删除对应的商品信息                 3.当还没结算的时候,当用户跳到其他页面 ...

  5. jquery-防多店铺购物车结算全选,单选,及删除,价格计算

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. JavaEE三大框架整合

    搭建项目: 搭建一个实际的项目,为了避免影响到你之前已经搭建过的项目,可以先新建一个工作空间,指定一个新的空间来做这一次的项目,不会和其他的项目冲突,尤其是在编码这一部分. 指定新工作空间的目录: 一 ...

  7. LDM与STM指令详解

    title: LDM与STM指令详解 date: 2019/2/26 17:58:00 toc: true --- LDM与STM指令详解 指令形式如下,这里的存储方向是针对寄存器的 Load Mul ...

  8. Linux性能优化实战:系统的swap变高(09)

    一.实验环境 1.操作系统 root@openstack:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu ...

  9. Github 开源项目(一)websocketd (实战:实时监控服务器内存信息)

    websocketd 是WebSocket守护进程,它负责处理WebSocket连接,启动您的程序来处理WebSockets,并在程序和Web浏览器之间传递消息. 安装:websocketd wget ...

  10. java实现八大排序算法

    Arrays.sort() 采用了2种排序算法 -- 基本类型数据使用快速排序法,对象数组使用归并排序. java的Collections.sort算法调用的是归并排序,它是稳定排序 方法一:直接插入 ...