PDP11 / 40アセンブル言語では、ドットで終わる数字は10進数として解釈されます。次のパターンを使用していますが、その表記と一致しません。たとえば、次のようになります8.
。
syn match asmpdp11DecNumber /\<[0-9]\+\.\>/
取り替える\.
とD
パターンは8D
問題なくマッチします。誰かが私の「ドットで終わる」パターンの何が問題になっているのか教えてもらえますか?ありがとう。
PDP11 / 40アセンブル言語では、ドットで終わる数字は10進数として解釈されます。次のパターンを使用していますが、その表記と一致しません。たとえば、次のようになります8.
。
syn match asmpdp11DecNumber /\<[0-9]\+\.\>/
取り替える\.
とD
パターンは8D
問題なくマッチします。誰かが私の「ドットで終わる」パターンの何が問題になっているのか教えてもらえますか?ありがとう。
正規表現の構文は問題ありませんが(\d
の代わりに使用できます[0-9]
)、'iskeyword'
値にピリオドが含まれていないため、その後の単語の終わり( )と.
一致させることはできません。\>
カスタムファイルタイプの構文を記述しているようです。1つのオプションは
:setlocal filetype+=.
対応する~/.vim/ftplugin/asmpdp11.vim
ファイルタイププラグインで。ピリオド文字が構文でキーワード文字と見なされる場合にこれを行います。
それ以外の場合は、を削除し\>
て正規表現を一致させます。ピリオドの後に空白以外の文字がないことを確認したい場合は、次のように、一致後にその条件をアサートできます。
:syn match asmpdp11DecNumber /\<\d\+\.\S\@!/
単語はvimによって次のように定義されていることに注意してください。
単語は、一連の文字、数字、アンダースコア、または空白で区切られた一連の非空白文字(スペース、タブ、)で構成されます。これは、「iskeyword」オプションで変更できます。空の行も単語と見なされます。
したがって、空白が数字の後に続く場合、パターンは正常に機能します。をスキップすることをお勧めし\>
ます。
問題は、単語の終わりの境界マーカーだと思います。これを試して:
syn match asmpdp11DecNumber /\<[0-9]\+\./
\>
単語の終わりの境界を削除したことに注意してください。それが何のためにあったのかはわかりませんが、削除すると機能するようです。A.
は単語の一部とは見なされないため、バージョンは失敗します。