コマンドシーケンスをまとめて繰り返し(。)


10

検討してください:

apple
pear

カーソルを最初の行に置いてと入力するとYp、次のように生成されます。

apple
apple
pear

カーソルをpear行に置いて入力.し、最後のコマンドを繰り返します。これはp(組み合わせではなく)のみを繰り返しYp、以下を生成します。

apple
apple
pear
apple

.最後のN個のコマンドを繰り返すように指示する方法を教えてください。2.組み合わせを繰り返しYpて生成するようなもの:

apple
apple
pear
pear

それはうまくいきません-それはp2回繰り返されます。しかし、アイデアは「最後の2つのコマンドのシーケンスを繰り返す」でしょう。

qコマンドシーケンスを記録し、で繰り返すことができることはわかっています@@が、このソリューションは理想的ではありません。これは、前もって計画を立てておく必要があるためです。あなたはそれをやった。

私が望むものを達成する方法はありますか?

賞品:上記が不可能な場合、最後のマクロ再生を繰り返す方法はありますか?たとえば、@@最後のマクロを再生するために入力した場合、それ以降はもう一度.入力するのと同じです@@-これは違います(たとえば、結果が@@現在の行によって異なる場合)


私はあなたの問題の最初の部分のためのソリューションを知らないが、第二部のために、あなたはこのマッピングを試みることができる。nno <silent> @@ @@:sil! call repeat#set('@@', v:count1)<CR>しかし、仕事にそれのために、あなたは、このプラグインをインストールする必要がありますgithub.com/tpope/vim-repeatを
user9433424

回答:


4

Vimは最後に実行されたコマンドのみを保存し、それだけがによって繰り返され.ます。私の意見では、それ以外のものは処理が難しいでしょう。

Ypコンボを1つのエンティティとして繰り返す必要がある場合は、1つのコマンドにする必要があります。Tim Popeのrepeat.vimプラグインを使用すると、カスタムマッピングでこれを簡単に実行できます。もちろん、マッピングに短いキー[シーケンス]を選択した場合は、それを(の代わりに.)すばやく再入力でき、repeat.vim統合を回避することもできます。

ところで、私のLineJugglerプラグイン]d現在の行を複製するためのマッピングを提供し、それはrepeat.vimによる繰り返しをサポートします。


2

ではYp、繰り返す「変更」はだけですp.通常モードでの動作を変更する唯一の方法はycpoptionsオプションに追加することです。

set cpoptions+=y

最後のヤンクと最後の変更を繰り返すことができます。

しかし、Ypそれでも問題は何も変わりません。まだ2つのコマンドがあるためです。ヤンクの後に変更が続きます。

自明ではないスクリプトを記述しなければ、必要なものを手に入れることはできないと思います。あなたは見とりましたvim.orgのスクリプトセクションを


1

私は頻繁にmapこの効果を達成するために使用します。例えば:

map <F12> Yp

次に、F12繰り返し押すと実行されますYpYpYp。貼り付けるたびに次の行に移動する場合は、Yp+代わりにキーをマッピングします。


1

RepeatLastプラグイン(非常に独自の@joeytwiddleによる)である注目に値する仕掛けは、マクロとして行うすべてを記録する不法な方法を介して、この機能のみを提供します。

これはいくつかの新しいマッピングを提供しますが、ドキュメントを正しく読んでいる場合、説明した編集を実行するには、コマンドのシーケンスを使用できます(デフォルトの<leader>を使用していると想定しています\)。

  • Yp行をヤンクして、貼り付け/貼り付けapple
  • j行を下に移動して、カーソルを行に置きますpear
  • \Djコマンドを忘れて、
  • 2\.2つのコマンドYを繰り返し、p

本当に、不誠実です!しかし、私は野心に感謝します。
ジョナ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.