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

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

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

dd.

行を2回削除します。
しかし、次のように入力すると

5j.

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

答え1

これは通常の 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

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

答え2

vim残念ながら、これはできません。できる最善のことは、レプモカウントを持つ移動コマンドを繰り返すプラグイン。

答え3

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

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

答え4

変更したい行を選択し、最後の通常のドットコマンドを実行します。

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'

関連情報