Hier geht es darum, wie man mit einem bestimmten Werkzeug programmiert. es liegt im Bereich von SO.
Jonathan Leffler
Warum sollten Sie eine bestimmte Zeilennummer in einem Befehl hart codieren?
Antworten:
2
Sie können den nmapBefehl vim folgendermaßen verwenden:
:nmap ~! 20Gi
Und jedes Mal, wenn Sie Tastenanschläge drücken ~!(oder eine andere Tastenkombination auswählen können), bewegt sich der Cursor im Einfügemodus auf Zeile 20.
Beachten Sie, dass bei startoflinedeaktivierter Option die Cursorspalte Gerhalten bleibt und daher der iEinfügemodus nicht unbedingt für das erste nicht leere Zeichen der Zeile gestartet werden kann. In diesem speziellen Fall ist es besser, Ioder gIBefehl zu verwenden (abhängig davon, ob Sie eine Zeilennummer vor oder nach einem möglichen führenden Leerzeichen einfügen möchten).
1
Du kannst Tippen :20i<enter>Text you want to insert including newlines...<esc>
Wie unterscheidet sich das von dem, was sie versucht, nicht zu tun? Ich dachte, er suchte nach einer einfacheren Möglichkeit, Text in Zeile N ohne :NiZeile 20 einzufügen. Habe ich die Frage falsch interpretiert?
Matchew
Dies ist die gleiche Anzahl von Zeichen, die eingegeben werden, als ob Sie die Reihenfolge von 'Enter' und 'i' wie in der Frage umkehren.
Jonathan Leffler
1
Eine andere Möglichkeit, das zu tun, was Sie verlangen, ist der 20Ginormale Modus. es kann nicht schneller sein, aber es kann einfacher sein, sich zu erinnern. Wenn Sie es ohne Schicht machen möchten, versuchen Sie es20ggi
Wenn ich mehr darüber nachdenke, funktioniert dies in offensichtlichen Fällen nicht, aber ich mache gerne Folgendes
:set mouse=a
:nmap <2-LeftMouse> i
nmapDies bringt mich im normalen Modus (Hinweis ) zu dieser Zeile, und wenn ich doppelklicke, wird sie in die angegebene Zeile eingefügt. Die Nützlichkeit könnte trivial sein, aber wenn Sie es gewohnt sind, die Maus zu verwenden, hilft diese Karte.
viemu.com hat ein halbwegs anständiges Cheatsheet, wenn Sie möchten
Dies ist tatsächlich ein Zeichen kürzer als das Original; gut gemacht.
Jonathan Leffler
0
Der Normalmodus iist im Befehlsmodus als verfügbar startinsert, akzeptiert jedoch keine Zeilennummer. Sie benötigen also zwei Befehle und eine Leiste, um sie zu trennen :20 | startinsert.
Nein, es ist nur der einzige Ansatz, der in Vimscript funktioniert, wenn das OP dies versucht.
Aristoteles Pagaltzis
In diesem Fall müssen Sie Ihre Antwort erweitern, um zu erklären, was Sie meinen, da mir nicht ganz klar ist, was Sie meinen. Ich bin noch nie auf Vimscript gestoßen, aber ich verwende Vim nur als aufgemotztes Vi, ohne die unglaublichen Komplexitäten, die es hinzugefügt hat, voll auszunutzen.
Antworten:
Sie können den
nmap
Befehl vim folgendermaßen verwenden:Und jedes Mal, wenn Sie Tastenanschläge drücken
~!
(oder eine andere Tastenkombination auswählen können), bewegt sich der Cursor im Einfügemodus auf Zeile 20.quelle
startofline
deaktivierter Option die CursorspalteG
erhalten bleibt und daher deri
Einfügemodus nicht unbedingt für das erste nicht leere Zeichen der Zeile gestartet werden kann. In diesem speziellen Fall ist es besser,I
odergI
Befehl zu verwenden (abhängig davon, ob Sie eine Zeilennummer vor oder nach einem möglichen führenden Leerzeichen einfügen möchten).Du kannst Tippen
:20i<enter>Text you want to insert including newlines...<esc>
quelle
:Ni
Zeile 20 einzufügen. Habe ich die Frage falsch interpretiert?Eine andere Möglichkeit, das zu tun, was Sie verlangen, ist der
20Gi
normale Modus. es kann nicht schneller sein, aber es kann einfacher sein, sich zu erinnern. Wenn Sie es ohne Schicht machen möchten, versuchen Sie es20ggi
Wenn ich mehr darüber nachdenke, funktioniert dies in offensichtlichen Fällen nicht, aber ich mache gerne Folgendes
nmap
Dies bringt mich im normalen Modus (Hinweis ) zu dieser Zeile, und wenn ich doppelklicke, wird sie in die angegebene Zeile eingefügt. Die Nützlichkeit könnte trivial sein, aber wenn Sie es gewohnt sind, die Maus zu verwenden, hilft diese Karte.viemu.com hat ein halbwegs anständiges Cheatsheet, wenn Sie möchten
quelle
Der Normalmodus
i
ist im Befehlsmodus als verfügbarstartinsert
, akzeptiert jedoch keine Zeilennummer. Sie benötigen also zwei Befehle und eine Leiste, um sie zu trennen:20 | startinsert
.quelle