So wiederholen Sie eine Zuordnung, wenn Sie die Taste gedrückt halten


11

Ich habe in meinen .vimrceinfachen Zuordnungen, um die Größe von geteilten Fenstern einfach zu ändern:

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

Das funktioniert ziemlich gut, aber wenn ich zum Beispiel die Größe des Fensters mit 10 Zeilen ändern möchte, muss ich Leader+ UP10 Mal drücken und loslassen .

Wie kann ich diese Zuordnung wiederholen, während die Tasten gedrückt werden? Was ich möchte, ist, wenn ich Leader+ drücke, wird UPdas Mapping einmal angewendet, und nach kurzer Zeit wird es erneut angewendet und so weiter, während ich die Tasten gedrückt halte.

Hinweis: Ich weiß, dass es möglich ist, <C-w>+eine Zählung mit einem Präfix zu versehen, und ich könnte sie in der Zuordnung fest codieren oder einfach eine Zählung eingeben, bevor ich die Zuordnung verwende, aber so möchte ich das nicht tun.

Hinweis 2: Ich weiß auch , dass eine beliebte Mapping - Fenster , um die Größe zu bedienen +und -Tasten , die mehrmals leichter zu drücken sind , aber ich möchte nicht , diese Schlüssel verwenden , tun weder das.

Antworten:


14

Sie könnten versuchen, einen ... Vim- Submodus einzugeben ! Für Ihren Fall so etwas:

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>+')

Dies bedeutet, dass Sie den Submodus mit Leader-Upoder aufrufen Leader-Down(wodurch das Fenster auch einmal vergrößert / verkleinert wird) und dann - Sie müssen nur drücken Upoder Downdas Fenster vergrößern / verkleinern, bis Sie den Untermodus verlassen.

Siehe auch die Hilfe für Timeout-Probleme, aber um sie zu deaktivieren:

"disable submode timeouts:
let g:submode_timeout = 0

... das heißt , Sie auf unbestimmte Zeit in diesem Submodus bleiben werde, bis Sie eine andere Taste drücken als Upoder Down, oder , bis Sie treffen Esc.

Aaand, der nächste nützliche Tipp, den ich empfehlen würde:

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

... mit dem Sie direkt zu Ihren nächsten Befehlen wechseln können, wenn Sie eine andere Taste drücken. Zum Beispiel, Pressen :wird sowohl die submode verlassen und die Befehlszeile zu öffnen.


Ich habe versucht, Sie Lösung, aber es scheint nicht zu funktionieren: Wenn ich <kbd> Leader </ kbd> + <kbd> UP </ kbd> drücke, habe ich die Nachricht --submode: grow/shrink --und das Fenster wird um eine Zeile verkleinert, aber der Befehl ist nicht ' t wiederholt. Ich habe es mit den 4 Kombinationen von g:submode_keep_leaving_keyund g:submode_timeoutzu 0 oder 1 versucht . Ich bin mir nicht sicher, ob ich etwas falsch gemacht habe oder nicht. Normalerweise verwende ich vim in einem Terminal, aber im Moment kann ich nur mit gVim unter Windows testen, aber ich bin nicht sicher, ob es etwas ändert.
Statox

2
Der Befehl wird nicht automatisch wiederholt, Sie müssen immer noch so oft wie nötig schlagen Upoder sich Downselbst (aber ohne vorher drücken zu müssen Leader)
VanLaser

Oh, ich verstehe den Code jetzt besser! Es funktioniert perfekt, danke!
Statox

2
Perfekte Antwort und tolles Plugin! (Hinweis: Sie müssen das vim-Submode- Plugin installieren, bevor Sie die oben genannten Befehle zu Ihrem hinzufügen können ~/.vimrc.)
weibeld

1

Mit winresizer , traf Ctrl- eund die Größe weg!

Sie verwenden die normalen hjkl-Tasten (und möglicherweise die Pfeiltasten).

Sie können die Größenänderung "akzeptieren" oder "abbrechen".

Es gibt auch einen Bewegungsmodus, in dem Sie Fenster austauschen, und einen Fokusmodus, in dem Sie das Fenster wechseln, in dem Sie aktiv sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.