Emacsスペルチェッカーで複数の辞書を使用するにはどうすればよいですか?具体的には、イギリス英語辞書と医学英語辞書を同時に使用したいです。
flyspell
ます。
flyspell
が、そうする必要はありません。そうすれば、答えはより多くの人々に関連することができます。
Emacsスペルチェッカーで複数の辞書を使用するにはどうすればよいですか?具体的には、イギリス英語辞書と医学英語辞書を同時に使用したいです。
flyspell
ます。
flyspell
が、そうする必要はありません。そうすれば、答えはより多くの人々に関連することができます。
回答:
Hunspellは複数の辞書を使用してスペルチェックを行うことができ、Emacsで動作するように設定できます。これは、OS X 10.11でEmacs 25.0を使用して行う方法です。古いEmacsenでは動作しません。
Hunspellをインストールする
brew install hunspell
LibreOfficeおよびOpenMedSpelからHunspell辞書をダウンロードします。
cd ~/Downloads/
curl http://extensions.libreoffice.org/extension-center/english-dictionaries/releases/2016.04.01/dict-en.oxt > dict-en.oxt
unzip dict-en.oxt en_GB.aff en_GB.dic
curl -L https://addons.mozilla.org/en-US/firefox/downloads/latest/6526/addon-6526-latest.xpi > openmedspel.xpi
unzip openmedspel.xpi dictionaries/OpenMedSpel.{aff,dic}
mv dictionaries/OpenMedSpel.dic en_US-med.dic
mv dictionaries/OpenMedSpel.aff en_US-med.aff
辞書をに入れ~/Library/Spelling/
ます。
mv *.aff *.dic ~/Library/Spelling/
これを追加~/.emacs/init.el
:
(with-eval-after-load "ispell"
(setq ispell-program-name "hunspell")
(setq ispell-dictionary "en_GB,en_US-med")
;; ispell-set-spellchecker-params has to be called
;; before ispell-hunspell-add-multi-dic will work
(ispell-set-spellchecker-params)
(ispell-hunspell-add-multi-dic "en_GB,en_US-med"))
ispell-hunspell-add-multi-dic
はispell.el
、Emacs 24.5の古いバージョンでも、の古いバージョンには存在しないようです。github.com/emacs-mirror/emacs/blob/master/lisp/textmodes/…から最新のファイルをダウンロードし、再度動作させるためにバイトコンパイルする必要がありました。
Symbol’s function definition is void: ispell-hunspell-add-multi-dic
、私は確かにあるんだけれども/usr/share/emacs/25.1.50/lisp/textmodes/ispell.elc
、関数が存在しています。どのようにそれが起こったのでしょうか?ありがとう。
ispell.el
に/usr/share/emacs/site-lisp/
新しいシャドウイングispell.el
Emacs25でを参照してください... unix.stackexchange.com/questions/28483/...同じ問題に遭遇するかもしれない誰のために。
すでにen_US-med.dicとen_US-med.affをダウンロードし、hunspellをインストールしたとします
ステップ1、hunspell -D
シェルで実行します。これは、hunspellが辞書を検索する場所をディレクトリに通知し、en_US-med.dicとen_US-med.affをそのディレクトリにコピーします。
ステップ2、以下のコードを〜/ .emacsに挿入し、
(setq ispell-program-name "hunspell")
;; you could set `ispell-dictionary` instead but `ispell-local-dictionary' has higher priority
(setq ispell-local-dictionary "en_US")
(setq ispell-local-dictionary-alist '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US,en_US-med") nil utf-8)))
実際には、オプション「-d en_US、en_US-med」をhunspell CLIに渡し、2つの辞書「en_US」と「en_US-med」を同時に使用できるようにします。
「-d」オプションは、hunspellマニュアル(man hunspell
シェル内)に記載されています。
hunspellマニュアルから引用したテキストを次に示します。
-d en_US,en_geo,en_med,de_DE,de_med
en_US and de_DE are base dictionaries, they consist of aff and dic
file pairs: en_US.aff, en_US.dic and de_DE.aff, de_DE.dic. En_geo,
en_med, de_med are special dictionaries: dictionaries without affix
file. Special dictionaries are optional extension of the base dictio‐
naries usually with special (medical, law etc.) terms. There is no
naming convention for special dictionaries, only the ".dic" extension:
dictionaries without affix file will be an extension of the preceding
base dictionary (right order of the parameter list needs for good sug‐
gestions). First item of -d parameter list must be a base dictionary.
Emacs 24.3、Debian 7で「fibrochondritis」という単語を使用してテスト済み。
どのOSでもEmacs 23+で動作するはずです。
Windowsでは、hunspell実行可能ファイルに辞書検索パスを伝える最も簡単な方法は、環境変数を設定することですDICTPATH
(hunspellマニュアルに記載されています)。Cygwin / MSYS2からのhunspell実行可能ファイルは、UNIX形式のパスのみを認識する可能性が非常に高いです。
-d
。選択肢に気づかなかった。
helm-flyspell
、システム言語でのみ辞書を使用するようです。
flyspell
ますか?