4

PDP11 / 40アセンブル言語では、ドットで終わる数字は10進数として解釈されます。次のパターンを使用していますが、その表記と一致しません。たとえば、次のようになります8.

syn match asmpdp11DecNumber /\<[0-9]\+\.\>/

取り替える\.Dパターンは8D問題なくマッチします。誰かが私の「ドットで終わる」パターンの何が問題になっているのか教えてもらえますか?ありがとう。

4

3 に答える 3

2

正規表現の構文は問題ありませんが(\dの代わりに使用できます[0-9])、'iskeyword'値にピリオドが含まれていないため、その後の単語の終わり( )と.一致させることはできません。\>

カスタムファイルタイプの構文を記述しているようです。1つのオプションは

:setlocal filetype+=.

対応する~/.vim/ftplugin/asmpdp11.vimファイルタイププラグインで。ピリオド文字が構文でキーワード文字と見なされる場合にこれを行います。

それ以外の場合は、を削除し\>て正規表現を一致させます。ピリオドの後に空白以外の文字がないことを確認したい場合は、次のように、一致後にその条件をアサートできます。

:syn match asmpdp11DecNumber /\<\d\+\.\S\@!/
于 2013-02-28T08:31:40.523 に答える
1

単語はvimによって次のように定義されていることに注意してください。

単語は、一連の文字、数字、アンダースコア、または空白で区切られた一連の非空白文字(スペース、タブ、)で構成されます。これは、「iskeyword」オプションで変更できます。空の行も単語と見なされます。

したがって、空白が数字の後に続く場合、パターンは正常に機能します。をスキップすることをお勧めし\>ます。

于 2013-02-28T08:19:41.810 に答える
1

問題は、単語の終わりの境界マーカーだと思います。これを試して:

syn match asmpdp11DecNumber /\<[0-9]\+\./

\>単語の終わりの境界を削除したことに注意してください。それが何のためにあったのかはわかりませんが、削除すると機能するようです。A.は単語の一部とは見なされないため、バージョンは失敗します。

于 2013-02-28T08:23:31.653 に答える