2016-03-10 6 views
6

特定の単語の出現をファイルから検索し、この単語を置き換える入力をユーザーに求めることは可能ですか?同じことをもう一度やり直すか、新しい置換文字を入力するか、履歴から何かを使用するか、すべての単語が置き換えられるか、ユーザーが終了するまで。私は置き換えたくない言葉を飛ばすという選択肢を持っていたいと思います。VIMすべての発生を見つけ、入力で置き換えます。

だけ

:%s/value_one/value_two/gc 

を使用すると、私は心を持っているそれぞれの異なる交換のために、このコマンドを実行する必要が意味するであろう。これが可能か、このワークフローに何か問題がありますか?変数を1つだけ変更する必要がある定型コードを貼り付けるときにこれを使用します。

答えて

12

あなたは探しています:

%s/value_one/\=input('replace <'.submatch(0).'> with: ')/gc 

:h :s\=:h input()。必要に応じて、入力のデフォルト値を指定することができます。

+0

魅力的なように働いた。まさに私が探していたものです! – ExcellentAverage

+0

私は間違っているかもしれませんが、%s/value_one/\ = input( 'replace <'。submatch(0)。 '>:')/ gcであるべきではありません。 value_oneの後にダブルスラッシュを入れると、 'E488:Trailing characters'が表示されます。 – ExcellentAverage

+0

確かにそうです。あなたが正しい!一定! –

3

これは完璧ではないかもしれませんが、私が使ったものを共有するだけです。

これは:set hlがすでに設定されていることを前提としています。 *を押すと、カーソル下の単語が検索されます。あなたの言葉にカーソルを持って来なさい。しかし、私は通常*の代わりにgdを使用します。

その後、交換用の単語にciwを使用してそれを変更します。その後、Esc。今度は次の出現にnで行くことができます。この必要性は、その後.を押すと、同じ単語に変更する場合

ことを行います。 それ以外の場合は、ciwを再度使用して新しい値に変更できます。

あなただけの次の出現にかかるnを押してスキップし、次の発生を変更する予定がない場合。

これは少しマニュアルだが、これは私の編集を超える保守的に制御することができます。

+0

お返事ありがとうございます。私はLuc Hermitteからの答えを好む。なぜなら、それは私の意見ではより優雅だからだ。しかし、努力をありがとう – ExcellentAverage

+0

絶対に、問題ありません。私も – dlmeetei

+1

'gn'モーションを使うこともできます。例えば「cgn」、「。」を繰り返す(「いいえ」!)。 '詳細なヘルプを参照してください:時間gn'このVimcastsエピソード:(http://vimcasts.org/episodes/operating-on-search-matches-using-gn/) –

関連する問題