exコマンドを実行する前に数値の接頭辞を入力した場合、それが適用される規則は、行範囲全体で操作を準備するようにコマンドを設定することです。ドキュメントで説明されています
行数
変更する行数がわかっている場合は、番号を入力してから「:」を入力できます。たとえば、「5:」と入力すると、次のようになります。
:.,.+4
これで、使用するコマンドを入力できます。範囲「。」を使用します。(現在の行) "。+ 4"(4行下)まで。したがって、5行にまたがっています。
今私が扱っているのは私のカスタム関数です、これはこれです:
function! MyAmazingEnhancedDot()
if v:hlsearch == 1
:normal! .n
else
:normal! .j
endif
endfun
これは、一連の行または一連の検索一致に対して操作を繰り返すことを含む、反復的なタスクを合理化する方法にすぎません。
この機能はホットキーにバインドされています。以下のようなAlt+ .または何でも。
私の目的は、非常に強力な何かをできるようにすることです:私は入力することができるはず/varName<CR>ciwnew-var<ESC>n9<Alt+.>
の10個のインスタンス名の変更を達成するためvarName
にしますnew-var
。
これを行うと実際に何が起こるかというと、名前の変更が行われず、9行が.
列0の-saved編集操作で操作されているということです。
私はVimが私のキーストロークを次のように解釈しているとしか想定できません:.,.+8 normal! .n
。
ガラスの半分いっぱいの側で:normal! .j
は、バインドのケースが実際に機能しj
ます。これは、影響のないモーションはこの状況では影響がないためです。(私はまだj
それが数字の接頭辞のないインタラクティブなユースケースで動作させるために必要です)。
それで私の質問は、Vimがバインドに適用する行拡張動作をどのようにオーバーライドできるかということです。数値接頭辞を引数またはそのようなものとして読み取ることができれば素晴らしいと思います。
nnoremap <M-.> :<C-u>call MyAmazingEnhancedDot(v:count1)<cr>
してスキップするだけでは十分ではないのcommand -count=1 EDot call MyAmazingEnhancedDot(<count>)
でしょうか?