web-dev-qa-db-ja.com

Vimで最後のn回の変更を繰り返すにはどうすればよいですか?

.最後の変更を繰り返します。 2.最後の変更を2回繰り返します。

しかし、最後の変更の前に変更を繰り返したいと想像してください。 Vimでそれを行うにはどうすればよいですか?

43
Sofia

できるとは思わないでください。:help .を参照してください。ただし、編集用のマクロを記録することはできます。{0-9a-zA-Z"}(大文字で追加)から選択できるレジスタがたくさんあります。次に、例えばを使用します。編集1の場合は@u、編集2の場合は@tなど。

ベストオブVIMヒント

" Recording (BEST TIP of ALL)
qq  # record to q
your complex series of commands
q   # end recording
@q to execute
@@ to Repeat
5@@ to Repeat 5 times
qQ@qq                             : Make an existing recording q recursive *N*
" editing a register/recording
"qp                               :display contents of register q (normal mode)
<ctrl-R>q                         :display contents of register q (insert mode)
" you can now see recording contents, edit as required
"qdd                              :put changed contacts back into q
@q                                :execute recording/register q

繰り返すためのその他のヒントについては、これらをご覧ください。

:&     last substitute
:%&    last substitute every line
:%&gic last substitute every line confirm
g%     normal mode repeat last substitute
g&     last substitute on all lines
@@     last recording
@:     last command-mode command
:!!    last :! command
:~     last substitute
:help repeating
35
Fredrik Pihl

この正確な要件に対処するために、 RepeatLast.vimプラグイン を作成しました。これは、最後の5つの変更(移動を含む)を繰り返すための5\.キーバインディングと、最後の2つのアクションを削除/忘れるための2\Dを提供します。

マクロ記録を常に有効にすることで機能しますが、これはすべての人にとって望ましいとは限りません。しかし、それを受け入れることができれば、99%のユースケースで機能します。

最新バージョン: https://github.com/joeytwiddle/RepeatLast.vim (フィードバックしてください!)

警告:

出力の最初の行が「記録中」のメッセージによって隠されないように、:set ch=2してください。

意図したとおりに機能しない場合の1%は、通常、次の理由によるものです。

  1. 速く繰り返されるキーストロークを失うことなく、CursorHoldイベントをゆっくりとトリガーすることの難しさ
  2. ユーザーがプロンプトに応答しているときに[スペース]キーと[Enter]キーを録音するのは望ましくありません。

q筋肉をトレーニングして、マクロを先制的に記録することは、長期的にはより良いアプローチかもしれません。 ;-)

6
joeytwiddle

Fredrick Philの回答に基づいて、次の例を示します。

マクロの記録

以下に、引用符で囲まれた文字列を含むすべてを削除し、レジスタdに格納するマクロを記録する方法を示します。文字列を削除するコマンドはda"。したがって、このコマンドをマクロレジスタdに格納するには、次のようにするだけです。

qdda"q

Qで始まりqで終わることに注意してください。 2番目の文字はレジスタです。この場合は削除用のdです。しかし、私たちはそれに任意の文字や数字を与えることができたでしょう。残りの文字da"は私たちのコマンドです。

マクロを使用

マクロが記録されたので、@記号の後にレジスタを使用してマクロを呼び出すことができます。

@d

最後のマクロコマンドを繰り返す

最後に呼び出されたマクロコマンドを再度使用するには:

@@
1
kojow7