はVIM

2009-04-28 7 views
0

に間違ったマーカー折りたたみの修正I誤ってやった私の.vimrcに折りたたみマーカー:私はフォーマットを切り替える必要がありはVIM

{{{8 #CS 
something.. 
}}}8 
{{{9 #Math 
... 
}}}9 
... many more! 

に "#SOMETHING {{{NUMBER" のように:

#CS {{{8 
something.. 
}}}8 
#Math {{{9 
... 
}}}9 
... many more! 

次のコードで何が問題になっています:

:%s$/({{{\d/) /(#[:alpha:]/)$\2 \1$g 

[ソリューション]

%s$\({{{\d\) \(#[[:alnum:]]*\)$\2 \1$g 

答えて

1

あなたは括弧をエスケープするのを忘れ、およびPOSIX文字クラスは、文字クラス[[:alpha:]]内のみ有効です。あなたの例のテキストは、任意のスラッシュが含まれていないことが

:%s$/\({{{\d/\) /\(#[[:alpha:]]/\)$\2 \1$g 

注意、 - これは何ですかあなたのサンプルテキストは実際には好きですか?あなたが看板を必要としない限り、

上記の正規表現は、sの後の記号は重要ではありません。この

#A/ {{{8/ 
+0

ありがとう。私はこの問題を解決しました。明らかに、私は初期の正規表現ではあまりにも慎重だった。エラーは "私の解決策"で修正されています。あなたの正規表現は数分前に私が投稿に書いたものと非常によく似ています。 –

+0

POSIX文字クラスを精緻化してくれてありがとう。 –

1

:%s/{{{\(\d\) \(.*\)/\2 {{{\1/g

それは動作しますが、あなたは秒後に$を得ない理由あなたの正規表現に私は理解していません。

+0

するために、この

/{{{8/ /#A/ 

を変更します。たとえば、私は通常は#を使用しますが、マッチに#-signがあったため、他のものを使用しなければなりませんでした。あなたに合ったものを選んでください。 –

+0

アドバイス:。*を使用すると、混乱したバックトラッキングが発生する可能性があります。私の場合は、バックトラッキングを避けるために非常に正確にする必要がありました。 –

+0

vimは ':s'に任意の区切り文字を使うことができるので、':s $ a $ b $ g'は ':s/a/b/g'と同じです。長い話を簡単に説明すると、パターンや置換テキストにスラッシュが現れたときにスラッシュをエスケープしないようにすることができます。 – rampion