Emacs自身好像并没有提供一个统计字数的方法,因此,我们需要自己使用一些扩展或是elisp函数来实现。

  1. 利用外部程序来计算

把下面的代码添加到Emacs配置文件里:

(defun word-count nil “Count words in buffer” (interactive)
(shell-command-on-region (point-min) (point-max) “wc -w”))

于是,在Emacs里就能用M-x word-count来调用wc程序计算字数。这个方法比较简单,当然,缺点也很明显,即你的shell要能调用wc这个程序。如果是在Windows下,你就得装个Cygwin。如果你有其它的统计字数的程序,可以进行适当地替换。

这个方法统计字数的结果,和外部应用程序有关。

  1. word-count.el扩展来统计字数

word-count.el是Emacs一个比较好的统计字数的扩展,标记好开头后,直接跳到你要统计部分的结尾,下方会显示形如wc111/22/1这样的内容,分别表示有111个字符、有22个单词、有1行(空行不计算在内)。

使用方法:

(1). M-+ (M-x word-count-mode) 启动word-count模式,使用了该命令之后,马上会做一个初始标记,随着光标的移动,统计光标当前位置和初始标记之间的字数。再使用一次这个命令关闭word-count模式。

(2). M-[space] (M-x word-count-set-area) 设置统计字数的区间。

(3). M-x word-count-set-region 设置统计字数的区间或段落。

(4). M-x word-count-set-marker 设置统计字数的初始标记位置。这个命令,可以重新设置初始标记的位置,以便于你在新的位置开始统计数据。

这个方法好像不能完美地统计出中文字数,它是以空格来进行英文字符的断词的。

  1. wc.el扩展来统计字数

只要把wc.el扩展扔到你的Emacs目录下,再在.emacs文件里添加如下语句即可激活该扩展:

(load “wc”)

这个扩展提供了几个命令用来统计字数:

M-x wc-buffer:统计全文字数;

M-x wc-region:统计选定区域的字数;

M-x wc-dwin:这个命令是前两个命令的综合,如果没有选定区域,则统计全文的字数;如果有选定区域,则统计该区域的字数。

这个方法在统计中文字数上也有着同样不准确的问题。

  1. http://iquaid.org/2008/02/08/counting-words-in-emacs/

这个网页提供了几个统计字数的函数,把它们放到.emacs文件里,就可以使用了。不过,这个方法好像在统计中文字数上有问题,没有仔细验证。

上面的几个方法,对于统计英文单词,都没有太大的问题,但对于中文字数的统计,基本上都无能为力。等我有空的时候,再来改进一把。