2009-08-13 5 views
2

Vimを使用して、preVARIABLETEXTpostVARIABLETEXTと置き換えることができます。その理由は、prepostがファイル内の別の場所に存在し、VARIABLETEXTが変更される可能性があるためです。VimはpreVARIABLETEXTpostをVARIABLETEXTに置き換えますか?

ような何か:

:%sの/ preGRABTEXTpost/GRABTEXT/gで

基本的に私はそれが単一の行にそれらの間のいくつかのテキストに存在する場合prepostを除去しようとしています1行に複数回存在する可能性がありますが、私はちょうど一時変数のようなものを作る方法を知らない。 。 。助けて?御時間ありがとうございます。

答えて

2
:%s/\v<pre(.{-1,})post>/\1/g 

入力に応じて、動作する可能性があります。私にとって、それは変更:

 
preAApost preBBpost 
preCCpost preDDpost 
preEEpost 
prepost 

た:

 
AA BB 
CC DD 
EE 
prepost 
0

.正規表現演算子は「何でも」を意味します。 +は「少なくとも1回、しかしおそらくそれ以上」を意味します。したがって:

?演算子を使用して

それを修正するには、我々はそれが怠惰作る

preGRABTEXTpostMORETEXTwibbleEVENMORETEXTpost:

:%s/pre(.+)post/\1/g 

これは、残念ながら、一つのグループとしてこれを一致します

:%s/pre(.+?)post/\1/g 

括弧はvその部分をグループとして選択して番号を付けます。グループが1つしかないので、番号は1です。交換用に\1を使用して、使用することを示します。これはそれを行う必要があります。

+0

VIMでは、怠惰な '+'は '+?'のようにはなりませんが、 '\ { - 1、\}'のように – Tomalak

+0

Damnit、忘れました。念押し有難う。 –

-1

編集: :(。{ - })%S /プリポスト/ \ 1/gで

トリック

を行います
+1

いいえ、そうではありません。 "1行に複数"の場合は失敗します。 – Tomalak

+0

:%s /前\\(。\ { - } \\)投稿/ \ 1/g – Lliane

0

特定の変数に対してこれを実行する場合は、カーソルの下にある変数を指定して、コマンドをマップできます。例えば:

:map mm eb"aywo<esc>^Di:%s/pre<ESC>"apapost/<ESC>"apa/g<ESC>"[email protected] 

は、事前と事後に囲まれて、あなたのカーソルの下のテキストを検索するためのキーの組み合わせ「ミリメートル」をマップします。前後のテキストの間にいくつかの変数があり、特定の変数を取り除きたい場合に役立ちます。

関連する問題