Ich benutze gvim zum Schreiben von E-Mails und tw=72
zum Brechen langer Schlangen . Jetzt bearbeite ich auch grundlegende Mail-Header im selben Dokument, z. B. füge ich meiner Mail Empfänger hinzu. Jetzt tw=72
bricht es auch jedes Mal nach 72 Zeichen.
Wie kann ich in tw=0
den ersten 4 Zeilen (das ist der Kopfteil) und tw=72
für den Rest des Dokuments festlegen ?
Meine Formatoptionen sehen folgendermaßen aus, wenn dies relevant ist:
set fo+=tcqn
formatting
mxmehl
quelle
quelle
textwidth
wird auf den gesamten Puffer angewendet.line('.') < 5
oder durch Prüfen , ob die Zeile beginnt mit einem E - Mail - Header (zBFrom:
,To:
usw.).Antworten:
Dank des Kommentars von @ Carpetsmoker zu meiner Frage konnte ich das genau so lösen, wie ich es mir vorgestellt hatte.
Mit der folgenden Funktion in .vimrc (oder in meinem Fall in einer speziellen Datei, die nur beim Bearbeiten meiner E-Mails geladen wurde) wird tw auf 500 gesetzt, wenn die Zeilennummer kleiner als 5 ist, andernfalls auf 72.
au CursorMovedI
Dies wird jedes Mal überprüft, wenn die Cursor bewegt sich.Wenn jemand dies implementieren möchte, sollten Sie den Platzhalter
au CursorMovedI *
durch einen festen Pfad oder ein Dateisuffix ersetzen .quelle
Eine robustere Alternative zu mxmehls Antwort.
Wenn Sie
filetype=mail
Vim verwenden, werden Überschriften für Sie hervorgehoben:Wir können die Syntaxinformationen verwenden, um festzustellen, ob eine Zeile eine Kopfzeile ist, und die Textbreite entsprechend festlegen.
Die Syntax Name der Header sind
mailHeaderKey
,mailSubject
,mailHeaderEmail
, undmailHeader
. Ich fand das heraus, indem ich es mir ansah/usr/share/vim/vim74/syntax/mail.vim
.Der Grund, warum ich diese Lösung bevorzuge, ist, dass sie nicht von beliebigen Zeilennummern abhängt, sondern für E-Mails mit einem Header und zwanzig Headern gleichermaßen korrekt funktioniert.
quelle
Sie können dies mit autocmds erreichen. Sie können sie in Ihr vimrc aufnehmen, aber es ist normalerweise besser, sie in einen Dateityp aufzunehmen, wie hier erläutert .
Dann könnten Sie Folgendes verwenden:
Wenn Sie es lieber ohne ein Dateityp-Plugin verwenden möchten, müssen Sie das durch ein Dateimuster ersetzen
<buffer>
.Die Idee ist, den
'textwidth'
Modus zu ändern, wenn Sie in den Einfügemodus wechseln, und ihn wiederherzustellen, wenn Sie ihn verlassen.Wenn Sie normalerweise im Einfügemodus im Text navigieren (z. B. mit den Pfeiltasten), können Sie ihn basierend auf dem von @Carpetsmoke erwähnten Link verbessern: Verhindern Sie, dass Vim Links während des Markdowns in der Mitte des Tags aufbricht.
quelle
Ich glaube nicht, dass das möglich ist. Es gibt jedoch einige Problemumgehungen.
Sie könnten Ihren Header schreiben und dann
:set tw=72
. Datw
dies nicht rückwirkend auf den Text angewendet wird, der sich bereits in Ihrem Puffer befindet,Sie können das Ganze mit tippen
:set tw=0
und dann, wenn Sie fertig sind, mit Zeile 4:set tw=72
und fortfahrengqG
. Wenn Sie dies nicht manuell tun möchten, können Sie es auch makro oder zuordnen. Zum Beispiel würden beide funktionieren:("r" für "neu formatieren")
Sie können dies sogar so einrichten, dass es beim Schließen von vim automatisch erfolgt, vorausgesetzt, Sie möchten, dass es beim Schließen von vim neu formatiert wird, und es gibt einen Dateityp, den Sie nur für E-Mails verwenden. Wenn beispielsweise alle Ihre E-Mails die
.email
Erweiterung hätten, könnten Sie Folgendes tun:Natürlich müssten Sie
*.email
zu der Dateierweiterung wechseln , die Sie tatsächlich verwenden. Wenn Sie so etwas verwenden.txt
, würde ich dies nicht empfehlen, da es mit jeder.txt
Datei, die Sie haben, durcheinander kommt .quelle