Vimで、移動を含む最後の通常モードコマンドを繰り返します。


25

Vimでは.、を使用して、最後の通常モードコマンドを繰り返すことができます。例えば:

dd.

行を2回削除します。
しかし、私が入力した場合

5j.

カーソルは10行下に移動しません。最後の通常モードのコマンド、特に移動を繰り返すにはどうすればよいですか?

回答:


14

vim残念ながらこれを行いません。最善の方法は、repmo.vimプラグインをインストールすることです。これは、カウントを持つ移動コマンドを繰り返します。


11

それはバニラvimでも実行可能ですが、適用可能性は使用事例に依存します。繰り返し可能にするためにキーストロークを数回必要とするだけなので、それを繰り返す必要がある頻度。


オプション1:コマンドモード操作に変換する

例として5行下に移動すると、次のことができます。

  1. Enter :norm 5jを押すと、カーソルが5行下に移動します
  2. @:動きを繰り返すために使用

:norm 通常を表し、後続の文字列は通常モードでのキーストロークとみなされます


オプション2:マクロを使用する

  1. qa(マクロをレジスタaに保存します。のようqbに独自のレジスタを選択できますqc
  2. 5j
  3. q (記録マクロの終了)
  4. @a録音操作を繰り返す(置き換えa、あなたが選んだレジスタ名で例えば。@b@c

マクロは設定するためにより多くの霊的な力を必要としますが、最新の操作によって上書きされることなく、異なるレジスタに複数の操作を保存できるという意味で、より再現可能です。


7

実際には、最後の通常モードコマンドではなく.、最後の変更を繰り返します。ポールが言ったように、モーションを繰り返すことができるプラグインが必要になります。

:help .」を参照してください。


4

で変更を繰り返すことができます.;コマンドで移動を繰り返すことができます。このコマンドは新しいようで、他の回答で言及されているrepmo.vimスクリプトと同様のことを行います。

たとえば、次の2番目に移動するにはc、を押し2fcます。その後、もう一度実行するには、を入力し;ます。


11
;新しくはありません。これは標準のviコマンドです。Viは、最後のf/ F/ t/ Tモーションのタイプとターゲット文字(数値引数ではない)を記憶し、;それを繰り返します。ただし、他のモーションは繰り返されません。
火砕物

これは私がやろうとしていたことを成し遂げました!ありがとうございました。@pyrocrastyに説明してくれてありがとう!
ポール

0

変更する行を選択して、最後の通常のドットコマンドを実行できます。

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.