キーを押したままマッピングを繰り返す方法


11

私は自分で持って.vimrc簡単に分割ウィンドウのサイズを変更するには、いくつかの単純なマッピング:

noremap <Leader><UP>    <C-w>+
noremap <Leader><DOWN>  <C-w>-

これはかなりうまくいきますが、たとえば、10行のウィンドウのサイズを変更したい場合は、Leader+ UP10回押して離す必要があります。

キーが押されている間、どうすればこのマッピングを繰り返すことができますか?Leader+ を押すとUP、マッピングが1回適用され、その後しばらくすると、キーを押している間、マッピングが再度適用されます。

注:<C-w>+カウントのプレフィックスを付けることは可能であり、マッピングでハードコード化することも、マッピングを使用する前にカウントを入力することもできますが、それは私がしたい方法ではありません。

注2:ウィンドウのサイズを変更するための一般的なマッピングは、数回押しやすいキー+-キーを使用することですが、これらのキーを使用してそれを行うことはしたくありません。

回答:


14

... Vim サブモードに入ることができます!あなたの場合、このようなもの:

call submode#enter_with('grow/shrink', 'n', '', '<leader><up>', '<C-w>+')
call submode#enter_with('grow/shrink', 'n', '', '<leader><down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<up>', '<C-w>+')

つまり、Leader-Upor Leader-Down(またはウィンドウを1回拡大/縮小)でサブモードに入り、サブモードを終了するまで、UpまたはDownを押すだけでウィンドウを拡大/縮小できます。

タイムアウトの問題については、ヘルプも参照してください。ただし、無効にするには:

"disable submode timeouts:
let g:submode_timeout = 0

... UpつまりDown、または以外のキーを押すまで、またはを押すまで、そのサブモードのままになりますEsc

私がお勧めする次の役立つヒント:

" don't consume submode-leaving key
let g:submode_keep_leaving_key = 1

...別のキーを押すと、次のコマンドに直接移動できます。たとえば、を押す:と、サブモードが終了、コマンドラインが開きます。


解決策を試しましたが、うまくいかないようです。<kbd> Leader </ kbd> + <kbd> UP </ kbd>を押す--submode: grow/shrink --と、メッセージが表示され、ウィンドウのサイズが1行変更されますが、コマンドはtを繰り返した。私は4 combinaisonsでそれを試してみましたg:submode_keep_leaving_keyし、g:submode_timeout私が何かを間違っていたかどう0または1に、私はよく分かりません。私は通常、ターミナルでvimを使用していますが、現時点ではWindowsでgVimを使用してのみテストできますが、何かが変更されるかどうかはわかりません。
スタトックス

2
コマンドは、オート繰り返さないで、あなたはまだヒットしなければならないUpか、Down必要に応じて何度でも自分(ただし、プレスすることなく、Leader最初の)
VanLaser

ああ、コードがよくわかりました!それは完全に感謝します!
statox

2
完璧な答えと素晴らしいプラグイン!(注:上記のコマンドをに追加する前にvim-~/.vimrc
submode

1

winresizer、ヒットCtrl- eと離れてサイズを変更!

通常のhjklキー(およびおそらく矢印キー)を使用します。

サイズ変更を「受け入れる」か、「中止」できます。

ウィンドウを入れ替える移動モードや、アクティブなウィンドウを切り替えるフォーカスモードもあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.