スペルチェック
Nvim の :help
ページ。 生成されたもので、 ソース を tree-sitter-vimdoc パーサーを使用して生成されています。
スペルチェック
このコマンドはスペルチェックをオンにします。
:setlocal spell spelllang=en_us
これは
'spell' オプションをオンにし、米国英語のスペルチェックを行うように指定します。
Vim は単語のスペルのみチェックし、文法チェックは行いません。
'mousemodel' オプションが "popup" に設定されており、カーソルが誤ったスペルのある単語の上に、または "popup_setpos" でマウスポインタが誤ったスペルのある単語の上にある場合、ポップアップメニューに誤った単語を置換するためのサブメニューが表示されます。
注記: これにより、ポップアップメニューの表示が遅くなります。
次の誤字脱字のある単語を検索するには
]s ]s カーソル後の次の誤字脱字のある単語に移動します。コマンドの前に数を指定して繰り返し実行できます。
'wrapscan' が適用されます。
[s [s "]s" と同様ですが、逆方向に検索し、カーソル前の誤字脱字のある単語を見つけます。2 行にまたがる単語は認識しないため、誤字脱字としてハイライトされていない単語で停止することがあります。行頭の大文字が欠けている単語では停止しません。
]S ]S "]s" と同様ですが、まれな単語や他の地域に特有の単語では停止しません。
[S [S "]S" と同様ですが、逆方向に検索します。
]r ]r カーソル後の次の「まれな」単語に移動します。コマンドの前に数を指定して繰り返し実行できます。
'wrapscan' が適用されます。
[r [r "]r" と同様ですが、逆方向に検索し、カーソル前の「まれな」単語を見つけます。2 行にまたがる単語は認識しないため、まれな単語としてハイライトされていない単語で停止することがあります。
独自の単語リストに単語を追加するには
ビジュアルモードでは、選択した文字が単語として追加されます(空白文字を含む!)。カーソルが誤字脱字としてマークされているテキスト上にある場合、マークされたテキストが使用されます。それ以外の場合は、非単語文字で区切られたカーソル下の単語が使用されます。
別のスペルファイルで単語が明示的に誤った単語としてマークされている場合、結果は予測できません。
zuW
zuG zuW zuG
zW と
zG を元に戻し、内部単語リストから単語を削除します。
zg と同様に、カウントを使用します。
:spe[llgood]!
{word}
zG と同様に、
{word}
を正しい単語として内部単語リストに追加します。
:spellw[rong]!
{word}
zW と同様に、
{word}
を誤った(間違った)単語として内部単語リストに追加します。
単語をまれな単語としてマークするノーマルモードコマンドはありません。これは比較的まれなコマンドであり、これに対する直感的なコマンドは既に使用されているためです。必要であれば、例えば次のようにマッピングを追加できます。
nnoremap z? :exe ':spellrare ' .. expand('<cWORD>')<CR>
nnoremap z/ :exe ':spellrare! ' .. expand('<cWORD>')<CR>
:spellra[re]!
{word}
zW と同様に、
{word}
をまれな単語として内部単語リストに追加します。
上記の命令で
'spellfile' に単語を追加した後、関連付けられた ".spl" ファイルが自動的に更新され、再読み込みされます。
'spellfile' を手動で変更した場合は、
:mkspell コマンドを使用する必要があります。この一連のコマンドはほとんどの場合うまく機能します。
:edit <file in 'spellfile'>
誤った単語の候補を検索する:
z=z= カーソル下/後の単語について、正しくスペルされた単語を提案します。これは、誤字脱字としてハイライトされていない単語(例えば、その後の単語が誤字脱字の場合)の代替案を見つける場合にも機能します。ビジュアルモードでは、ハイライトされたテキストが置換される単語として扱われます。結果は、置換される単語との類似度に基づいてソートされます。時間がかかる場合があります。飽きたら
CTRL-C
を押してください。
カウントなしでコマンドを使用すると、候補が一覧表示され、選択した番号を入力するか、置換しない場合は <Enter>
を押すことができます。マウスを使用して選択をクリックすることもできます(ノーマルモードでマウスを使用でき、改行がない場合のみ)。最初の行(ヘッダー)をクリックするとキャンセルできます。
一覧表示される候補は通常、ハイライトされた誤字脱字のある単語を置換します。場合によっては、他のテキストが含まれている場合があり、その場合は置換されたテキストも「<」の後に一覧表示されます。
カウントを指定すると、プロンプトなしでその候補が使用されます。例えば、「1z=」は常に最初の候補を採用します。
'verbose' が 0 より大きい場合、候補と共にスコアが表示され、誤字脱字のある単語との類似度を示します(スコアが高いほど違いが大きくなります)。単語が置換された場合、やり直しコマンド「.」で単語の置換を繰り返すことができます。これは「ciw」、正しい単語、
<Esc>
のように機能します。これはタイ語や単語間にスペースがない他の言語では機能しません。
挿入モードで、カーソルが誤字脱字のある単語の後に位置している場合、CTRL-X s を使用して候補を検索できます。これは挿入モードの補完のように機能します。CTRL-N を使用して次の候補を使用し、
CTRL-P
を使用して前に戻ります。
i_CTRL-X_s
'spelloptions' オプションには、スペルチェックの動作に影響を与えるフラグがいくつかあります。例えば、「camel」は CamelCase の単語を分割し、単語の各部分を個別にスペルチェックします。
Vim は正しい単語が出現した回数をカウントします。これは候補をソートするために使用されます。以前に見られた単語は小さなボーナスを受け、頻繁に見られた単語は大きなボーナスを受けます。接尾辞ファイルの COMMON 項目を使用して一般的な単語を定義することで、このメカニズムは新規または短いファイルでも機能します
spell-COMMON。
Vimは、リアルタイムのスペルチェック機能を備えています。この機能を高速化するため、単語リストはメモリにロードされます。そのため、多くのメモリ(1MB以上)を消費します。また、単語リストのロード時にわずかな遅延が発生する場合があります。これは、
'spell'が設定されている場合と、
'spell'が既に設定されている状態で
'spelllang'が設定されている場合に発生します。遅延を最小限に抑えるため、各単語リストは一度だけロードされ、
'spelllang'が空になったり、
'spell'がリセットされたりしても削除されません。
'encoding'が設定されると、すべての単語リストが再ロードされるため、その際にも遅延が発生する可能性があります。
地域
単語は、地域によって異なる綴り方をする場合があります。例えば、英語には(少なくとも)以下のバリエーションがあります。
en 全地域 en_au オーストラリア en_ca カナダ en_gb イギリス en_nz ニュージーランド en_us アメリカ合衆国
言語名と地域名は常に小文字を使用してください。
ドイツ語のスペルチェック 特別な例外:ドイツ語の場合、これらの特別な地域が使用されます。de ドイツ語の単語すべてを許容 de_de 旧および新正書法 de_19 旧正書法 de_20 新正書法 de_at オーストリア de_ch スイス
ロシア語のスペルチェック 特別な例外:ロシア語の場合、これらの特別な地域が使用されます。ru ロシア語の単語すべてを許容 ru_ru "IE"文字の綴り ru_yo "YO"文字の綴り
イディッシュ語のスペルチェック イディッシュ語は、使用される特殊文字のため、「utf-8」エンコーディングを使用する必要があります。latin1を使用している場合、Vimは代わりに転写された(ローマ字化された)イディッシュ語を使用します。utf-8で転写されたイディッシュ語を使用する場合は、「yi-tr」を使用してください。表にすると以下のようになります。
'encoding' 'spelllang' utf-8 yi イディッシュ語 latin1 yi 転写されたイディッシュ語 utf-8 yi-tr 転写されたイディッシュ語
CJKのスペルチェック 中国語、日本語、その他の東アジアの文字は、通常、これらの文字のスペルチェックがサポートされていないため、エラーとしてマークされます。
'spelllang'に「cjk」が含まれている場合、これらの文字はエラーとしてマークされません。これは、一部のアジア語の単語が存在するテキストをスペルチェックしながら編集する場合に便利です。
「LL」の値は
'spelllang'から取得されますが、地域名は除外されます。例:
en_us en en-rare en-rare medical_ca medical
最初にロードされるのは、
'runtimepath'で最初に検出されたファイルだけです。これが成功すると、さらにLL.EEE.add.splという名前のファイルがロードされます。見つかったファイルはすべて使用されます。
例外
'encoding'が「iso-8859-15」の場合、Vimは「latin1」を使用します。ユーロ記号はスペルには関係ありません。
'encoding'のスペルファイルが見つからない場合、「ascii」が試行されます。これは、英語など、ほとんどすべての単語がASCIIである言語でのみ機能します。これは、
'encoding'が「latin1」ではない場合(例:iso-8859-2)に、英語のテキストを編集する場合に役立ちます。 ".add"ファイルには、見つかったメインのスペルファイルと同じ名前が使用されます。
Vimは以下を検索します:1. ~/.config/nvim/spell/pl.iso-8859-2.spl 2. /usr/share/nvim/runtime/spell/pl.iso-8859-2.spl 3. ~/.config/nvim/spell/pl.iso-8859-2.add.spl 4. /usr/share/nvim/runtime/spell/pl.iso-8859-2.add.spl 5. ~/.config/nvim/after/spell/pl.iso-8859-2.add.spl
これは、1.が見つからず、2.が見つかったと仮定しています。
'encoding'が「latin1」の場合、Vimは以下を検索します:1. ~/.config/nvim/spell/pl.latin1.spl 2. /usr/share/nvim/runtime/spell/pl.latin1.spl 3. ~/.config/nvim/after/spell/pl.latin1.spl 4. ~/.config/nvim/spell/pl.ascii.spl 5. /usr/share/nvim/runtime/spell/pl.ascii.spl 6. ~/.config/nvim/after/spell/pl.ascii.spl
これは、これらがすべて見つからないと仮定しています(非ASCII文字を除外するとポーランド語は意味を成しません)。
spell-sug-file E781 ".spl"ファイルと同じ名前で、".sug"で終わるファイルがある場合、そのファイルはより良い候補を提供するために使用されます。メモリ使用量を削減するために、候補が作成されるまでロードされません。
E758 E759 E778 E779 E780 E782 スペルファイルをロードする際、Vimはフォーマットが正しいことを確認します。エラーが発生した場合は、ファイルが切り詰められているか、変更されているか、別のVimバージョン用である可能性があります。
zwコマンドは、
'spellfile'の既存のエントリをコメント行に変換します。これにより、毎回新しいファイルを作成する必要がなくなりますが、ファイルは長くなる一方であり、短くなることはありません。すべての ".add" スペルファイルのコメント行をクリーンアップするには、次の操作を行います。
:runtime spell/cleanadd.vim
これは、「##」で始まるもの以外すべてのコメント行を削除します。「##」行を使用して、保持したいコメントを追加します。
このスクリプトは何度でも実行できます。最近変更されたファイルの更新をスキップするための変数が用意されています。ファイルが変更されてからクリーンアップするまでの経過時間を秒単位で設定します。例えば、最後に変更されてから1時間経過したファイルのみをクリーンアップするには、
let g:spell_clean_limit = 60 * 60
デフォルトは1秒です。
単語
単語文字のテーブルは、メインの.splファイルに格納されています。したがって、生成時の現在のロケールが重要になります!ただし、.add.splファイルには単語テーブルが含まれていません。
数字で始まる単語の場合、単語全体が認識されない限り、数字は無視されます。したがって、「3D」が単語であり「D」が単語ではない場合、「3D」は単語として認識されますが、「3D」が単語ではない場合、「D」のみが間違っているとマークされます。0x12abおよび0X12AB形式の16進数は認識されます。
単語の組み合わせ
空白を含む単語のスペルチェックが可能です。これは、単独で使用すると無効になる単語(例:「et al.」)を認識するために使用されます。「the the」を認識して強調表示することもできます。
空白の数は関係ありません。ほとんどの場合、改行も表示されます。ただし、これにより、スペルミスをチェックする開始位置を特定するのが難しくなります。1行のみを変更してその行のみが再描画されると、Vimは前の行を参照しません。したがって、「et」が前の行の末尾にある場合、「al.」はエラーとしてフラグが立てられます。そして、「the
the」と入力した場合、最初の行が再描画されるまで強調表示は表示されません。CTRL-Lを使用してすぐに再描画してください。「[s」も改行を含む単語の組み合わせで停止します。
改行に遭遇すると、Vimは「*」、「>」、「"」などの文字をスキップするため、C、シェル、Vimコードのコメントをスペルチェックできます。
構文の強調表示を使用するファイルは、スペルチェックを実行する場所を指定できます。
1. すべての場合 デフォルト 2. 特定の項目内 "contains=@Spell"を使用 3. すべての場所だが特定の項目を除く "contains=@NoSpell"を使用
2番目の方法では、@NoSpellクラスタを追加すると、スペルチェックが無効になります。これは、例えば、プログラムのコメントに@Spellを追加し、チェックしてはならない項目に@NoSpellを追加するために使用できます。構文項目に含まれていないテキストについては、
:syn-spellも参照してください。
Vimスクリプト
スペルに関する処理を行うVimスクリプトを作成する場合は、次の関数が役立つ場合があります。
spellbadword() カーソル位置にあるスペルミスのある単語を見つける spellsuggest() スペル候補のリストを取得する soundfold() 単語の類似音バージョンを取得する
ディストリビューションには、これらのファイルがいくつか含まれています。これらが何をするかを確認するには、次のコマンドを使用します。
:next $VIMRUNTIME/spell/*.vim
デフォルトのスクリプトは、
'spellcapcheck'がデフォルト値から変更された場合、それを設定しません。これは、ユーザーが別の値を好むと仮定しています。
「
'spellsuggest'」オプションを使用して、「ダブル」スコアリングを選択できます。このメカニズムは、スペルミスには2種類あるという原則に基づいています。
1. 単語のスペルは知っているが、タイプミスをした場合。これは、編集距離が小さく(文字の入れ替え/省略/挿入)、完全に異なる発音の単語になる可能性があります。
2. 単語のスペルを知らず、正しく聞こえるものをタイプした場合。編集距離は大きくなる可能性がありますが、サウンドフォールディング後、単語は似ています。
これらの2種類のミスのスコアは大きく異なるため、それぞれにリストを使用し、それらを組み合わせます。
サウンドフォールディングは遅く、その言語を知っている人は2番目の種類のミスをしません。「
'spellsuggest'」は、候補のスコアリングに使用する優先メソッドを選択するように設定できます。
Aap(www.a-a-p.orgから入手可能)をインストールすると、runtime/spell/??/ディレクトリのレシピを使用できます。Aapはファイルのダウンロード、Vimに必要なパッチの適用、.splファイルのビルドを行います。
現在のロケールが正しく設定されていることを確認してください。そうでないと、Vimは大文字と小文字の文字を認識できません。ロケールが利用できない場合(例:UnixでMS-Windowsコードページを使用する場合)、
spell-affix-charsにテーブルを追加します。.affファイルでテーブルが定義されていない場合、現在アクティブなスペリングの単語テーブルが使用されます。スペリングがアクティブでない場合、Vimは推測しようとします。
:mksp :mkspell :mksp[ell][!] [-ascii]
{outname}
{inname}
... 単語リストからVimスペルファイルを作成します。例
:mkspell /tmp/nl nl_NL.words
E751 {outname}
が ".spl" で終わる場合、出力ファイル名として使用されます。そうでない場合は、「en」など、地域名を含まない言語名にする必要があります。書き込まれるファイルは「{outname}.{encoding}.spl」になり、
{encoding}
は
'encoding'オプションの値です。
出力ファイルが既に存在する場合は、上書きするために[!]を使用する必要があります。
[-ascii]引数が存在する場合、ASCII以外の文字を含む単語はスキップされます。結果のファイルは「ascii.spl」で終わります。
入力は、Myspell形式のファイル{inname}
.affと{inname}
.dicにすることができます。{inname}
.affが存在しない場合、{inname}
はプレーンな単語リストのファイル名として使用されます。
複数の
{inname}
引数を指定して、複数の地域を1つのVimスペルファイルに結合できます。例
:mkspell ~/.config/nvim/spell/en /tmp/en_US /tmp/en_CA /tmp/en_AU
これにより、米国、カナダ、オーストラリアの英語単語リストが1つのen.splファイルに結合されます。最大8つの地域を結合できます。
E754 E755 最初に見つかった.affファイルのREP項目とSAL項目が使用されます。
spell-REP spell-SAL E845このコマンドは、最適な単語ツリーを見つけるために多くのメモリを使用します(ポーランド語、イタリア語、ハンガリー語には数百MBが必要です)。圧縮が使用されるため、最終結果ははるかに小さくなります。メモリ不足を防ぐために、圧縮は随時実行されます。これは、
'mkspellmem'オプションで調整できます。
スペルファイルが書き込まれ、バッファで使用されると、自動的に再読み込みされます。
:mksp[ell] [-ascii] {name}
.{enc}.add 上記の":mkspell"と同様に、{name}
.{enc}.addを入力ファイルとして使用し、同じディレクトリに".spl"を追加した出力ファイルを作成します。
:mksp[ell] [-ascii] {name}
上記の":mkspell"と同様に、{name}
を入力ファイルとして使用し、同じディレクトリに".{enc}.spl"を追加した出力ファイルを作成します。
Vimは重複単語の数を報告します。これは単語リストの間違いである可能性があります。しかし、同じ基本単語に異なる接頭辞と接尾辞を持たせて、それらの結合を避けるために使用されることもあります(例:チェコ語)。Vimにすべての重複単語を報告させたい場合は、
'verbose'オプションを設定します。
Myspellの単語リストをVimで使用するために変更する場合、次の手順をお勧めします。
1. Myspellからxx_YY.affとxx_YY.dicファイルを入手します。2. これらのファイルをxx_YY.orig.affとxx_YY.orig.dicにコピーします。3. xx_YY.affとxx_YY.dicファイルを修正して、間違った単語を削除し、不足している単語を追加し、FOL/LOW/UPPを使用して単語文字を定義するなどします。配布されている「*.diff」ファイルを使用できます。4. 正しいロケールでVimを起動し、
:mkspellを使用してVimスペルファイルを作成します。5.
'runtimepath'内のスペルディレクトリに作成した場合は「:set spell spelllang=xx」、それ以外の場所に作成した場合は「:set spelllang=xx.enc.spl」を使用して、スペルファイルを試します。
Myspellファイルが更新された場合は、変更をマージできます。1. 新しいMyspellファイル(xx_YY.new.affとxx_UU.new.dic)を入手します。2.
diff-modeを使用して、変更を確認します。
nvim -d xx_YY.orig.dic xx_YY.new.dic
3. xx_YY.dicで必要な変更を行います。xx_YY.affを変更する必要がある場合もあります。4. xx_YY.new.dicをxx_YY.orig.dicに、xx_YY.new.affをxx_YY.orig.affに名前変更します。
スペルチェックはVimの比較的新しい機能であるため、より多くの言語をサポートするために.splファイル形式が変更される可能性があります。Vimはスペルファイルの有効性をチェックし、問題があれば報告します。
E771:古いスペルファイルで、更新が必要です。
このスペルファイルは、お使いのVimよりも古いバージョンです。.splファイルを更新する必要があります。
E772:スペルファイルは、新しいバージョンのVim用です。
これは、スペルファイルが新しいバージョンのVim用に作成されたことを意味します。Vimを更新する必要があります。
E770:スペルファイルでサポートされていないセクションです。
これは、スペルファイルが新しいバージョンのVim用に作成され、スペルファイルの動作に必要なセクションが含まれていることを意味します。この場合は、Vimをアップグレードすることをお勧めします。
スペルファイルのダンプ
何らかの理由で、現在使用されているスペルファイルでサポートされている単語を確認する場合は、次のコマンドを使用します。
:spelldump :spelld :spelld[ump] 新しいウィンドウを開き、現在有効なすべての単語で埋めます。複合語は含まれません。
注:一部の言語では、結果が非常に大きくなり、Vimがメモリ不足になる可能性があります。
:spelld[ump]! 「:spelldump」と同様に、単語数を表示します。これは、画面の更新中に単語が見つかった回数です。COMMON項目にある単語には、10の開始カウントが付けられます。
'spelllang'へのすべてのエントリが同じ地域を使用するか、地域をまったく使用しない場合、地域情報はダンプされた単語に含まれます。それ以外の場合は、現在の地域の単語のみが含まれ、「/regions」行は生成されません。
.splファイルの名前を含むコメント行は、その.splファイルから生成された単語の上のヘッダーとして使用されます。
使用している言語のスペルファイルがない場合、エラーメッセージが表示されます。しかし、「spellfile.vim」プラグインがアクティブな場合、スペルファイルをダウンロードするよう促します。指示に従ってください。ファイルの書き込み場所を尋ねられます(これには、
'runtimepath'に書き込み可能なディレクトリが必要です)。
このプラグインは、VimのFTPサーバーにあるスペルファイルを探すデフォルトの場所を持っています。セキュリティのためにSSL(
https://)プロトコルが使用されます。別の場所または別のプロトコルを使用する場合は、g:spellfile_URL変数をスペルファイルを含むディレクトリに設定します。
http://またはftp://を使用できますが、セキュリティリスクがあります。
netrwプラグインはファイルの取得に使用されます。URLの具体的な構文については、そちらを参照してください。例
let g:spellfile_URL = 'https://ftp.nluug.nl/vim/runtime/spell'
特殊文字をエスケープする必要がある場合があります。
プラグインは、言語のダウンロードを1回だけ促します。再度試行する場合は、Vimを再起動するか、g:spellfile_URLを別の値に設定します(例:スペースを追加)。
「spellfile.vim」プラグインを使用しないようにするには、vimrcファイルで次の操作を行います。
let loaded_spellfile_plugin = 1
プラグインを使用する代わりに、
SpellFileMissing autocommandを定義して、不足しているファイルを自分で処理できます。このように使用できます。
:au SpellFileMissing * call Download_spell_file(expand('<amatch>'))
したがって、
<amatch>
項目には、言語の名前が含まれています。もう1つの重要な値は
'encoding'です。エンコーディングごとに独自のスペルファイルがあるためです。ただし、2つの例外があります。
ISO-8859-15(latin9)の場合、「latin1」という名前が使用されます(エンコーディングは、辞書の単語で使用されない文字のみが異なります)。
単語のほとんどがASCII文字のみを使用する言語では、「ascii」という名前も使用できます。
デフォルトの "spellfile.vim" プラグインはこのautocommandを使用します。後でautocommandを定義する場合は、":au! SpellFileMissing" を使用して上書きすることができます。プラグインがロードされる前にautocommandを定義すると、プラグインはこれを認識し、何も実行しません。
E797SpellFileMissing autocommandは、ユーザーが編集していたバッファを変更または破損してはならないことに注意してください。
これは、単語リストの作成と保守を行う人が使用するファイルの形式です。
ここで「辞書」という単語を避けていることに注意してください。それは、スペルチェックの目標が辞書(書籍にあるような)の作成とは異なるためです。スペルチェックでは、問題のない単語のリストが必要であり、それらは強調表示されるべきではありません。人名や会社名は辞書には表示されませんが、単語リストには表示されます。また、古い単語の中には、まれにしか使用されないにもかかわらず、一般的な誤字脱字となっているものがあります。これらは辞書には表示されますが、単語リストには表示されません。
2つの形式があります。単語の単純なリストと、接尾辞圧縮を使用したリストです。接尾辞圧縮を使用したファイルは、Myspell(MozillaとOpenOffice.org)で使用されます。これには、.aff拡張子と.dic拡張子の2つのファイルが必要です。
単語は1行に1つずつ表示する必要があります。それだけです。
さらに、次の項目が認識されます。
# コメント
#で始まる行は無視されます(コメント行)。
/encoding=utf-8
単語の前に "/encoding=" で始まる行は、ファイルのエンコーディングを指定します。2番目の "=" の後にエンコーディング名が続きます。これにより、Vimは指定されたエンコーディングから
'encoding'への変換を設定します。そのため、複数のターゲットエンコーディングで1つの単語リストを使用できます。
/regions=usca
"/regions=" で始まる行は、サポートされているリージョン名を指定します。各リージョン名は、2文字のASCII文字でなければなりません。最初の文字がリージョン1です。したがって、"/regions=usca" はリージョン1 "us" とリージョン2 "ca" を持ちます。追加の単語リストでは、リージョン名はメインの単語リストと一致する必要があります。
'/' で始まるその他の行は、将来の使用のために予約されています。認識されない行は無視されます。動作しないものがあることを知らせる警告メッセージが表示されます。
単語の後に '/' が続く場合、次の項目が続きます。= 大文字小文字が完全に一致する必要があります。? まれな単語。! 間違った単語。1~9 有効な単語であるリージョン。リージョンが指定されていない場合、単語はすべてのリージョンで有効です。
例
# これは例となる単語リストのコメントです /encoding=latin1 ファイルのエンコーディング /regions=uscagb リージョン "us"、"ca"、"gb" すべてのリージョンに対する例の単語 blah/12 リージョン "us" と "ca" の単語 vim/! 間違った単語 Campbell/?3 リージョン3 "gb" のまれな単語 's mornings/= 大文字小文字を維持する単語
"/=" が使用されている場合、すべて大文字の同じ単語は受け入れられないことに注意してください。これは、大文字と小文字が混在する単語(自動的に大文字小文字を維持する単語としてマークされる)とは異なり、これらの単語はすべて大文字で表示される場合があります。
2つのファイルがあります。基本単語リストと接尾辞ファイルです。接尾辞ファイルは、言語の設定を指定し、接尾辞を含めることができます。接尾辞は、基本単語を修正して完全な単語リストを取得するために使用されます。これにより、特にポーランド語のような言語では、単語の数が大幅に削減されます。これは接尾辞圧縮と呼ばれます。
基本単語リストと接尾辞ファイルは、":mkspell" コマンドで結合され、バイナリのスペルファイルになります。すべての前処理が完了しているため、このファイルは高速にロードされます。バイナリのスペルファイル形式はソースコード(src/spell.c)に記述されています。しかし、開発者だけが知る必要があります。
前処理により、Myspell言語ファイルを取得し、Vim単語リストを作成する前に変更することもできます。これのためのツールは、"src/spell" ディレクトリにあります。
行番号付きの短い例
1 1234
2 aan
3 Als
4 Etten-Leur
5 et al.
6 's-Gravenhage
7 's-Gravenhaags
8 # リージョン間で異なる単語
9 kado/1
10 cadeau/2
11 TCP,IP
12 /the S 接尾辞は 's' を追加する可能性があります
13 bedel/S
最初の行には単語数が含まれています。Vimはこれを無視しますが、存在しない場合はエラーメッセージが表示されます。
E760
その後に、1行に1つの単語が続きます。行末の空白は無視されますが、その他の空白は重要です。エンコーディングは接尾辞ファイルで指定されます
spell-SET。
コメント行は '#' または '/' で始まります。例として8行目と12行目を参照してください。単語の後にコメントを置くことは許可されていません。
someword # エラーの原因となるコメント!
単語の後に、オプションのスラッシュとフラグが続きます。これらのフラグのほとんどは、この単語で使用できる接尾辞を示す文字です。これらは、.affファイルのSFX行とPFX行で指定されます。
spell-SFX と
spell-PFX。Vimでは、接尾辞ファイルのFLAG項目を使用して他のフラグの種類を使用できます。
spell-FLAG。
単語に小文字のみが含まれる場合、大文字で始まる単語にも一致します。
単語に大文字が含まれる場合、その位置で大文字が必要であることを意味します。その位置に小文字がある同じ単語は一致しません。他の文字の一部が大文字の場合も一致しません。
すべて大文字の単語は常にOKです。
単語リストの一致 一致しない
als als Als ALS ALs AlS aLs aLS Als Als ALS als ALs AlS aLs aLS ALS ALS als Als ALs AlS aLs aLS AlS AlS ALS als Als ALs aLs aLS
KEEPCASE接尾辞IDを使用して、大文字小文字が完全に一致する単語を具体的に一致させることができます。下記を参照してください。
spell-KEEPCASE。
注記: 5行目から7行目では、単語以外の文字が使用されています。単語には任意の文字を含めることができます。テキストをチェックする場合、単語は単語以外の文字が前後にある場合にのみ一致します。Myspellでは、単語以外の文字で始まる単語は機能しない可能性があります。
12行目では、単語 "TCP/IP" が定義されています。スラッシュには特別な意味があるため、代わりにコンマが使用されます。これは、接尾辞ファイルのSLASH項目で定義されます。
spell-SLASH このSLASH項目がない場合、単語は "TCP,IP" になります。
.affファイルのコメント行は '#' で始まります。
引数の数が固定されている項目には、コメントを続けることができます。ただし、引数に空白が含まれていない場合のみです。コメントは '#' 文字で始める必要があります。例
KEEPCASE = # このフラグを持つ単語の大文字小文字を修正します
接尾辞ファイルは、"iconv" でサポートされている任意のエンコーディングにすることができます。ただし、場合によっては、
:mkspell が呼び出された時点での現在のロケールも適切に設定する必要があります。FOL/LOW/UPP行を追加すると、この要件がなくなります。
spell-FOL。
エンコーディングは、エンコーディングが重要なものより前に指定する必要があります。エンコーディングは、接尾辞ファイルと辞書ファイルの両方に適用されます。SET行で行われます。
エンコーディングは、":mkspell" が使用された時点での
'encoding' オプションの値と異なる場合があります。その場合、Vimはすべてを
'encoding'に変換し、
'encoding'用のスペルファイルを作成します。使用されている文字の一部が
'encoding'に収まらない場合は、エラーメッセージが表示されます。
spell-affix-mbyteマルチバイトエンコーディングを使用する場合、より多くの異なる接尾辞フラグを使用できます。ただし、Myspellはそれをサポートしていないため、使用しない方が良いでしょう。互換性のためには、8ビットエンコーディングを使用してください。
接尾辞ファイルのこれらのエントリは、スペルファイルに情報を追加するために使用できます。形式に関する制限はありませんが、正しいエンコーディングである必要があります。
これらのフィールドは、そのまま.splファイルに配置されます。
:spellinfo コマンドを使用して情報を表示できます。
3行すべてに、文字数が完全に一致している必要があります。
"FOL" 行は、大文字小文字を無視して単語を比較するために使用される、大文字小文字を折りたたんだ文字を指定します。ほとんどのエンコーディングでは、これは小文字の行と同じです。
"LOW" 行は、小文字の文字を指定します。ほとんどの場合、"FOL" 行と同じです。
"UPP" 行は大文字の文字を指定します。"FOL" の同じ位置にある文字とは異なる文字が大文字です。
ドイツ語のエスツェット(ß)については例外的に扱います。大文字は"SS"となります。FOL/LOW/UPP行には含めるべきですが、3行全てでßを使用してください。
ASCII文字は省略してください。Vim は常にこれらを同じように処理します。エンコーディングがUTF-8の場合、単語文字を指定する必要はありません。
E763 Vim では、同じファイル内で複数の言語のスペルチェックを使用できます。
'spelllang' オプションに言語をリストアップします。その結果、同じエンコーディングのすべてのスペルファイルは同じ単語文字を使用する必要があります。そうでなければ、エラーなしに組み合わせることができません。
単語テーブルが異なるというE763警告が表示された場合は、".spl"スペルファイルを更新する必要があります。ファイルをダウンロードした場合は、使用するすべてのスペルファイルの最新バージョンを入手してください。ドイツ語のみを使用している場合でも、最新の英語スペルファイルもダウンロードしてください。それ以外の場合は、
:mkspell を使用して.splファイルを再度生成してください。それでもエラーが発生する場合は、使用している.affファイルのFOL、LOW、UPP行を確認してください。
" -ascii"引数で生成されたXX.ascii.splスペルファイルには、文字のテーブルが含まれていないため、任意のエンコーディングのスペルファイルと組み合わせることができます。.add.splファイルにもテーブルは含まれていません。
単語内文字
spell-midword 一部の文字は、2つの通常の単語文字の間に使用されている場合のみ、単語文字と見なされます。例として、単一引用符があります。これはテキストを引用符で囲むために頻繁に使用されるため、単語文字としては認識されませんが、単語文字の間に現れる場合は、単語の一部である必要があります。"they'are"のようなスペルミスを検出するために必要です。"they're"が正しいのですが、"they"と"are"は単語であるため、気づかれません。
これらの文字は、.affファイルのMIDWORDで定義されます。例:
フラグは、単語で使用できる接辞と単語のその他のプロパティを指定するために使用されます。通常は1文字のフラグが使用されます。これは、特に8ビットエンコーディングの場合、可能なフラグの数を制限します。より多くの接辞を使用する必要がある場合は、FLAG項目を使用できます。可能な値:
FLAG long: 2文字のフラグを使用します。FLAG num: 1から65000までの番号を使用します。FLAG caplong: A~Zを除く1文字のフラグと、A~Zで始まる2文字のフラグを使用します。
"FLAG num"を使用する場合、接辞のリスト内の番号はコンマで区切る必要があります。「234,2143,1435」のように。この方法は効率的ではありませんが、ファイルがプログラムで生成される場合は便利です。
"caplong"を使用する場合、2文字のフラグはすべて大文字で始まります。「Aa」、「B1」、「BB」など。これは、最も一般的な項目には1文字のフラグを使用し、まれな項目には2文字のフラグを使用するのに役立ちます。
**注記:** UTF-8を使用する場合、フラグには最大65000までの文字を使用できます。
**注記:** "num"または"long"を使用する場合でも、複合語と接頭辞に使用できるフラグの数は約250に制限されます。
概要
SFX L Y 2
SFX L 0 re [^x]
SFX L 0 ro x
最初の行はヘッダーで、4つのフィールドがあります:SFX {flag}
{combine}
{count}
{flag}
接尾辞に使用される名前。ほとんどの場合、1文字ですが、他の文字を使用することもできます。
spell-FLAGを参照してください。
{combine}
'Y'または'N'になります。'Y'の場合、単語と接尾辞に接頭辞を付けることもできます。'N'の場合、接頭辞は許可されません。
{count}
後続する行の数。これが間違っていると、エラーメッセージが表示されます。
PFXの場合、フィールドはまったく同じです。
後続する行の基本形式は次のとおりです。SFX {flag}
{strip}
{add}
{condition}
{extra}
{flag}
は、最初の行で使用されている{flag}
と同じである必要があります。
{strip}
基本単語から削除される文字。文字が実際に存在するかどうかはチェックされず、長さ(バイト単位)のみが使用されます。これは{condition}
とよりよく一致させる必要があります。そうでないと、奇妙なことが起こる可能性があります。{strip}
の長さが基本単語と同じかそれよりも長い場合、接尾辞は使用されません。{strip}
が0(ゼロ)の場合、何も削除されません。
{add}
{strip}
を削除した後、基本単語に追加される文字。オプションで'/'の後にフラグが続きます。フラグは、単語と接辞に適用されます。
spell-affix-flagsを参照してください。
{condition}
単純なパターン。これが基本単語と一致する場合のみ、その単語に接尾辞が使用されます。これは通常、異なる接尾辞文字を異なる
{add}
と
{strip}
フィールドを持つ、異なる語尾の単語で使用するためです。
{condition}
が'.'(ドット)の場合、条件はありません。パターンには以下を含めることができます。
リテラル文字。
文字の集合([])。[abc]はa、b、cに一致します。範囲[a-c]にはダッシュを使用できますが、これはVim固有です。
'^'で始まる文字の集合。指定された文字の補集合を意味します。[^abc]はa、b、c以外の任意の文字に一致します。
{extra}
オプションの追加テキスト:# コメント。コメントは無視されます - Hunspell はこれを使い、無視されます。
PFXの場合、フィールドは同じですが、{strip}
、{add}
、{condition}
は単語の先頭に適用されます。
**注記:** Myspellは、関連情報の後にある追加テキストを無視します。Vimでは、このテキストは「#」で始まる必要があるため、ミスに気づきやすくなります。例:
SFX F 0 in [^i]n # Spion > Spionin
SFX F 0 nen in # Bauerin > Bauerinnen
ただし、Myspell用に記述された接辞ファイルの多くのエラーを回避するために、IGNOREEXTRAフラグを追加できます。
Myspellでは、接辞名が複数回出現することが許されているようです。これもミスである可能性があるため、Vimは余分な「S」をチェックします。この機能を使用するMyspellの接辞ファイルには、このフラグがあるようです。例:
SFX a Y 2 S
SFX a 0 en .
SFX a 0 on .
これはHunspellからの機能です。接辞はフラグを指定できます。これは、基本単語で指定されたフラグと同様に機能します(ただし、制限があります)。例:
SFX A Y 1
SFX A 0 able/S .
辞書ファイルに「drink/AS」が含まれている場合、これらの単語が可能です。
drink drinks(S接尾辞を使用) drinkable(A接尾辞を使用) drinkables(A接尾辞、次にS接尾辞を使用)
一般的に、接尾辞のフラグは基本単語のフラグに追加され、両方とも単語と接尾辞に使用されます。ただし、基本単語のフラグは接辞には一度だけ使用されます。ただし、両方とも組み合わせをサポートしている場合は、接頭辞と接尾辞の両方を一度に使用できます。
具体的には、接辞フラグは以下に使用できます。
上の例のように、接尾辞への接尾辞。これは一度だけ機能するため、単語に2つの接尾辞(+1つの接頭辞)を付けることができます。
複合語フラグ:単語と接辞は、複合語の末尾、中央、先頭などの一部にすることができます。フラグは基本単語のフラグと組み合わせられます。
spell-compoundNEEDAFFIX:有効な単語にするには別の接辞が必要です。
CIRCUMFIX(後述)。
通常、Vimは「#」で始まらない余分なフィールドに対してエラーを返します。これにより、エラーに気づきやすくなります。ただし、MyspellまたはHunspellで作成されたファイルの中には、余分なフィールドを持つエントリが多く含まれているものがあります。多くのエラーを回避するために、IGNOREEXTRAフラグを使用します。
CIRCUMFIXフラグは、接頭辞と接尾辞を同時に追加する必要があることを意味します。接頭辞にCIRCUMFIXフラグがある場合、CIRCUMFIXフラグを持つ接尾辞のみを追加でき、その逆も同様です。別の方法としては、接尾辞のみを指定し、その接尾辞に2つのフラグ(必要な接頭辞とNEEDAFFIXフラグ)を与えることです。
spell-NEEDAFFIX
非常に多くの単語に適用される接頭辞が非常に多い接辞ファイルの場合、単語リスト全体をメモリに構築することはできません。これはヘブライ語に当てはまります(すべての単語を含むリストは1GB以上です)。その場合、接頭辞の適用は延期する必要があります。これにより、スペルチェックが遅くなります。これは、.affファイルのこのキーワードで示されます。
切り取り文字列とフラグのない接頭辞のみを延期できます。切り取り文字列またはフラグを持つ接頭辞は、単語リストに引き続き含まれます。例外は、切り取り文字列が1文字で、追加された文字列の最後の文字と等しく、小文字の場合です。したがって、切り取り文字列を使用して、次の単語が大文字で始まることを許可する場合です。
スラッシュは、.dicファイルで基本単語と接辞文字およびその他のフラグを区切るために使用されます。残念ながら、これは単語にスラッシュを使用できないことを意味します。したがって、「TCP/IP」は単語ではなく、「TCP」とフラグ「IP」です。単語にスラッシュを含めるには、その前にバックスラッシュを付けます。「TCP\/IP」のように。バックスラッシュを単語内で使用したいまれな場合は、2つのバックスラッシュを使用する必要があります。バックスラッシュのその他の使用は、将来の拡張のために予約されています。
接辞ファイルでは、KEEPCASE行を使用して、大文字小文字を維持する単語に使用される接辞名を定義できます。例:
このフラグはMyspellではサポートされていません。これは、大文字小文字が重要であることを意味します。これは、文の先頭で単語の最初の文字が大文字ではない場合に使用できます。例:
単語リストの一致 一致しない
's morgens/= 's morgens 'S morgens 's Morgens 'S MORGENS 's Morgens 's Morgens 'S MORGENS 'S morgens 's morgens
このフラグは、単語がすべて大文字の場合に単語が一致しないようにするためにも使用できます。
接辞ファイルでは、RARE行を使用して、まれな単語に使用される接辞名を定義できます。例:
まれな単語は、間違った単語とは異なる方法で強調表示されます。これは、その言語では正しい単語ですが、ほとんど使用されず、タイプミスである可能性のある単語に使用されます。
このフラグは接辞にも使用できます。基本単語は一般的だが、基本単語+接辞がまれな場合に使用します
spell-affix-flags。ただし、単語が別の方法(例:別の地域)で有効な単語として出現する場合、まれな単語としてマークされません。
接辞ファイルでは、BAD行を使用して不正単語に使用される接辞名を定義できます。例
これは、本来有効な単語を除外するために使用できます。たとえば、.dicファイル内の「the the」などです。
単語が不正単語としてマークされると、同じ単語が有効な単語として検出されても、そのマークは解除されません。
このフラグは接辞付きの単語にも適用されるため、関連する多くの単語を不正単語としてマークするために使用できます。
spell-NEEDAFFIX NEEDAFFIXフラグは、単語が接辞と共に使用される必要があることを示すために使用されます。単語自体は(空の接辞がない限り)有効な単語ではありません。例
.dicファイルに表示される単語を連結して作成された、より長い単語です。連結できる単語を指定するために、文字が使用されます。この文字は、単語の後の接辞のリストに配置されます。ここでは、この文字をフラグと呼びます。明らかに、これらのフラグは、使用されている接辞IDとは異なる必要があります。
spell-COMPOUNDFLAG Myspell互換の方法は、COMPOUNDFLAGで指定された1つのフラグを使用します。このフラグを持つすべての単語は、任意の順序で結合されます。つまり、どの単語が最初に来るかを制御できません。例
COMPOUNDFLAG c
spell-COMPOUNDRULE 複合語の作成方法を指定するより高度な方法は、複数のフラグを持つ複数の項目を使用することです。これはMyspell 3.0と互換性がありません。例から始めましょう。
COMPOUNDRULE c+
COMPOUNDRULE se
最初の行は、「c」フラグを持つ単語を任意の順序で連結できることを定義しています。2行目は、「s」フラグを持つ単語1つと「e」フラグを持つ単語1つで構成される複合語を定義しています。この辞書では
bork/c
onion/s
soup/e
これらの単語を作成できます:bork borkbork borkborkbork(など)onion soup onionsoup
COMPOUNDRULE項目は複数回出現する可能性があります。引数は1つ以上のグループで構成され、各グループは次のいずれかになります。1つのフラグ(例:c)、[]内の代替フラグ(例:[abc])、オプションで次のいずれかが続きます。* グループが0回以上出現する(例:sm*e)、+ グループが1回以上出現する(例:c+)、? グループが0回または1回出現する(例:x?)。
これは正規表現のパターン構文に似ていますが(同じではありません!)。必要な単語フラグのシーケンスを示すいくつかの例:COMPOUNDRULE x+ x xx xxx など。COMPOUNDRULE yz yz。COMPOUNDRULE x+z xz xxz xxxz など。COMPOUNDRULE yx+ yx yxx yxxx など。COMPOUNDRULE xy?z xz xyz
COMPOUNDRULE [abc]z az bz cz。COMPOUNDRULE [abc]+z az aaz abaz bz baz bcbz cz caz cbaz など。COMPOUNDRULE a[xyz]+ ax axx axyz ay ayx ayzz az azy azxy など。COMPOUNDRULE sm*e se sme smme smmme など。COMPOUNDRULE s[xyz]*e se sxe sxye sxyxe sye syze sze szye szyxe など。
具体的な例:2つの単語とハイフンで構成される複合語を許可する:.affファイル内
COMPOUNDRULE sde
NEEDAFFIX x
COMPOUNDWORDMAX 3
COMPOUNDMIN 1
.dicファイル内
start/s
end/e
-/xd
これにより、「start-end」という単語は許可されますが、「startend」は許可されません。
追加の暗黙のルールとして、追加のフラグがない場合、接頭辞が付いた単語は別の単語の後に複合することはできず、接尾辞が付いた単語は次の単語と複合することはできません。したがって、接辞は複合語の中央に配置できません。
spell-COMPOUNDPERMITFLAGで変更できます。
spell-NEEDCOMPOUND NEEDCOMPOUNDフラグは、単語が複合語の一部として使用される必要があることを示すために使用されます。単語自体は有効な単語ではありません。例
省略した場合、最小長はありません。もちろん、短い単語から複合フラグを省略するだけで済みますが、この機能はMyspellとの互換性のために存在します。
省略した場合、最大数はありません。すべての複合語に適用されます。
特定のフラグを持つ単語の制限を設定するには、COMPOUNDRULE内の項目が多数の単語を許可しないようにしてください。
SYLLABLE項目がない場合は、これは効果がありません。COMPOUNDSYLMAXがない場合、音節の数に制限はありません。
COMPOUNDWORDMAXとCOMPOUNDSYLMAXの両方が定義されている場合、複合語は、いずれかの基準を満たす場合(つまり、最大COMPOUNDWORDMAX個の単語で構成されているか、最大COMPOUNDSYLMAX個の音節が含まれている場合)に受け入れられます。
spell-COMPOUNDFORBIDFLAG COMPOUNDFORBIDFLAGは、接辞に使用できるフラグを指定します。これは、接辞付きの単語を複合語で使用できないことを意味します。例:接辞ファイル
COMPOUNDFLAG c
COMPOUNDFORBIDFLAG x
SFX a Y 2
SFX a 0 s .
SFX a 0 ize/x .
辞書
word/c
util/ac
これにより、「wordutil」と「wordutils」は許可されますが、「wordutilize」は許可されません。**注:** これは、延期された接頭辞ではまだ機能しません。
spell-COMPOUNDPERMITFLAG COMPOUNDPERMITFLAGは、接辞に使用できるフラグを指定します。これは、接辞付きの単語を、接辞が単語の中央に配置されるような方法で複合語で使用できることを意味します。このフラグがないと、許可されません。**注:** これは、延期された接頭辞ではまだ機能しません。
spell-COMPOUNDROOT COMPOUNDROOTフラグは、既に複合語である辞書の単語に使用されます。これは、複合規則を確認する際に2つの単語としてカウントされます。接辞に対しても使用でき、接辞を複合語としてカウントします。
これにより、最初の単語が「o」で終わり、2番目の単語が「e」で始まる場合の複合が禁止されます。
引数はプレーンテキストである必要があります。項目名にもかかわらず、パターンは実際にはサポートされていません。大文字と小文字は常に無視されます。
3つの引数とフラグを使用するHunspell機能はサポートされていません。
spell-NOCOMPOUNDSUGS この項目は、複合を使用して候補を作成することは良い考えではないことを示しています。複合が非常に短い単語または1文字の単語で使用される場合に使用します。例:数字を桁から作成する場合。このフラグがないと、候補の作成には、あらゆる種類の奇妙な複合語を試すのに多くの時間が費やされます。
spell-SYLLABLE SYLLABLE項目は、単語の音節数を数えるために使用される文字または文字列を定義します。例
SYLLABLE aáeéiíoóöõuúüûy/aa/au/ea/ee/ei/ie/oa/oe/oo/ou/uu/ui
最初のスラッシュの前にあるのは、繰り返したり混合したりしても1つの音節としてカウントされる文字のセットであり、このセットにない次の文字まで続きます。スラッシュの後に続くのは、1つの音節としてカウントされる文字列です。これらは、セットの文字を使用するよりも優先されます。例として、「ideeen」は「i」、「ee」、「e」によってカウントされる3つの音節を持っています。
小文字に変換された文字のみを含める必要があります。
タイ語などの一部の言語では、単語間にスペースがありません。これは、すべての単語が複合されているように見えます。これを指定するには、引数なしで接辞ファイルにNOBREAK項目を使用します。
NOBREAK
Vimは、単語の終わりと次の単語の開始位置を特定しようとします。スペルミスがある場合、これは完全に正しくない可能性があります。
spell-COMMON COMMON項目を使用して、一般的な単語を指定できます。これにより、短いファイルを編集する際の候補が向上します。例
COMMON the of to and a in is it you that he she was for on are
単語は空白で区切られ、行あたり最大25個までです。「:mkspell」コマンドで複数の地域が指定されている場合、すべての地域の一般的な単語が結合され、すべての地域で使用されます。
spell-NOSPLITSUGS この項目は、単語を分割して候補を作成することは良い考えではないことを示しています。単語分割候補は、類似の単語がほとんどない場合にのみ表示されます。
接辞ファイルでは、REP項目を使用して一般的な間違いを定義できます。これは、スペル候補を作成するために使用されます。項目は、「from」テキストと「to」置換を定義します。例
REP 4
REP f ph
REP ph f
REP k ch
REP ch k
最初の行は、続くREP行の数を指定します。Vimは数を無視しますが、(Myspellとの互換性のために)存在する必要があります。
単純な1文字の置換またはスワップを含めないでください。Vimはとにかくこれらを試みます。必要に応じて単語全体を含めることができますが、代わりに
'spellsuggest'の「file:」項目を使用することをお勧めします。
アンダースコアを使用してスペースを含めることができます。
接辞ファイルでは、MAP項目を使用して非常に似た文字を定義できます。これは主に、異なるアクセントを持つ文字に使用されます。これは、これらの文字が代用された候補を優先するために使用されます。例
最初の行は、続くMAP行の数を指定します。Vimは数を無視しますが、行は存在する必要があります。
各文字は、MAP項目の1つにのみ表示される必要があります。最初の文字がASCIIであるか、少なくともアクセントのない文字である方が、より効率的です。
接辞ファイルでサウンドフォールディングが指定されている場合、「:mkspell」は通常、.splファイルの横に.sugファイルを作成します。このファイルは、類似音の形式で候補をすばやく見つけるために使用されます。多くのメモリを消費するコスト(量は単語の数によって異なります。
:mkspellは完了時に推定値を表示します)。
.sugファイルの作成を回避するには、接辞ファイルにこの項目を使用します。
ユーザーは、使用しない場合は.sugファイルを省略できます。
接辞ファイルでは、SAL項目を使用して、使用する類似音メカニズムを定義できます。メイン項目は、「from」テキストと「to」置換を定義します。単純な例
SAL CIA X
SAL CH X
SAL C K
SAL K K
いくつかの特別な項目があります。
SAL followup true
SAL collapse_result true
SAL remove_accents true
"1" は "true" と同じ意味です。それ以外の値は "false" を意味します。
SALメカニズムは複雑で遅いです。より単純なメカニズムは、すべての文字を別の文字にマッピングし、似たような発音の文字を同じ文字にマッピングすることです。同時に、これは大文字小文字の折りたたみも行います。SAL項目と単純なサウンドフォールディングの両方を同時に使用することはできません。
2つの項目が必要です。1つはマッピングされる文字を指定するもので、もう1つはそれらがマッピングされる文字を指定するものです。両者は正確に同じ数の文字を持たなければなりません。例
SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
SOFOTO ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkes
この例では、すべての母音が同じ文字 'e' にマッピングされています。別の方法は、すべての母音を省略することです。'm' と 'n' のように、ほぼ同じ発音でしばしば混同される文字も、同じ文字にマッピングされます。これをやりすぎると、すべての単語が似て見えるようになるため、注意してください。
SOFOFROMに表示されない文字は省略されますが、すべての空白は1つのスペースに置き換えられます。SOFOFROM内の同じ文字のシーケンスは1つに置き換えられます。
これらの項目は、他のスペルチェッカーのアフィックスファイルに表示されます。Vimでは、これらは無視され、サポートされていません、または別の方法で定義されています。
BREAK (Hunspell)
spell-BREAKブレークポイントを定義します。正確な動作は不明です。サポートされていません。
CHECKSHARPS (Hunspell)
spell-CHECKSHARPS大文字の(ドイツ語)単語におけるSS文字のペアは大文字のシャープs(ß)になる場合があります。サポートされていません。
KEY (Hunspell)
spell-KEYキーボード上で近くに配置されている文字を定義します。より良い候補を提示するために使用されます。サポートされていません。
LANG (Hunspell)
spell-LANGこれは、言語固有の動作を指定します。これは実際には言語知識の一部をプログラムに移動するため、Vimではサポートされていません。各言語のプロパティは個別に指定する必要があります。
TRY (Myspell, Hunspell, その他)
spell-TRYVimはTRY項目を使用しません。無視されます。候補を作成するために、単語の実際の文字が使用されます。これははるかに効率的です。
WORDCHARS (Hunspell)
spell-WORDCHARS単語を認識するために使用されます。Vimには必要ありません。なぜなら、チェックの前に単語を分離する必要がないからです(ハッシュテーブルの代わりにトライを使用するため)。
Vimにスペルチェックを追加することになったとき、利用可能なスペルチェックライブラリとプログラムについて調査が行われました。残念ながら、その結果、さまざまな理由から、それらのいずれもVimのスペルチェックエンジンとして使用できるだけの十分な機能を提供していませんでした。
マルチバイトエンコーディングのサポートが不足しています。少なくともUTF-8をサポートする必要があります。そのため、同じファイルで複数の言語を使用できます。オンザフライの変換は常に可能とは限りません(iconvのサポートが必要です)。
プログラムとライブラリの場合:そのまま使用するには、Vimとは別にインストールする必要があります。これはほとんど不可能ではありませんが、欠点です。
パフォーマンス:いくつかのテストでは、構文の強調表示と同様に、スペルチェックをオンザフライ(再描画中)で実行できます。しかし、他のコードで使用されているメカニズムははるかに遅いです。たとえば、Myspellはハッシュテーブルを使用しています。ほとんどのスペルチェッカーで使用されているアフィックス圧縮も速度を低下させます。
aspellのような外部プログラムを使用するには、通信メカニズムを設定する必要があります。これは移植可能な方法で実行するのは複雑です(Unix専用であれば比較的簡単ですが、それは十分ではありません)。そして、パフォーマンスが問題になります(多くのプロセスの切り替えが伴います)。
"Etten-Leur"や"et al."などの単語以外の文字を含む単語のサポートが不足しているため、それらの部分をOKとマークする必要があり、信頼性が低下します。
地域または方言のサポートが不足しています。すべての英語の単語を受け入れ、カナダ以外の単語を異なる方法で強調表示するのが困難になります。
珍しい単語のサポートが不足しています。多くの単語は正しいのですが、ほとんど使用されないため、誤って使用されることが多い単語と見なされる可能性があります。
候補を作成する場合、速度はそれほど重要ではなく、別のプログラムまたはライブラリをインストールする必要があっても許容されます。しかし、単語リストはおそらく異なり、候補は間違った単語になる可能性があります。
候補を作成するには、2つの基本的なメカニズムがあります。1. 間違った単語を少し変更して、正しい単語との一致を確認します。または、正しい単語のリストを調べ、それらを少し変更して、間違った単語との一致を確認します。変更には、文字の削除、文字の挿入、2つの文字の入れ替えなどがあります。2. 間違った単語と正しい単語の両方にサウンドフォールディングを実行し、最初のメカニズムのようにいくつかの変更を加えて一致を見つけます。
最初の方法は、タイプミスを見つけるのに適しています。ハッシュテーブルを試用し、他のスペルチェッカーのソリューションを調べた結果、トライ(一種のツリー構造)がこれに最適であるという結論に至りました。メモリ使用量を削減し、妥当な変更を試すことができるためです。たとえば、文字を挿入する場合、正しい単語につながる文字のみを試す必要があります。他のメカニズム(ハッシュテーブルを使用するもの)では、単語内のすべての位置で可能なすべての文字を試す必要があります。また、ハッシュテーブルには、単語の境界を個別に識別する必要があるという要件がありますが、トライにはこの要件がありません。これにより、メカニズムがはるかにシンプルになります。
サウンドフォールディングは、単語の発音はわかっているが、スペルがわからない場合に役立ちます。たとえば、「dictionary」という単語は「daktonerie」と書く可能性があります。最初の方法で試す必要がある変更の数は非常に多く、その方法で正しい単語を見つけるのは困難です。サウンドフォールディング後、単語は「tktnr」と「tkxnry」になり、これらは2文字しか違いません。
発音の似た単語(類音語)で単語を検索するには、すべての発音類似単語のリストが必要です。最適な方法を見つけるために、いくつかの実験が行われました。代替案:1. 推測を検索する際に、その場で発音変換を行う。これは、適切な単語のトライ木を巡回し、各単語を発音変換し、間違った単語との違いを確認することを意味します。これはメモリ使用量において非常に効率的ですが、時間がかかります。高速なPCでは英語の場合数秒かかり、対話型使用には許容範囲内です。しかし、一部の言語(例:ドイツ語、カタロニア語)では10秒以上かかり、許容できないほど遅くなります。バッチ処理(自動修正)の場合、すべての言語で遅すぎます。2. 発音変換された単語のトライ木を使用し、発音変換なしの場合と同様に検索できるようにする。これには、各発音変換された単語に対して適切な単語のリストを記憶しておく必要があります。これにより、一致する単語を非常に高速に見つけることができますが、1〜10MB程度のかなり多くのメモリが必要です。一部の言語では、元の単語リストよりも多くなります。3. 2番目の代替案と同様ですが、接辞圧縮を使用してメモリ量を削減し、発音変換された基本単語のみを保存します。これがAspellが行っている方法です。欠点は、発音変換する前に間違った単語から接辞を取り除く必要があるため、単語の先頭と/または末尾のミスはメカニズムの失敗につながることです。また、間違った単語が正しい単語とかなり異なる場合、速度が低下します。
選択された方法は、2番目のメカニズムを使用し、別々のファイルを使用することです。これにより、十分なメモリを持つユーザーは非常に優れた候補を得ることができ、メモリが不足しているユーザーやスペルチェックのみで候補を必要としないユーザーは、それほど多くのメモリを使用しません。
単語頻度
候補をソートするには、どの単語が一般的であるかを知ることが役立ちます。理論的には、単語頻度を辞書の単語とともに保存できます。ただし、これには単語ごとにカウントを保存する必要があります。これは単語ツリーの圧縮を大幅に低下させます。また、すべての言語の単語頻度を維持することは困難な作業になります。また、テキストに既に含まれている単語を優先できると便利です。これにより、特定のテキストに表示される単語が候補として優先されます。
実装されたのは、表示中に確認された単語をカウントすることです。ハッシュテーブルを使用して、単語カウントをすばやく検索します。カウントは接辞ファイルのCOMMON項目にリストされている単語から初期化されるため、新しいファイルを開始する場合にも機能します。
これは理想的ではありません。Vimの実行時間が長くなるほど、カウントが高くなります。しかし、実際には、単語カウントを使用しない場合よりも顕著な改善が見られます。