Ich verbringe viel zu viel Zeit damit, herumzufummeln, weil Vim das Schließen von Klammern nicht wie die meisten IDEs handhabt. Folgendes möchte ich tun:
Geben Sie Folgendes ein:
if( whatever )
{ <CR>
und hol dir das:
if( whatever )
{
|
}
Dabei <CR>
bedeutet Mittelwert die ENTERTaste und |
ist die Position des Cursors. Dies ist, was Eclipse tut. Genau das macht Visual Studio. Und genau das möchte ich von Vim.
Ich habe ein paar Plugins gesehen, ein paar ausprobiert und keines scheint mir dieses Verhalten zu geben. Sicherlich kann ich nicht der erste Programmierer sein, der das will.
vim
autocomplete
Bob
quelle
quelle
Antworten:
In VimL können Sie die Aufgaben
{
genau nach Ihren Wünschen zuordnen :Abhängig von Ihrem Autoindent-Setup möchten Sie möglicherweise ein
<BS>
After hinzufügen<CR>
.Für eine vollständigere Lösung würde ich empfehlen, dass Sie sich die Vim-Plugins von Luc Hermitte ansehen . Sie haben mich bisher noch nie im Stich gelassen.
quelle
{<CR>
auch möglich? Ich meine, was ist, wenn ich nur einen Hash{"something":"like this"}
in Python, Js oder Ruby eingebe?{<CR>
ist möglich Dies ist, was ich in meinem .vimrc{<CR> {<CR>}<Esc>ko
{
aber es gibt ein Problem, wenn ich einen Codeblock einfüge, der enthält{
, wird}
am Ende ein hinzugefügt .Die Verwendung von AutoClose mit den folgenden Funktionen funktioniert ordnungsgemäß.
Dies gilt zumindest für mein System (Unix-Terminal unter Mac OS X).
quelle
Folgendes habe ich in meinem vimrc:
Und für einige Dateitypen:
// Ich weiß, dass die InsertPair-Funktion trivial ist, aber sie spart Zeit, da ich damit sowohl Befehls- als auch Normalmoduszuordnungen mit einem Befehl definieren kann, ohne viele
<Left>
s schreiben zu müssen .quelle
Fügen Sie Folgendes in Ihre .vimrc-Datei ein:
Jedes Mal, wenn Sie
{
im Einfügemodus drücken ,{}
wird generiert und der Cursor befindet sich auf der rechten Klammer, sodass Sie sofort zwischen ihnen tippen können. Indem Sie die geschweiften Klammern nacheinander und nicht in verschiedenen Zeilen platzieren, können Sie}
manuell Tabulatoren vorsetzen. Auf diese Weise haben Sie nie die falsche Anzahl von Registerkarten vor sich.Vielleicht kann jemand herausfinden, wie die Anzahl der Registerkarten gezählt werden soll, auf denen sich der Cursor befindet, und dann eine gleiche Anzahl von Registerkarten vor der
}
in einer neuen Zeile generieren .quelle
Eine Lösung für Klammern, Klammern und Klammern mit dazwischen liegenden Tabulatoren.
Ergebnis:
quelle
Ich habe immer so etwas wie erhabenen Text bevorzugt, bei dem die schließende Klammer als nächstes Zeichen angehängt wird. Deshalb habe ich meiner .vimrc Folgendes hinzugefügt:
Dadurch wird der Cursor zwischen die beiden geschweiften Klammern bewegt.
quelle
(
zu()hli
. Vim8 auf Mac.Für alle, die wie ich darauf stoßen und nach etwas suchen, das kürzlich aktualisiert wurde als AutoClose: delimitMate Ich habe festgestellt, dass dies nicht nur eine bevorzugte Lösung für AutoClose ist, sondern auch in Bezug auf die aktive Entwicklung. Laut vim.org wurde AutoClose seit 2009 nicht mehr aktualisiert.
quelle
delmitMateExpand
Optionen standardmäßig deaktiviert sind. Sie müssenlet delimitMate_expand_cr = 1
zu Ihrem hinzufügen.vimrc
.Ich habe verschiedene Plugins ausprobiert, aber ich fand die genauesten und am einfachsten zu verwendenden Auto-Paare . Es ist sehr intuitiv und wenn Sie es installieren, erhalten Sie sofort das, was Sie erwartet haben.
quelle
Wie Sie im Wikia-Tipp sehen werden : Es gibt viele Lösungen für diese wiederkehrende Frage (ich habe sogar meine ).
Das ist, wenn Sie sich auf Klammerpaare beschränken. Hier befinden Sie sich im Kontext einer Steueranweisung. Es ist daher wahrscheinlicher, dass Sie Snippet-Systeme finden, die nicht erwarten, dass Sie ") {" eingeben, wenn Sie eine "if" -Anweisung eingeben. Die Vim-Verknüpfung ist in der Regel kürzer als in Ihrer Frage. Auch hier gibt es eine Menge Auswahlmöglichkeiten, wahrscheinlich finden Sie snipmate und möglicherweise meine C & C ++ - Suite .
quelle
delimitMate hat hierfür eine Einstellung.
quelle
delimitMate_expand_cr
, obwohl es nicht genau das zu tun scheint, wonach gefragt wird. Scheint, Zeilenumbrüche korrekt einzufügen, aber möglicherweise nicht die Endklammer hinzuzufügen. Die Hilfedatei ist hier: github.com/Raimondi/delimitMate/blob/master/doc/delimitMate.txt Persönlich verwende ich heutzutage nur endwise ( github.com/tpope/vim-endwise ) und stimme ansonsten mit meinen eigenen Klammern überein, da keine Automatisierung erfolgt macht es ganz richtig.Vim Patch 7.4.849 hat eine Bindung hinzugefügt, um Cursorbewegungen zu ermöglichen, ohne die Rückgängig-Sequenz neu zu starten. Einmal auf> = 7.4.849 aktualisiert, funktioniert so etwas großartig.
Beachten Sie, dass ich das direkt aus der im Patch enthaltenen Dokumentation entnommen habe. Die bisher beste einfache Lösung für diese Funktion.
quelle
quelle
Schließlich habe ich herausgefunden, dass kein Plugin erforderlich ist, sondern dass dies perfekt für mich funktioniert:
quelle
Installieren und verwenden Sie das Vim-Skript AutoClose, wie im Artikel mit dem Titel " Schließende Zeichen automatisch anhängen" empfohlen .
quelle
Nur eine Notiz an @Bob.
Karl Guertins AutoClose hat eine Funktion namens "Doppelklammer", dh Sie können die geschweifte Klammer wie unten angegeben zweimal eingeben .
würde führen zu:
Anschließend können Sie eine einzelne Registerkarte eingeben, um sie entsprechend Ihrer Einstellung für die Verschiebungsbreite einzurücken, und dann eingeben.
quelle
Sie benötigen dazu kein spezielles Plugin - dies ist jedoch ein zweistufiger Prozess.
Fügen Sie zunächst Folgendes zu Ihrem hinzu
.vimrc
, um den auslösenden Charakter zu essen:und fügen Sie dann diese Abkürzung zu Ihrem hinzu
.vimrc
:Das
\
am Anfang der Zeilen zwei und drei ist nur ein Zeilenfortsetzungszeichen. Sie hätten dies jedoch alles in einer Zeile tun können, und ich habe es hinzugefügt, damit ich die Abkürzung so verteilen kann, dass sie die gesuchte Ausgabe widerspiegelt - nur damit die Dinge etwas intuitiver sind.quelle
Meine Lösung:
Erklärung:
Der obige Code zuerst überprüfen , ob Sie verwenden
Enter
einen Code - Vervollständigung zu tun bestätigen, wenn nicht es wird der Einzug ,{|}
wenn Sie eingebenEnter
. Außerdem werden HTML-Tags automatisch eingerückt.Beispiele:
Drücken
Enter
Sie und Sie werden bekommenDies funktioniert auch für HTML-Dateien. Siehe folgendes Beispiel
<html>|<html>
Drücken
Enter
Sie und Sie werden bekommen<html> | </html>
quelle
Wenn Sie tippen
{}
und drücken, befinden altiSie sich imINSERT
Modus zwischen den geschweiften Klammern (zumindest in einem Terminal). Dann können Sie drücken, ENTERgefolgt von altshifto, um den Zeilenumbruch einzufügen. Sie könnten auch einfach tun{<CR>}
und altshifto.Dies ist möglicherweise nicht vollautomatisch, aber ich halte es für halbautomatisch. Es macht mehr Plugins überflüssig und ist eine nützliche Information für andere Anwendungsfälle. Zum Beispiel benutze ich die altshiftoganze Zeit, um leere Zeilen einzufügen, ohne den
INSERT
Modus explizit verlassen zu müssen , und altium hineinzukommen()
usw.quelle