Als Programmierer möchte ich ein Lineal in einer bestimmten Spalte (normalerweise 80) sehen, und zwar sowohl, wenn ich diese Spalte überschreite, als auch, wie nah ich daran bin, damit ich meinen Code frühzeitig neu formatieren kann.
Die Optionen, die ich bisher gefunden habe, erreichen alle dieses Ziel nicht:
whitespace-mode
,,column-enforce-mode
undcolumn-marker
markieren Sie einzelne Zeilen erst, nachdem der Text in der Zeile die Markierung bereits passiert hatfill-column
. Ich würde gerne sehen, wann ich mich der Säule nähere, nicht nur, wenn ich sie überquere.fill-column-indicator
wäre eine gute Lösung, außer es brichtauto-complete-mode
,company-mode
,avy
und vieles mehr. Dies sind Probleme, die schwer zu beheben sind und jeweils eine individuelle Problemumgehung erfordern (siehe z. B. dascompany-mode
Problem und dasauto-complete-mode
Problem , letzteres älter als zwei Jahre).
Gibt es bessere Alternativen?
display
font-lock
programming
Jorgen Schäfer
quelle
quelle
(set-window-margins nil 0 (max (- (window-width) 80) 0))
Wenn Sie also ein 120 Zeichen breites Fenster haben, wird der Platz, den Sie zum Anzeigen des Codes tatsächlich benötigen, auf 80 Zeichen verkleinert. Auf diese Weise wird Ihre Fensterkonfiguration nicht durcheinander gebracht, und Sie können sie bei Bedarf ein- und ausschalten. Wenn Sie Ränder haben, wird tatsächlich eine Linie mit 80 Spalten gezeichnet.Antworten:
fill-column-indicator
ist die ausgereifteste Lösung. Wenn Sie überlagerten Code finden, mit dem ein Konflikt besteht, können Sie Code hinzufügen, der angehalten werden soll,fci-mode
während der Konfliktcode aktiv ist. Mit dem folgenden Code funktioniert es beispielsweiseauto-complete
:quelle
company-mode
.popup-create
undpopup-delete
- je nach Anwendungsfall müssen Sie möglicherweise unterschiedliche Funktionen empfehlen.Hier ist eine Option, die robuster ist, fast nichts bricht (gelegentlich ist der Firmenmodus eine bemerkenswerte Ausnahme), aber nicht so bequem wie
fill-column-indicator
.Verwenden Sie das Kopfzeilenformat , um die 80. Spalte in der Kopfzeile zu markieren.
So etwas sollte ausreichen:
Sie sollten die Anzahl der Leerzeichen in dieser ersten Zeichenfolge in Abhängigkeit von der Größe Ihres linken Randes ändern. Davon abgesehen sollte dies jedoch einigermaßen gut funktionieren. Es ist nicht so praktisch wie ein Lineal im eigentlichen Puffer, aber es hilft.
Sie können es auch so einstellen, dass es nur auf Programmierpuffer angewendet wird.
Ergebnis:
Sie sollten ungefähr Folgendes erhalten (die erste Zeile befindet sich nicht im Puffer, sondern in der Kopfzeile).
quelle
M-x ruler-mode
.Nach vielem Leid wegen diverser Bugs habe
fill-column-indicator
ich es endgültig aus meiner Konfiguration entfernt.Derzeit verwende ich die integrierte Emacs-Funktionalität, um zu lange Zeilen hervorzuheben. Das sieht sogar besser aus, ich würde es
fill-column-indicator
jetzt nicht aktivieren, selbst wenn es fehlerfrei wäre.Zum einen können Sie mein Setup greifen:
Aktivieren Sie es dann, wo Sie möchten. Ich benutze es nur im Programmierkontext:
quelle
Emacs 27 unterstützt einen Füllspaltenindikator nativ über den Buffer-Local-Minor-Modus
display-fill-column-indicator-mode
und sein globales Gegenstückglobal-display-fill-column-indicator-mode
.Hier ist es in Aktion:
Quoth
(emacs) Displaying Boundaries
:quelle
Diese EmacsWiki-Seite enthält viele Informationen zu verschiedenen Möglichkeiten, eine bestimmte Spalte zu markieren oder Sie anderweitig zu informieren, wenn Sie daran vorbeigehen.
Das, was ich benutze, ist Mode Line Position .
In anderen Fällen wird eine vertikale Linie in der Spalte angezeigt (Spaltenmarkierung , Füllspaltenanzeige ) und im Leerzeichenmodus wird Text hervorgehoben, der über die Spalte hinausgeht.
(Wenn die Zeile in allen Zeilen weit rechts vom gesamten Text stehen muss, können Sie sie jederzeit
picture-mode
aktivieren. Dies ist hier jedoch wahrscheinlich nur als vorübergehende Problemumgehung hilfreich.)Siehe auch Lange Leitungen suchen, um bei Bedarf lange Leitungen zu finden.
quelle
Nicht genau das, was Sie wollen, aber Lineal wie @ Malabarba ♦ wird Platz verschwenden, hier ist eine bessere Lösung:
Es gibt ein eingebautes Paket in
emacs-goodies-el
(es wird empfohlen, es im Terminal zu installieren) mit dem Namen highlight-beyond-fill-column.el. Fügen Sie dies zu Ihrem hinzu.emacs
oderinit.el
:Der Text, hinter
fill-column
dem im Snippet 80 steht, wird mit der Farbe von hervorgehobenred
. Sie können das Gesicht einstellen, wie Sie möchten.quelle
Da
fill-column-indicator
es ziemlich schwer ist, zeigt diese Lösung ein Zeichen rechts von der aktuellen Zeile.Wenn Sie also tippen, können Sie das Zeilenlimit sehen, bevor Sie es überschreiten.
Dies definiert den Nebenmodus
hl-line-margin-mode
:Wenn Sie
evil-mode
den Einfügemodus verwenden und ihn einschränken möchten, können Sie die folgenden Hooks hinzufügen:quelle