Ein einzelnes Zeichen in Vim einfügen?

25

In Vim (7.2) gibt es einen normalen Modusbefehl r, um ein einzelnes Zeichen durch ein anderes zu ersetzen. Wenn Sie beispielsweise eingeben, rXwird das eine Zeichen unter dem Cursor durch ersetzt, Xund Sie kehren zum normalen Modus zurück.

Gibt es einen Normalmodus-Befehl, um ein einzelnes Zeichen einzufügen und dann in den Normalmodus zurückzukehren?

John Dibling
quelle
1
Mögliches Cross-Site-Duplikat: stackoverflow.com/questions/1557893/…
Ciro Santilli am
Eine umfassende Lösung finden Sie unter vim.wikia.com/wiki/Insert_a_single_character .
Maxim Suslov

Antworten:

6

MelBurslan hat Recht, dass diese Funktion nicht von Haus aus vorhanden ist, aber das Erstellen eines benutzerdefinierten Befehls ist nicht der richtige Weg, um sie zu erstellen. Ich habe ein paar Minuten gebastelt und mir das einfallen lassen:

:nmap <silent> ,s "=nr2char(getchar())<cr>P

Wobei einige Vim-Tricks verwendet werden, bei denen Text aus einem Register "abgelegt" wird, in diesem Fall das Register "Ausdruck". Der Ausdruck, der in das Register eingefügt wird, lautet " nr2char(getchar())" und gibt eine einzelne Zeichenfolge zurück.

Der Grund, warum ich das Mapping auf diese Weise erstellt habe, ist, dass es schwierig ist, Benutzereingaben "auf halbem Weg" durch ein Mapping zu bekommen, und sich unvorhersehbar verhalten kann. Selbst diese Zuordnung lässt den Cursor in den Statusbereich fallen, während der Benutzer auf die Eingabe eines Zeichens wartet.

Heptit
quelle
8

Vielen Dank an Johnny, der uns diese großartige Antwort in den Kommentaren unten gegeben hat:

":nmap <C-i> i_<Esc>r"

Das ordnet Control + i zu, um ein einzelnes Zeichen einzufügen, und es tut es sehr kurz.

In Ihrer vimrc-Datei sieht dies folgendermaßen aus:

nnoremap <C-i> i_<Esc>r

Ich habe meine Zuordnung geändert, um Speicherplatz zu verwenden, und Sie können Ihren zu Ihren bevorzugten Schlüsseln ändern:

nnoremap <Space> i_<Esc>r
Matt C
quelle
1
Dies ist die prägnanteste und einfachste Antwort.
Dylanthepiguy
4

Soweit ich weiß, gibt es in keiner weit verbreiteten Version von vi editor eine solche Funktion, aber vim verfügt über eine Möglichkeit, benutzerdefinierte Befehle zu erstellen. Es wurde zuvor hier diskutiert: in diesem Thread

Möglicherweise können Sie Ihren benutzerdefinierten Befehl nach Ihren Wünschen erstellen.

MelBurslan
quelle
3
Hier ist der Befehl, Strg-I zuzuordnen, um ein einzelnes Zeichen einzufügen: ": nmap <Ci> i_ <esc> r"
Johnny
2

Eine einfache Möglichkeit hierfür ist die Verwendung der Befehle Ausschneiden xund Einfügen p. Angenommen, dies *ist das Zeichen, das Sie einfügen möchten. Fügen Sie es mit ein i * Esc. Dann drück x. Das wird den Charakter schneiden. Jetzt können Sie drücken p, um das einzelne Zeichen zu setzen. Wenn Sie dieses Zeichen 300 mal einfügen müssen, können Sie Folgendes eingeben: 300p.

Steve Bragg
quelle