2011-10-20 42 views
33

VIMで検索したいフレーズがあります。見つかったら、このフレーズを削除します。すべてのインスタンス(n)に移動し、1つずつ一致を削除する最も簡単な方法は何ですか(私はすべてを削除したくありません)。VIMの一致検索パターンの削除

注:特定の文字数または複数の単語を削除できることはわかっていますが、検索の「一致」を削除する必要があります。これは可能ですか?

答えて

51

http://vim.wikia.com/wiki/Search_and_replace

この検索を試してみて、置き換える:

:%sの/ fooの/バー/ GC

変更]バー」にそれぞれ 'foo' ではなく、最初の確認を求めます。

テキストを変更または保持するには、yまたはnを押します。

+21

%s/foo // gc – Sedrik

20

私は考えることができる3つの方法があります。

を説明するのが最も簡単な方法は、

:%s/phrase to delete//gc 

ですが、あなたはまた、(個人的に私はより頻繁にこの第二のいずれかを使用)通常の検索を行うことができますフレーズを削除する場合

/phrase to delete 

Vimは、次の語句の先頭に移動します。

挿入モード(hit i)に移動し、Deleteキーを使用してフレーズを削除します。

すべてのフレーズを削除したら、エスケープします。

これを一度実行したので、nを押すと次のフレーズに移動してから、ドット/ピリオド "を打つことができます。実行した削除操作を実行するキー

完了するまで、nとドットを続けて押し続けます。

最後に、あなたが(第二の方法のように)削除するには、フレーズの検索を行うことができますが、この時、代わりに挿入モードに入るのは、

あなたは

を削除したい文字の数をカウント

(数字キー付き)でその番号を入力してxキーをヒット - 文字が

をnとを続行し、第二の方法のようにドット削除されるはずです。

PS - あなたがまだわからない場合は、大文字nを使用して、検索マッチで後方に移動することができます。

+0

モードを挿入し、削除してからエスケープするのではなく、挿入モードにならずに約4回のキーストロークを保存することができます'x'はカーソルの下の文字を削除します。 – chown

+3

@chownはい、しかしxカウントを1つのコマンドとして使用するので、ドットを打つだけでフレーズ全体を削除したい場合は、挿入モードに入り、文字数を削除する必要があります。しかし、削除する文字の数を数えることができ、その数字を入力してからx - 私はそれを私の答えに追加します。 – ghbarratt

+3

削除にd(削除)キーを使用してみませんか?フレーズは常に同じであるので、dの後にモーションキーを使用して削除する方法(dwは単語を削除する、dtは次の出現まですべてを削除する)をどのように削除するかを決めるので、それはまだ1つのコマンドとしてカウントされ、処理されます。 – Sedrik

8

簡単な解決策は 確認を:substituteコマンドを使用することです:

:%s///gc 

このコマンドは、空の文字列と( パターンが省略された場合に使用される)最後の検索パターンの出現を置き換えます。

さらに、 をカーソルの下の最後の検索パターンに一致させるためにテキストオブジェクト選択マッピングを定義することができます。 次の2つのマッピングは、ビジュアルまたはオペレーターペンディングモードで に使用することで、最後の検索 パターンの前の一致の開始点から最後までのテキストを選択できます。 1はdi/でカーソル下のマッチを削除することができ、これらのマッピングを使用して

vnoremap <silent> i/ :<c-u>call SelectMatch()<cr> 
onoremap <silent> i/ :call SelectMatch()<cr> 
function! SelectMatch() 
    if search(@/, 'bcW') 
     norm! v 
     call search(@/, 'ceW') 
    else 
     norm! gv 
    endif 
endfunction 

は、 は、他の演算子を適用するか、視覚的にvi/でそれを選択します。

0

最良の方法は、使用することが考えられます:

:%s/phrase//gc 

cは各削除の前に確認を求められます。 gは、同じ行で複数の置換を行うことができます。

/phraseで検索し、次の一致をgnで選択し、dで削除することもできます。