Zwischen Leerzeilen am Ende des Puffers und am unteren Rand des Fensters unterscheiden?

7

F: Wie kann ich eine visuelle Anzeige erhalten, die zwischen dem Ende des Puffers und dem unteren Rand des Fensters unterscheidet?

Anwendungsfall: Ich habe einen Puffer mit einigen Leerzeilen am unteren Rand. Der untere Rand des Fensters hinter den Leerzeilen ist jedoch ebenfalls leer. Ich möchte visuell erkennen können, wo der Puffer endet / Leerzeilen aufhören.

Vim tut dies mit Nicht-Text-Zeichen am unteren Rand eines Fensters (dh den Tildes), um anzuzeigen, dass sich in diesem Bereich nichts im Puffer befindet (z. B. Leerzeilen), wie im folgenden Screenshot dargestellt:

Vim Tildes

Wie würde man das Analogon dieser Vim-Funktion in Emacs bekommen?

EDIT: @ Glucas Antwort sieht richtig, aber ich würde gerne eine Antwort sehen , die nicht die Fransen nicht verwendet, wie ich meine zu Null gesetzt Platz auf dem Bildschirm auf einem kleinen Laptop - Bildschirm zu speichern.

Dan
quelle
Wie wäre es mit der empty-lineKomponente von, fringe-indicator-listum anzuzeigen, wo das Ende des Puffers beginnt? Zum Beispiel (setq fringe-indicator-alist '((empty-line . empty-line))) Fügen Sie zusätzliche Komponenten zum alist nach Wunsch. Diese Methode erfordert jedoch, dass ein Rand sichtbar ist. Siehe auch: reddit.com/r/emacs/comments/2kdztw/…
lawlist

Antworten:

7

Sie können anpassen indicate-empty-lines, um eine Streifenmarkierung in Zeilen nach dem Ende der Datei zu aktivieren, oder aufrufen toggle-indicate-empty-lines, um sie interaktiv ein- und auszuschalten.

Es gibt ein Paket auf MELPA, das die Standard-Randanzeige durch ein ~ ersetzt, um einen Blick zu erhalten, der näher an dem liegt, was Sie mit vi erhalten. Siehe vi-tilde-fringe.

Aktualisiert

Ein alternativer Ansatz wäre die Verwendung des Leerzeichenmodus, um Zeilenumbrüche sichtbar zu machen. Versuchen Sie es whitespace-newline-mode, möglicherweise das whitespace-newlineGesicht zu optimieren . Visuell ist dieser Ansatz beschäftigter als das, was vi tut, da Sie alle Zeilen im Puffer mit Ausnahme der leeren Zeilen nach dem Inhalt markieren , aber ein ähnliches Ergebnis erzielt. (Möglicherweise können Sie auch den Whitespace-Modus oder einen benutzerdefinierten abgeleiteten Modus so konfigurieren, dass nur leere Zeilen am Ende des Pufferinhalts hervorgehoben werden.)

Glucas
quelle
+1, da dies wahrscheinlich die Antwort sein wird. Ich benutze den Rand jedoch nicht, daher lasse ich die Frage etwas länger offen, um zu sehen, ob jemand eine Lösung ohne Rand hat.
Dan
4

Ich habe ein Paket geschrieben, char-font-lock , das (unter anderem) leere Zeilen am Ende eines Puffers hervorhebt.

Außerdem werden die letzte Zeile (falls sie nicht mit einer neuen Zeile endet), das Leerzeichen am Zeilenende, Tabulatorzeichen und Nicht-ASCII-Zeichen hervorgehoben. Sie können auswählen, welche der Dinge Sie hervorheben möchten.

Zum Beispiel: Geben Sie hier die Bildbeschreibung ein

Lindydancer
quelle
1
Hmm, das klingt nicht wirklich verwandt, da es darum geht, Dinge in das Fenster zu stellen, in denen keine Linien sind ...
wasamasa
1
Nein, die Frage war: "Wie kann ich einen visuellen Indikator erhalten, der zwischen dem Ende des Puffers und dem unteren Rand des Fensters unterscheidet?" Mein Paket markiert dazu leere Zeilen am Ende eines Puffers. Wenn Sie keine Hervorhebung erhalten, wissen Sie, dass die Datei mit einem einzelnen Zeilenumbruch am Ende der letzten nicht leeren Liste korrekt formatiert ist. Zugegeben, es werden Dinge wie vi nicht hervorgehoben, aber das war nicht Teil der Frage.
Lindydancer
Ich denke, dass das OP darum gebeten hat, leere Bildschirmzeilen anzuzeigen. Laut Ihrem Screenshot scheint Ihr Paket jedoch leere physische Zeilen hervorzuheben .
@unaryorn, ich habe es gelesen, als ob das OP die Tatsache nicht mag, dass leere Zeilen am Ende eines Puffers nicht sichtbar sind. ("Ich möchte in der Lage sein, visuell zu erkennen, wo der Puffer endet / Leerzeilen aufhören.")
Lindydancer
1
Einverstanden scheint der Punkt dieser Frage zu sein, wie man erkennt, wo der Pufferinhalt endet. Das Hervorheben der letzten Zeile (n) dieses Inhalts scheint ein ebenso gültiger Ansatz zu sein wie das Hervorheben des Bereichs nach dem Inhalt.
Glucas
3

Jemand hat ein Paket geschrieben, das eine Überlagerung verwaltet, die sich über den Bereich nach dem Ende der Datei erstreckt:

https://github.com/jmickelin/vim-empty-lines-mode

Beachten Sie jedoch, dass sich diese Lösung zwar korrekter verhält und auch in Terminals funktioniert, jedoch zwangsläufig weniger leistungsfähig und fehlerhafter ist als die Randanzeige.

Wasamasa
quelle
Nur eine Anmerkung: Dieser Nebenmodus macht das, was ich wollte, aber Benutzer sollten sich bewusst sein, dass er Overlays am Ende des Puffers nach jedem Befehl aktualisiert, sodass er möglicherweise etwas schwerer ist, als man es gerne hätte.
Dan
D'oh ... und es stellt sich heraus, dass es fehlerhaft ist und nicht gut mit Verengung zu spielen scheint.
Dan
Oh nein, die Antwort wurde nicht akzeptiert.
Wasamasa
Ja, tut mir leid, es ist ein guter Fund, aber ich werde mich aus den in meinen Kommentaren genannten Gründen vorerst zurückhalten, bis ich die Gelegenheit bekomme, ihn genauer zu testen.
Dan