1
Sie können diese oder bessere (pinky) Befehlszuordnungen sehr schnell erreichen. Ich empfehle diese Lösung nicht, aber als Beispiel, wenn Sie den Cursor an den Zeilenanfang bewegen möchten, <C-a>
können Sie die folgende Zeile ausführen, nachdem Sie :
aus dem normalen Modus gedrückt haben (oder die Zeile zu Ihrem vimrc hinzufügen).
inoremap <C-a> <C-o>0
oder wenn Zeilenanfang das erste nicht leere Zeichen der Zeile bedeutet
inoremap <C-a> <C-o>^
Seltsamerweise habe ich diese Zuordnungen gerade in dem Puffer getestet, in dem ich diese Antwort schreibe, und ich war für einen Moment verwirrt, weil sie nicht funktionierten. Dann wurde mir klar, dass ich vergessen hatte, in den Einfügemodus zu wechseln. Es scheint Ihnen ein Problem zu sein, den Einfügemodus zu verlassen, um Befehle im normalen Modus auszuführen. Möglicherweise stellen Sie nach einer Weile der Verwendung von Vim fest, dass es umgekehrt ist - dass Sie im normalen Modus verweilen, während Sie nachdenken, und nur für bestimmte Gelegenheiten Ausflüge in den Einfügemodus unternehmen. Vim ist wahrscheinlich nur (oder meistens) lernenswert, wenn Sie feststellen, dass Sie mehr bearbeiten als Text schreiben .
Ein Teil einer Antwort auf Ihre Frage zum schnellen Ausführen von Befehlen im Normalmodus aus dem Einfügemodus lautet <C-o>
: Sie können den Einfügemodus vorübergehend verlassen, um einen Befehl im Normalmodus auszuführen, und dann erneut eingeben. Lesen Sie darüber unter :help i_Ctrl-o
. Dies ist nützlich für einmalige Annehmlichkeiten. Eine nachhaltigere Route besteht wahrscheinlich darin, den normalen Modus als Standard für die Navigation und Bearbeitung zu verwenden und nur dann in den Einfügemodus zu wechseln, wenn Sie tatsächlich neue Zeichen von Hand in den Puffer einfügen möchten.
2
Ihre Beispiele sind sehr allgemein gehalten, daher ist es schwierig, spezifische Antworten zu geben. Ich werde ein konkretes Beispiel zusammenstellen, in der Hoffnung, dass es zu etwas passt oder auf etwas übersetzbar ist, dem Sie begegnen. Für Ihre Nummer 1 hängt es davon ab, woher Sie wissen, wohin die schließende Klammer gehen soll. Nehmen wir an, ich habe eine Zeile wie
let cchar = s:cchar["atx"]
Dies soll eine Zeile von VimL sein, der Skriptsprache von vim, und sie (oder so ähnlich) kommt in einer Vim-Syntaxdatei vor, mit der ich derzeit nicht einverstanden bin. Angenommen, ich möchte den rechten Teil dieses Ausdrucks in einen Funktionsaufruf ändern, möglicherweise weil die Funktion Standardeinstellungen bereitstellt, wenn dem Wörterbuch s:cchar
noch kein Wert für den "atx"
Schlüssel zugewiesen wurde . Mit meinem Cursor (im normalen Modus) auf das erste Zeichen 'l' könnte ich tippen
f=wcf[MyFunction(<Esc>$r)
Kurz gesagt, das sagt
f=
- vorwärts zu '=' (Ich hätte sagen können fs
, aber ich würde wahrscheinlich nicht lange genug innehalten, um zu sehen, dass das 's', das ich erreichen möchte, das erste s in der Zeile ist, also würde ich mich für den Charakter entscheiden, der ist offensichtlich einzigartig und weiter von dort)
w
- nächstes Wort, jetzt befindet sich mein Cursor auf dem 's' von 's: cchar'
cf[
- Wechseln Sie zu '['
an diesem Punkt sieht die Linie aus wie
let cchar = |"atx"]
Wo |
ist der Cursor und ich bin im Einfügemodus. Ich MyFunction(
tippe dann und verlasse den Einfügemodus ( <Esc>
).
$
- Bewegen Sie den Cursor zum Zeilenende. Ich hätte es E
für das Ende des großen Wortes oder f]
für das Weiterleiten an ']' oder eine andere Bewegung verwenden können, $
kam mir aber zuerst in den Sinn.
r)
- Zeichen unter dem Cursor durch ein ')' ersetzen
Jetzt habe ich den Zuweisungsausdruck von der Zuweisung aus einem skriptlokalen Wörterbuch zur Verwendung des Rückgabewerts einer Funktion geändert und dabei Klammern eingefügt. Ich weiß nicht, wie Ihr spezielles Bedürfnis nach Klammern aussieht, vielleicht ist es sehr unterschiedlich. In diesem Fall wird es eine andere Befehlsfolge geben, um dies zu erreichen. Wenn ich innehalten würde, um länger über mein erfundenes Beispiel nachzudenken, könnte ich auch effizientere Wege finden, um dies zu erreichen, aber wer hat Zeit zum Innehalten und Nachdenken.
(Probieren Sie es aus, kopieren Sie den Text und den Befehl (sorry, yank-put) in einen Puffer und bewegen Sie den Cursor auf das erste Zeichen 'f' des Befehlstreffers y$
. Jetzt befindet sich der Befehl in Ihrem unbenannten Register. Gehen Sie zum Anfang der ersten Zeile und drücken Sie, um a) den Befehlszeilenmodus aufzurufen:normal <C-r>"
, b) einen Befehl im normalen Modus über die Befehlszeile auszuführen und c ) das unbenannte Register wie gewohnt in die Befehlszeile einzufügen ( atchoo put) Modusbefehl ausgeführt werden. Das einzige, was Sie im Befehl ändern müssen, ist, die falsche <Esc>
Zeichenserie (weil Sie atchoo aus Ihrem Browser kopiert haben ) durch den tatsächlichen Escape-Schlüsselcode zu ersetzen. Löschen Sie ihn also und drücken Sie <C-v>
und dann Ihre Esc-Taste. Es wird irgendwie so aussehen^[
. Drücken Sie nun die Eingabetaste, um den Befehl auszuführen. Oder ... geben Sie einfach die Tastenfolge ein, um die Befehle zu testen. Ich wollte Ihnen nur zeigen, dass Sie auch vom cmdline-Modus aus mit dem normalen Modus interagieren können, und <C-v>
, und <C-r>
und all den anderen Herrlichkeiten des Wunderlandes. Siehe auch :help Cmdline-mode
.)
3
Zum Löschen eines Wortes rückwärts können Sie die Standardzuordnung verwenden <C-w>
(siehe :help i_Ctrl-w
). Ich weiß nicht, ob es eine Standardzuordnung gibt, um ein Wort vorwärts zu löschen, aber ich nehme an, Sie könnten eine mit erstellen
inoremap <C-S-w> <C-o>dw
Wiederum verlassen <C-o>
Sie den Einfügemodus für einen einmaligen Befehl und dw
"löschen" über die "Wort" -Bewegung. Siehe :help d
, :help w
. Wenn es sich bei den von Ihnen gelöschten Vorwärtswörtern nicht um tatsächliche Wörter handelt, sondern um Namen von class.function #, können Sie diese verwenden W
(siehe :help W
). Wenn Sie bereits überwiegend im normalen Modus sind Sie brauchen nicht diese Zuordnungen, nur tun dw
, db
oder Freunde.
Einige Hilfekapitel zum näheren Betrachten
:help <C-o>
:help Insert
:help f
und die folgenden Abschnitte ( F
, t
, T
, ;
und ,
)
:help word-motions