Vimでは、私がそうするとき:
:%s/foo/bar/g
ドキュメント全体で出現するすべての「foo」を「bar」に置き換えます。完了すると、カーソルは「foo」が「bar」に置き換えられた最後の位置に移動します。
:%s/foo/bar/g
このコマンドを発行する前に、カーソルを元の位置から離れずに実行するにはどうすればよいですか?
ファイルに設定できるオプションはあり.vimrc
ますか?
コマンドを実行する:substitute
と、置換が実行される前に、カーソルの位置がジャンプリストに保存されます。最新のジャンプの前の位置に戻るには、
``
または''
ノーマルモードコマンドを使用できます。前者は正確に保存された位置にジャンプします。後者は、格納された位置が属する行の最初の非空白文字にジャンプします。
コマンドを発行することにより、置換コマンドを呼び出すことと、後でカーソルを一度に戻すことの両方が可能です。
:%s/pat/str/g|norm!``
または、コマンドを使用して、正確な位置ではなく、単に含まれている行にジャンプするだけで十分な場合
:%s/pat/str/g|''
Exコマンドの範囲構文で許可されているアドレス は、ノーマルモードコマンド がジャンプするのと同じ行を参照しているため、後者のコマンドで前に付ける必要はありません(を
''
参照)。どちらも 疑似マークの内容を調べるだけです。norm!
''
''
:help :range
'
前の場所に戻るには、置換後にCtrl+と入力するだけです。O
それは古いですが、この質問に出くわした人のために、何も置き換えられなくても正しく機能するので、私の解決策を共有したいと思いました:
:exe 'norm m`' | %s/pattern/substitution/eg | norm g``
exe
norm
バーを引数として扱うため、が必要です。