大文字で終わる単語と特定の文字を一致させる方法は?


9

lblSERINOd文のような言葉があります。単語は空白で区切られます。

dこのような単語の最後のをに置き換えたいと思いますu。したがって、たとえば次のようにlblSERINOdなりますlblSERINOu

私は試しましたs/.*\ud /u /gが、Vimは見つけられないと言っています.*\ud

ここの問題は何ですか?

回答:


10

これを行う1つの方法は次のとおりです。

:%s/\u\zsd\>/u/g

当初、私は新しいVimの正規表現エンジンは、(「より速く、限定」として宣伝されている)理解できないことが想定\u:substitute、これはそうではありません。私はむしろ、今OPを使用することを忘れてしまったことを考える%と、単純に間違ったラインで検索しました。これはエラーメッセージを説明しますが、もちろん「原因」として確認する必要があります。


2
「re」エンジンのことについて確信がありますか?これがどのように違いを生むのかわかりません。
Christian Brabandt

いいえ、まったくわかりません...動作しなかった簡単なテストを行った後pattern、ヘルプファイルをもう一度読んで、新しいエンジンが古いエンジンよりも制限されていることが原因だと考えました。 。私の最初のテストにはかなり/おそらく欠陥がありました
VanLaser

5

Vimの'magic'オプションをデフォルトからに変更したようです'nomagic'。これは次のコマンドで確認できます

:verbose set magic?

で文書化されたよう:ヘルプ/魔法'nomagic'原因となる.正規表現では、リテラルのドットの代わりに、「任意の文字に一致する」という意味メタ文字として扱われます。

このオプションをデフォルト値のままにしておくことを強くお勧めします。これは、実際には存在しないはずのいくつかのオプションの1つであり、プラグインで微妙な問題を引き起こす可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.