2009-06-29 15 views
6

'ruby'という文字列のすべての行を 'myruby'ではない場合、これは私が行うことです。vimの正規表現の説明

:g/\<ruby\>/ 

私の質問は、ここでの記号の意味よりも小さく、より大きなものは何ですか?私が使った唯一の正規表現は、Rubyでプログラミングするときだけです。

同様に、私は三つの連続空白行を検索したい場合は、これは私が私の質問は、私は(中括弧開く)最初の中括弧をエスケープするが、第2カーリーをエスケープするわけではない理由です

/^\n\{3} 

を何をするのかでありますブレース(中括弧)?

答えて

13

\<\>単語の境界を意味します。 Perl、grep、less(3 OTOHの名前にする)では\bを使っているので、Rubyでも同じだと思います。

あなたの第二の質問については、エスケープは、式全体{3}のために必要とされています。あなたはそれぞれの中かっこをエスケープしているのではなく、全体を一緒にエスケープしています。

this questionを参照してください。あなたの最初の正規表現については

0

、あなたも行うことができます:

:g/[^\ ]ruby\/

これはスペースがあなたのルビーキーワードの前と後があったことを確認します。

+3

しかし、それは 'ruby'と行頭または行末で一致しません。 –

+0

@Nathan良い点... – samoz

+0

も「美しいルビー。」、やは常に魔法のモードを持っている... –

16

regexesでのバックスラッシュエスケープのVimの規則は一貫していません。 \{...}の開きブレースをエスケープする必要がありますが、[...]にはエスケープする必要はありません。キャプチャグループは\(...\)です(開いたり閉じたりするエスケープ)。他にも矛盾があります。

ありがたいことに、Vimでは、magicの設定でregex-re-rexベースでこの動作を変更することができます。正規表現の先頭に\vを置くと、エスケープルールはより一貫しています。数字、文字、およびアンダースコア以外はすべて「魔法」ですので、それら以外のリテラル文字を挿入しない限り、バックスラッシュは必要ありません。

あなたの最初の例では、:g/\v<ruby>/になり、2番目の例では、/\v^\n{3}になります。詳細については、:h /magicおよび:h /\vを参照してください。

+2

あなたができる「セットマジック」Nあなたのvimrc「はこのルビー、その後を盗みました」。 ところで、私は '魔法'の表記は\ mで始まり、\ vでは始まらないと考えています。 \ vは 'no magic'を意味します – Oli

+0

いいえ、実際\ vは「非常に魔法」を意味します。つまり、 '0' - '9'、 'a' - 'z'、 'A' - 'Z'、 '_'を除くすべてのASCII文字はエスケープする必要がないように特殊な意味を持ちます。 – binOr