2013-11-15 10 views
172

ファイル全体の文字列を置換するには:%s/<search_string>/<replace_string>/g、現在の行には:s/<search_string>/<replace_string>/を置き換えることができます。複数行のvimの文字列を検索して置換する

vimの選択行の単語を選択して置き換えるにはどうすればよいですか?

例:6-1014-18のテキストを置き換えますが、11-13ではなくテキストを置き換えます。

+1

も参照してください[vimは一度に複数の非順次行を選択/編集します](http://stackoverflow.com/q/16439297)。 – glts

+0

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

答えて

140

:&&コマンドは、同じフラグを持つ最後の置換を繰り返します。あなたはそれに追加の範囲(複数可)を供給(とあなたが好きなだけを連結)することができます

:6,10s/<search_string>/<replace_string>/g | 14,18&& 

あなたは多くの範囲を持っている場合しかし、私はむしろ、ループを使用したい:

:for range in split('6,10 14,18')| exe range 's/<search_string>/<replace_string>/g' | endfor 
サイドノートとして
+32

+1なぜ私も気にしない... –

+1

ありがとう。将来のユーザーのための注意 - ':6,10s///g | :14,18 && | :20,23 && | :28,31 && 'も動作しますが、forループは覚えやすく実行しやすくします。 –

+2

あなたがそれを好きでうれしい!後続のコマンドの ':'はオプションで、btwなので、より多くのキーストロークを保存することができます。 –

26

あなたが調整する必要があり、すべてがそう代わりにすべてを入力するので、私は最後のコマンドを呼び出すだけ編集します範囲である2見つける/置き換えるシーケンス

:6,10s/<search_string>/<replace_string>/g 
    :14,18s/<search_string>/<replace_string>/g 

二回目でそれを行うことができます範囲

151

すべて置換:

:%s/foo/bar/g 

は、(すべての行で) 'foo' での各発生を探し、 'バー' と交換してください。

:6,10s/foo/bar/g 

変更行を含め10の6行目からすべての行のための 'バー' にそれぞれ 'FOO':特定の行については

+0

14-18行はどうですか? – Bernhard

+0

同じコマンドをもう一度使用する必要があります。 Vimは@ Lievenによって正しく言ったように覚えています。ありがとう。 –

+0

/gの目的は何ですか?申し訳ありませんが、私はLinuxの初心者です –

34

、代わりに、行番号を入力だけで検索したい行を強調表示するので/ビジュアルモードのいずれかで置き換えます。

  • VISUALモード(V
  • VISUAL BLOCKモード(はCtrl + V
  • VISUAL LINEモード(Shiftキー + V、あなたのケースで最高の作品)

置き換える線を選択すると、tyあなたのコマンドをPE:

:s/<search_string>/<replace_string>/g 

あなたは範囲'<,'>があなたのために自動的に挿入されることに注意しましょう:

ここ '<
:'<,'>s/<search_string>/<replace_string>/g 

は、単には、最初の行を強調意味し、'>最後の強調表示された行を意味し、VISUALのいずれかのモードで行われ、最後のハイライトの開始と終了に'<'>ポイント:動作がNORMALモードで予期しないかもしれないと

注意。代わりに、NORMALモードでは、特別な行番号.を使用することができます。これは単に現在の行を意味します。したがって、あなただけのこのような現在の行に置き換える/見つけることができます。注意すべき

:.s/<search_string>/<replace_string>/g 

もう一つは、範囲と見つける/置き換えるコマンドの間に第二:を挿入すると、他の言葉で、問題はありませんということです、これらのコマンドがまだ動作します:あなたは、いくつかの他の情報と上記を置き換える場合

:'<,'>:s/<search_string>/<replace_string>/g 
:.:s/<search_string>/<replace_string>/g 
+0

>例:行6-10,14-18のテキストを置き換えますが、11-13のテキストは置き換えません。 - あなたの返信はこの非常に質問に答えていませんか? – poige

-3
/sys/sim/source/gm/kg/jl/ls/owow/lsal 
/sys/sim/source/gm/kg/jl/ls/owow/lsal 
/sys/sim/source/gm/kg/jl/ls/owow/lsal 
/sys/sim/source/gm/kg/jl/ls/owow/lsal 
/sys/sim/source/gm/kg/jl/ls/owow/lsal 
/sys/sim/source/gm/kg/jl/ls/owow/lsal 
/sys/sim/source/gm/kg/jl/ls/owow/lsal 
/sys/sim/source/gm/kg/jl/ls/owow/lsal 

があるとします。この中

COMMAND(:%s/\/sys\/sim\/source\/gm\/kg\/jl\/ls\/owow\/lsal/sys.pkg.mpu.umc.kdk./g)

上記(sys.pkg.mpu.umc.kdk.)に置き換えられますされます。

+0

これは実際に質問に答えているのか分かりません。質問をする人は、入力を修正するために '%s'をどのように使うべきかを既に知っていますが、それを"半グローバルに "行う方法を知りたがっています(つまり、彼の指定は6-10行と14-18行です。 11-13行目)。 –

+1

また、「COMMAND」とは何ですか?そしてあなたは[爪楊枝症候群を抱えて]苦しんでいます(https://en.wikipedia.org/wiki/Leaning_toothpick_syndrome)。 – Carpetsmoker

+0

そのシンドロームを治すために、デフォルトの '/'の代わりに別の文字を区切り文字として使うことができます。 '%s/sys/sim/source/gm/kg/jl/ls/owow/lsal_sys.pkg.mpu.umc.kdk_g' – MortezaE

9

VI検索と置換コマンド例

私たちはあなたが「FOO」と呼ばれる単語を見つけると「バー」と交換したいとしましょう。

最初のヒットに[Esc]キー

タイプ:%sの/ fooの/バーに続いて(コロン)/とヒット[Enter]キーを。 :%s/foo/bar/

+4

あなたの'%s///g'コマンドは、ファイル全体の中のすべてのものを置き換えます。正確に質問への答えではありませんが、それにもかかわらず役に立ちます:) – tanius

関連する問題