24

Vimでは、私がそうするとき:

:%s/foo/bar/g

ドキュメント全体で出現するすべての「foo」を「bar」に置き換えます。完了すると、カーソルは「foo」が「bar」に置き換えられた最後の位置に移動します。

:%s/foo/bar/gこのコマンドを発行する前に、カーソルを元の位置から離れずに実行するにはどうすればよいですか?

ファイルに設定できるオプションはあり.vimrcますか?

4

3 に答える 3

34

コマンドを実行する:substituteと、置換が実行される前に、カーソルの位置がジャンプリストに保存されます。最新のジャンプの前の位置に戻るには、 ``または''ノーマルモードコマンドを使用できます。前者は正確に保存された位置にジャンプします。後者は、格納された位置が属する行の最初の非空白文字にジャンプします。

コマンドを発行することにより、置換コマンドを呼び出すことと、後でカーソルを一度に戻すことの両方が可能です。

:%s/pat/str/g|norm!``

または、コマンドを使用して、正確な位置ではなく、単に含まれている行にジャンプするだけで十分な場合

:%s/pat/str/g|''

Exコマンドの範囲構文で許可されているアドレス は、ノーマルモードコマンド がジャンプするのと同じ行を参照しているため、後者のコマンドで前に付ける必要はありません(を ''参照)。どちらも 疑似マークの内容を調べるだけです。norm!'''':help :range'

于 2012-05-06T08:27:29.800 に答える
27

前の場所に戻るには、置換後にCtrl+と入力するだけです。O

于 2012-05-06T08:49:38.080 に答える
0

それは古いですが、この質問に出くわした人のために、何も置き換えられなくても正しく機能するので、私の解決策を共有したいと思いました:

:exe 'norm m`' | %s/pattern/substitution/eg | norm g``

exenormバーを引数として扱うため、が必要です。

于 2021-09-06T08:19:54.717 に答える