53

我想在 Emacs 中使用 ispell-buffer 命令。它默认使用英语。有没有一种简单的方法可以切换到另一个字典(例如,另一种语言)?

4

7 回答 7

51

以下命令建议使用已安装字典的列表:

M-x ispell-change-dictionary

通常,M-x isp-c-d也扩展到上述内容。

于 2008-10-20T14:25:50.353 回答
31

您可以从文件 ispell.el 中为ispell命令指定一些选项。这可以通过在文件末尾添加一个部分来实现,如下所示:

;; Local Variables:
;; ispell-check-comments: exclusive
;; ispell-local-dictionary: "american"
;; End:

请注意,双分号表示当前模式下注释的开始。可能应该更改它以反映您的文件(编程语言)引入注释的方式,例如//Java。

于 2008-10-20T14:10:27.293 回答
20

在 LaTeX 文件的末尾,您可以使用:

%%% Local Variables:
%%% ispell-local-dictionary: "british"
%%% End:

这会将字典设置为仅用于该文件。

于 2012-10-23T17:03:04.677 回答
14

使用M-x ispell-change-dictionary并点击TAB查看有哪些词典可供您使用。

然后在你的 中写下默认字典的设置.emacs,并添加一个钩子来为你的特定模式自动启动 ispell(如果你想要的话)。

例如,在 AUCTeX 中使用英式英语自动启动 ispell(默认英语词典是美式英语)

(add-hook 'LaTeX-mode-hook 'flyspell-mode) ;start flyspell-mode
(setq ispell-dictionary "british")    ;set the default dictionary
(add-hook 'LaTeX-mode-hook 'ispell)   ;start ispell
于 2014-11-20T16:41:48.177 回答
3

如果要按目录更改语言,可以将其添加到.dir-locals.el文件中:

(ispell-local-dictionary . "american")

如果您还没有.dir-locals.el文件,它将如下所示:

((nil .
   ((ispell-local-dictionary . "american")))
)

有关更多信息,请参阅有关目录变量的 emacs wiki 页面

于 2015-06-15T21:14:06.873 回答
3

为方便起见 (f7),我在 .emacs 中添加了以下内容:

(global-set-key [f7] 'spell-checker)

(require 'ispell)
(require 'flyspell)

(defun spell-checker ()
  "spell checker (on/off) with selectable dictionary"
  (interactive)
  (if flyspell-mode
      (flyspell-mode-off)
    (progn
      (flyspell-mode)
      (ispell-change-dictionary
       (completing-read
        "Use new dictionary (RET for *default*): "
        (and (fboundp 'ispell-valid-dictionary-list)
         (mapcar 'list (ispell-valid-dictionary-list)))
        nil t))
      )))

顺便说一句:不要忘记安装所需的字典。例如在 debian/ubuntu 上,用于德语和英语词典:

sudo apt install aspell-de aspell-en
于 2018-08-14T17:08:14.587 回答
0

这是一些重新映射 C-\ 键以在多种语言之间自动切换并将输入法更改为相应语言的代码。(源自这篇文章:https ://stackoverflow.com/a/45891514/17936582 )

;; Toggle both distionary and input method with C-\
(let ((languages '("en" "it" "de")))
  (setq ispell-languages-ring (make-ring (length languages)))
  (dolist (elem languages) (ring-insert ispell-languages-ring elem)))
  
(defun ispell-cycle-languages ()
  (interactive)
  (let ((language (ring-ref ispell-languages-ring -1)))
    (ring-insert ispell-languages-ring language)    
    (ispell-change-dictionary language)
    (cond
     ((string-match "it" language) (activate-input-method "italian-postfix"))
     ((string-match "de" language) (activate-input-method "german-postfix"))
     ((string-match "en" language) (deactivate-input-method)))))
(define-key (current-global-map) [remap toggle-input-method] 'ispell-cycle-languages)
于 2022-01-14T22:07:26.227 回答