
Ich erledige eine sich wiederholende Aufgabe, für die ich in einer der F-Tasten ein Makro definiert habe, aber ich muss immer noch die Umschalttaste gedrückt halten, um den ersten Buchstaben einzugeben, wenn ich dieses Makro ausführe. Ich habe mich gefragt, ob das auch in das Makro aufgenommen werden kann, aber meine Suche nach Möglichkeiten, dies zu tun, war erfolglos.
Es gibt viele Möglichkeiten, in den Einfügemodus zu gelangen, je nach der Position des Cursors im Text. Aber kann ich ein Makro definieren, das den ersten Buchstaben, den ich nach dem Aufrufen des Einfügemodus schreibe, groß schreibt, und nur diesen?
Antwort1
Nun, das ist eine Art Hack-Lösung, aber sie scheint zu funktionieren. Ich bin mir nicht ganz sicher, wie Sie es zuordnen möchten, also habe ich es <leader>i
in meinem Beispiel so zugeordnet. Sie können dies gerne nach Belieben ändern.
function! Icap()
augroup icap
au InsertLeave * exec "normal! \<C-o>gUlgi\<esc>:augroup icap | au! | augroup END\<cr>"
au InsertEnter * exec "normal! m`"
augroup END
endfunction
nnoremap <leader>i :call Icap()<cr>i
Dies definiert eine Funktion „Icap“ (kurz für „insert capitalize“), die zwei Autobefehle einrichtet. Der erste Autobefehl ist der direkt vor dem Einfügemodus:
- Vim fügt die aktuelle Position des Cursors zumSprungliste.
Dann, nach dem Aufruf von foo und unmittelbar nach dem Verlassen des Einfügemodus, geschieht Folgendes:
Vim gibt ein
<C-o>gUl
. Dadurch springt man zu der vorherigen Position in der Sprungliste und wandelt das Zeichen unter dem Cursor in einen Großbuchstaben um. Danach gibt vim eingi<esc>
. Dies ist eine Hack-Methode, um den Cursor an die vorherige Position zurückzubringen. Theoretisch<C-i>
sollte das funktionieren, aber beim Testen stieß ich auf seltsame Probleme.Vim löscht alle Autobefehle, die zu dieser Funktion gehören. Dies soll verhindern, dass zukünftige Änderungen im Einfügemodus seltsame Änderungen vornehmen, die Sie nicht wollten.
Sie können auch eine Zuordnung wie folgt vornehmen:
nnoremap <leader>i :call Icap()<cr>
Dadurch könnten Sie mit anderen Befehlen in den Einfügemodus wechseln ( c
, a
, I
, o
, s
, usw.) und trotzdem die Nebenwirkungen der Großschreibung erhalten.