回答:
別の解決策は、v:count
このような変数を使用することです:
nnoremap <F8> :<C-u>execute "normal! " . v:count1 * 3 . "w"<CR>
参照:h v:count
:変数には、最後の通常モードコマンドに指定されたカウントが含まれているため、マッピング前にカウントを取得するために使用できます。
ここでマッピングはv:count1
whichを使用してv:count
いますが、カウントが指定されていない場合はデフォルトでゼロに設定されます。
マッピングは、通常のコマンドを実行したマッピングの前に与えられた3回のカウントに置き換えられています。normal! Xw
X
<C-U>
入力するときに含まれます行の範囲除去することが必要とされる:
数の後に。
もちろんもちろん、観察した動作は完全に正常です。マッピングにより、Vimの前に何かを入力F8した3wときのように、乗算を実行することを理解できないため、Vimが理解します。あなたが彼らにそれについて説明しないと、プログラムはあなたの意図を理解できないことに注意してください。
これには式レジスターを使用できます。
:nnoremap <F8> @='3w'<CR>
これは、式レジスタを使用して、番号を前に付けることができる繰り返し可能なマッピングを作成します。
2<F8> will move 6 words
vimでのマッピングは、押されたキー/キーのシーケンスの意味を置き換えます。だからあなたがするとき
:map <F8> 3w
そして
2<F8>
23w
Vimは変換されます<F8>
し3w
、あなたが何であるかを実行します23w
。
反対に、式レジスタを使用すると、最終的に次のようになります。
2<F8>
2@='3w'<CR>
つまり、「2回、式レジスタの内容を実行する」ということです。
それが意図的に行われたかどうかについての私の推測は、マッピングの意味を考えると、それは実行すべき論理的な方法であるということです。
E16: Invalid range
。