Key-Wiederholungen und Bereiche in Vim-Mappings
Frage
Ich möchte eine Zuordnung in meinem .gvimrc so definieren, dass, wenn die zuletzt gedrückte Taste gehalten wird, wird die ausgelöste Aktion wiederholt. Insbesondere möchte ich, wie etwas tun
map <SPACE>t :set transparency-=1
map <SPACE>T :set transparency+=1
für MacVim, aber ich will die Transparenz verringert werden, um fortzufahren / erhöht, wenn t / T gehalten werden (wollen die Leer zu halten, nicht haben drücken).
Wenn Sie einen Vorschlag für eine schönere Art und Weise haben die Transparenz anzupassen, würde ich schätzen auch.
Unabhängig davon wäre es schön sein, um der Lage sein, geben Sie 20 SPACE t und haben die Transparenz um 20 verringert; aber wenn ich versuche ich ein
erhaltenE481: No range allowed.
Wie aktiviere ich die Bereichsspezifikation?
Vielen Dank.
Lösung
Ich bin nicht sicher über den ersten Teil Ihrer Frage, aber bekommen 20 <Space>
t der Lage sein, seine Arbeit zu tun:
:map <space>t :<C-U>exe "set transparency-=".v:count1<CR>
- Mit
<C-U>
Sie den Zeilenbereich entfernen, die zu Ihrem Ex-Befehl hinzugefügt wird, wenn Sie eingeben 20 im Normal-Modus. - Mit
exe
man 'dynamische' vimscript. -
v:count1
ist die Zählung für den letzten Normal-Modus-Befehl (20 in diesem Beispiel) gegeben. Und wenn es gegeben keine Zählung wird 1 angenommen.
Für weitere Informationen siehe
:h v:count
:h v:count1
Update:
Sie können weglassen exe
mit let
Form statt set
ein:
:map <space>t :<C-U>let &transparency-=v:count1<CR>
Siehe :h :let-&
.