Ist es möglich, einen Zeilenumbruch einzufügen, wenn sich der Cursor in Vim befindet, ohne in den Einfügemodus zu wechseln? Hier ist ein Beispiel ( [x]
bedeutet, dass der Cursor eingeschaltet ist x
):
if (some_condition) {[ ]return; }
Gelegentlich möchte ich vielleicht etwas mehr Code eingeben. Also würde ich drücken i, um in den Einfügemodus zu gelangen, drücken Enter, um den Zeilenumbruch einzufügen, und dann das zusätzliche Leerzeichen löschen. Als nächstes würde ich in den normalen Modus wechseln und den Cursor vor der schließenden Klammer positionieren und dann das Gleiche tun, um ihn in eine eigene Zeile zu bringen.
Ich mache das schon eine Weile, aber es gibt sicherlich einen besseren Weg, es zu tun?
vim
performance
text-editor
Mark A. Nicolosi
quelle
quelle
Antworten:
In dem von Ihnen angegebenen Beispiel können Sie rEnterein einzelnes Zeichen (das Leerzeichen) durch die Eingabetaste ersetzen. Dann , fspace.um sich auf den nächsten Raum zu bewegen und den letzten Befehl wiederholen.
Abhängig von Ihren Einstellungen für die automatische Einrückung wird die return-Anweisung möglicherweise ordnungsgemäß eingerückt oder nicht. Wenn nicht, sEnterTabEscersetzen Sie stattdessen das Leerzeichen durch eine neue Zeile, rücken Sie die Zeile ein und beenden Sie den Einfügemodus. Sie müssten das zweite Leerzeichen durch einen anderen Befehl ersetzen, damit Sie '.' Nicht verwenden können. in diesem Fall.
quelle
>>
und verwenden<<
, um das Einrücken zu erleichtern, wenn Sie nicht mit in den Einfügemodus wechseln möchtens
.So erstellen Sie ein Makro, das eine neue Zeile am Cursor einfügt, wenn Sie 'g' drücken, während Sie sich nicht im Einfügemodus befinden:
Geben Sie in vim Folgendes ein:
Wo:
Am unteren Rand Ihres VIM-Fensters wird Folgendes angezeigt, bis Sie die letzte Eingabetaste drücken:
Erläuterung:
[Strg + V] bedeutet "das folgende Zeichen in Anführungszeichen setzen" - Sie können die Zeilenumbruch- und Escapezeichen in den Befehl einbetten.
Sie ordnen also der Sequenz den Schlüssel 'g' zu:
Dies ist vim, um eine neue Zeile vor dem Cursor einzufügen und dann den Einfügemodus zu verlassen .
Tweaks:
f}i^M^[O
- das wird f ind des } und i nsert andere Newline, dann Flucht aus Insert - Modus und O Stift eine leere Zeile für Sie Code eingeben.Genießen!
quelle
Eine einfache Zuordnung, um die Linie am Cursor durch Drücken von Strg + Eingabetaste zu unterbrechen:
wechselt im Wesentlichen in den Einfügemodus, fügt einen Zeilenumbruch ein und kehrt in den normalen Modus zurück.
Legen Sie es für die zukünftige Verwendung in Ihrer .vimrc-Datei ab.
quelle
Wenn Sie normalerweise einen einzeiligen Block auf drei Zeilen erweitern, versuchen Sie, ihn zu ersetzen. Ändern Sie die öffnende Halterung in Halterung / Rücklauf und die schließende Halterung in Rücklauf / Halterung.
Der Befehl zum Ersetzen der Klammer / Rückgabe für die Klammer sieht folgendermaßen aus:
Da Sie dies häufig verwenden möchten, können Sie die gesamte Sequenz einem nicht verwendeten Tastenanschlag wie folgt zuordnen:
Wenn Sie ^ M in der Sequenz sehen, geben Sie [Strg-V] ein und drücken Sie die Eingabetaste .
Drücken Sie nun mit dem Cursor an einer beliebigen Stelle in Ihrer Beispielzeile die zugeordnete Taste, und die Wagenrückläufe werden hinzugefügt.
Suchen Sie
:help map-which-keys
nach Ratschlägen zur Auswahl nicht verwendeter Tastenanschläge für die Zuordnung.quelle
g
wird nicht zugeordnet, da es als Namespace-Schlüssel für viele vim-Zuordnungen verwendet wird, die aus zwei Tastenanschlägen bestehen (siehe:h g
). Dieses Mapping ist also eigentlich ein No-Go.g
bereits als Namespace-Schlüssel verwendet wird?:help g
ist eine Möglichkeit, eine Liste der Standard-g
+ Etwas-Zuordnungen anzuzeigen.z
,[
]
Sind weitere ‚Namespace‘ Schlüssel, siehe zB:help index
. Sie können aufrufen:verbose map g
, um alle aktuell definierten Zuordnungen anzuzeigen, die mit g beginnen. Hilfreiche Webressourcen sind viemu.com/vi-vim-cheat-sheet.gif , vimcasts.org/blog/2014/02/follow-my-leader , vimeo.com/85343734 (Folien: Speakerdeck.com/nelstrom/follow-my -Leiter )Angenommen, Sie können eine Zuordnung
K
zu etwas anderem vornehmen (wählen Sie einen anderen Schlüssel nach Ihren Wünschen), und die Verwendung eines Markers'
als temporären Marker ist in Ordnung. Warum nicht?Wenn Sie nun im normalen Modus K über dem Zeichen drücken, nach dem der Zeilenumbruch erfolgen soll, wird die Zeile geteilt und der Cursor bleibt dort, wo er war.
quelle
Vim beendet automatisch alle Leerzeichen rechts vom Cursor, wenn Sie eine Zeile in zwei Teile unterbrechen, während
autoindent
(oder eine andere Einrückungshilfe) aktiviert ist.Wenn Sie keine dieser Einstellungen verwenden möchten, verwenden Sie
s
Sie statt ,i
um s ubstitute Ihren neuen Text für den Rohling nicht nur einfügen. (Wenn mehrere Leerzeichen vorhanden sind, setzen Sie den Cursor ganz links und verwenden Siecw
stattdessen.)quelle
Wenn Sie eine Zeile teilen, möchten Sie entweder nur einen Wagenrücklauf einfügen oder, falls Sie sich in einem Leerzeichen befinden, diesen durch einen Wagenrücklauf ersetzen. Warum sich mit dem einen oder anderen zufrieden geben? Hier ist mein Mapping für K:
Ich benutze den ternären Operator, um die beiden Aktionen in einer Key Map zusammenzufassen. Eine Aufschlüsselung
<expr>
bedeutet , dass die Ausgabe der Tastenkarte dynamisch sein kann und in diesem Fall von der Bedingung abhängt,getline('.')[col('.')-1]==' '
die die langwierige Methode ist, um vim zu fragen, ob das Zeichen unter dem Cursor ein Leerzeichen ist. Schließlich ersetzt der bekannte ternäre Operator? :
entweder das Leerzeichen durch Zeilenumbruch (r<CR>
) oder fügt ein neues ein (i<CR><Esc>
)Jetzt haben Sie eine schöne Schwesterschlüsselkarte für den
J
Befehl.quelle
Stellen Sie diese Schlüsselzuordnung in Ihrem vimrc ein
Drücken Sie dann Strg + m, wenn Sie es in Ihrem vim verwenden möchten.
quelle
IMHO, das eingebaute Mapping
gs
ist kein nützliches Mapping (vim in den Ruhezustand versetzen), man könnte dies zum Teilen verwenden:quelle
In Vrapper können Sie gql verwenden, das eine Zeile teilt, ohne in den Einfügemodus zu wechseln, aber möglicherweise nicht immer die Einrückung beibehält.
quelle
In der Tat benötigen Sie die folgenden kombinierten Operationen:
:
, um in den Befehlsmodus zu gelangens/\s/\r/g
quelle
Wenn Sie die Eingabe haben:
und ausgeben wollen
Sie können den Befehl verwenden
quelle
Ich fand, dass dies die treueste Umsetzung dessen ist, was ich vom gegenteiligen Verhalten erwarten würde
J
Es führt die vereinfachte neue Zeile am Cursor aus, kümmert sich um alle nachgestellten Leerzeichen in der vorherigen Zeile, falls vorhanden, und bringt den Cursor dann an die richtige Position zurück.
i <cr> <esc> - Dies ist eine der am häufigsten vorgeschlagenen Lösungen. Sie löscht keine Nicht-Leerzeichen unter Ihrem Cursor, sondern hinterlässt auch nachgestellte Leerzeichen
^mw - gehe zum Beginn der neuen Zeile und erstelle eine Markierung unter
w
gk - eine Zeile nach oben gehen
:silent! s/\v +$//<cr> - Regex ersetzt alle Leerzeichen am Ende der Zeile
:noh<cr> - Deaktivieren Sie alle Suchmarkierungen, die möglicherweise den regulären Ausdruck aktiviert haben
`w - Geben Sie die Markierung unter zurück
w
Kombiniert im Wesentlichen das Beste aus beiden r<esc><cr>undi<cr><esc>
Hinweis: Ich habe diese Bindung, an Sdie möglicherweise ein nützlicher Schlüssel überschrieben wird, aber es ist ein Synonym für ccund da ich ihn nicht so oft verwende wie Splits, kann ich ihn überschreiben.
quelle
o
ESC
Befehl wird es für Sie tun.quelle
Diese Zuordnung löst alle einzeiligen Funktionen auf, die Sie haben. Setzen Sie einfach Ihren Cursor auf die Linie und drücken Sie im normalen Modus 'g':
Dies setzt voraus, dass Sie nach der öffnenden Klammer ein Leerzeichen und vor der schließenden Klammer ein Leerzeichen haben. Sehen Sie, ob das für Sie funktioniert.
quelle