Ich habe mich gefragt, ob Vim in der Lage ist, Codezeilen intelligent zu verpacken, sodass der gleiche Einzug wie die eingerückte Zeile beibehalten wird. Ich habe es in einem anderen Texteditor wie dem E-Text-Editor bemerkt und festgestellt, dass es mir geholfen hat, leichter zu verstehen, was ich sehe.
Zum Beispiel eher als
<p>
<a href="http://www.example.com">
This is a bogus link, used to demonstrate
an example
</a>
</p>
es würde erscheinen als
<p>
<a href="somelink">
This is a bogus link, used to demonstrate
an example
</a>
</p>
:set autoindent
und:set smartindent
Antworten:
Diese Funktion wurde am 25. Juni 2014 als Patch 7.4.338 implementiert. Es folgten einige Patches, die die Funktion verfeinerten, der letzte war 7.4.354, das ist also die Version, die Sie wollen.
Auszüge aus der vim-Hilfe unten:
Ebenfalls relevant für diese
showbreak
Einstellung ist die Einstellung, die Ihren Schichtbetrag mit den von Ihnen angegebenen Zeichen ergänzt.Beispielkonfiguration
Hinweis zum Verhalten
Wenn Sie die
sbr
Option nicht angeben , werdenshowbreak
alle Zeichen an den Einzug angehängt. Das Entfernensbr
aus dem obigen Beispiel führt zu einem effektiven Einzug von 4 Zeichen. Wenn Sie mit dieser Einstellung nurshowbreak
ohne zusätzlichen Einzug verwenden möchten , geben Sie anshift:0
.Sie können auch eine negative Verschiebung vornehmen, die dazu führt, dass
showbreak
Zeichen und umbrochener Text zurück in einen verfügbaren Einrückungsbereich gezogen werden.Wenn Sie einen
min
Wert angeben , wird der verschobene Betrag gequetscht, wenn die Terminalbreite schmaler ist, dieshowbreak
Zeichen jedoch immer erhalten bleiben.quelle
set breakindent
zu Ihrer vim-Konfiguration wird der Zeilenumbruch unterbrochen und am Einzug umgebrochen - anstatt in der nächsten Zeile zu brechen und zu beginnen, als wäre es eine neue Zeile.set breakindentopt=shift:4
zu Ihrer vim-Konfiguration werden zusätzliche 4 Leerzeichen eingerückt.breakindentopt
. Die Syntax ist aus dem Hilfedokument nicht ersichtlich. Danke @fritzo für das Beispiel in deinem Kommentar.Es gibt einen Patch dafür, aber er verweilt seit Jahren und als ich das letzte Mal nachgesehen habe, wurde er nicht sauber angewendet. Siehe den Eintrag "Umbrochene Zeilen korrekt einrücken" unter http://groups.google.com/group/vim_dev/web/vim-patches - ich wünschte wirklich, dies würde in die Hauptzeile aufgenommen.
Update: Dieser Link scheint bitrotted zu sein. Hier ist eine aktuellere Version des Patches .
Update 2: Es wurde fusionierte Upstream (Stand 7.4.345), so dass jetzt nur Sie müssen
:set breakindent
.quelle
Ich denke nicht, dass es möglich ist, genau die gleiche Einrückung zu haben, aber Sie können trotzdem eine bessere Ansicht erhalten, indem Sie die Option "Showbreak" aktivieren.
Beispiel:
Die reale Sache sieht besser aus als der obige Beispielcode, da Vim für '>>>' eine andere Farbe verwendet.
quelle
:set showbreak=\ \ \ \ \ \ \ \ \ \ \ \ \ \
(die Kombination aus Backslash-Leerzeichen macht den Unterbrechungszeichenraum. Sie können also genügend Leerzeichen hinzufügen, um tiefer als der größte Teil Ihres umschlossenen Codes zu sein (z. B. wären 10 Leerzeichen tiefer als 2 Registerkarten mit vier Leerzeichen und 14 tiefer als 3 vier Leerzeichen-Registerkarten); ein schönes Merkmal des Leerzeichens ist, dass es weniger visuell ablenkt (wenn Sie dies möchten)set showbreak=\ \ \ \ \ \ \ \ \ \ \ \ \ \
ist dann viel weniger lesbarlet &showbreak=repeat(' ', 14)
UPDATE: Im Juni 2014 wurde ein Patch zur Unterstützung einer
breakindent
Option in Vim zusammengeführt (Version 7.4.346 oder höher für beste Unterstützung).Sie können auch versuchen
:set nowrap
, mit vim lange Zeilen anzuzeigen, indem Sie nach rechts scrollen. Dies kann nützlich sein, um die Gesamtstruktur eines Dokuments zu untersuchen, kann jedoch für die eigentliche Bearbeitung weniger bequem sein.Andere Optionen in der Nähe von dem, was Sie suchen, sind
linebreak
undshowbreak
. Mitshowbreak
können Sie ändern, was am linken Rand der Zeilen angezeigt wird, die umbrochen werden. Leider ist je nach aktuellem Kontext kein variabler Einzug zulässig.quelle
Ich weiß nur, dass Sie dies tun können, indem Sie ein Rückgabezeichen (wie von Cfreak erwähnt) verwenden und die
textwidth
Option mit den verschiedenen Einrückungsoptionen kombinieren . Wenn Ihr Einzug korrekt konfiguriert ist (wie ich glaube, standardmäßig mit der HTML-Syntax, aber ansonsten die Optionenautoindent
undsmartindent
), können Sie:Wenn Sie die
formatoptions
Einstellung anpassen müssen , ist es möglicherweise besser, einfach Folgendes zu tun:Was dies tut:
Beachten Sie, dass dies nicht mit einem Soft-Wrap identisch ist: Es werden die Zeilen sowohl in der Quelldatei als auch auf dem Bildschirm umbrochen (es sei denn, Sie speichern sie natürlich nicht!). Es gibt andere Einstellungen, die hinzugefügt werden können und
formatoptions
die während der Eingabe automatisch formatiert werden: Details in:help fo-table
.Weitere Informationen finden Sie unter:
quelle
Ich denke, Sie müssen trotzdem eine Rückgabe verwenden
quelle
Wenn Ihr HTML- Code ausreichend gut geformt ist, kann es hilfreich sein , ihn über xmllint auszuführen :
quelle
Eine Makrolösung:
Bearbeiten:
Die
gq{motion}
automatischen Betriebsformate werden unabhängig von der eingestellten Variablen "Textbreite" ausgeführt. Dies ist einfacher / besser als die Verwendung des80lBi^M
Makros.Wenn Sie Autoindent aktiviert haben
Wenn Sie dann am Ende einer Zeile eine Rückgabe eingeben, wird die nächste Zeile um denselben Betrag eingerückt. Sie können dies verwenden, um Zeilenumbrüche hart einzugeben, wenn Sie möchten. Das folgende Makro nutzt dies, um Ihren Text automatisch einzurücken:
setze Register z auf:
und setze Register x auf:
Dann mach
um die Makros zu aktivieren. Nach einigen Sekunden wird Ihr Text in richtig eingerückten Zeilen mit maximal 80 Zeichen angezeigt.
Erläuterung:
Hier ist eine Aufteilung der Makros:
Teil 1 (Makro z):
Teil 2 (Makro x):
Vorsichtsmaßnahmen:
Dieses Makro wird unterbrochen, wenn ein WORT mit 80 Zeichen oder mehr vorhanden ist.
Dieses Makro kann keine intelligenten Dinge wie das Einrücken von Zeilen hinter Tags ausführen.
Verwenden Sie die Lazyredraw-Einstellung (: Lazyredraw einstellen), um dies zu beschleunigen
quelle