Wie kann ich die Anzeige der letzten Zeile in einer Datei durch Emacs unterdrücken?


11

Eine der Besonderheiten von vim ist, dass am Ende einer Datei keine leere Zeile angezeigt wird, wenn die Datei mit dem Zeilenumbruchzeichen endet. Wenn die Datei nicht mit einem Zeilenumbruch endet, ist die Anzeige auf diese Weise dieselbe, nur mit der [noeol]Markierung in der Modellreihe.

Emacs hingegen zeigt die letzte Zeile an, wenn die Datei mit einer neuen Zeile endet, und nicht anders.

Während Emacs Verhalten grundsätzlich vernünftiger ist, zum Guten oder Schlechten, habe ich mich an das erstere gewöhnt.

Gibt es eine Möglichkeit, die Anzeige der letzten leeren Zeile zu unterdrücken, während die Datei weiterhin beendet werden muss?

Emacs New-Line-Verhalten

Der Screenshot zeigt drei Fenster (Bild in neuem Tab anzeigen, wenn zu klein):

  1. Das große Emacs-Fenster links in hexl-modezeigt Ihnen, dass am Ende der Datei wirklich eine neue Zeile steht (0a, wo sich der Cursor befindet).

  2. Emacs-Fenster oben rechts mit dem Cursor in der leeren dritten Zeile.

  3. Vim-Fenster unten rechts mit dem Cursor in der letzten Textzeile. Der Cursor kann sich nicht unter diesen Punkt bewegen, obwohl die Datei mit einer neuen Zeile endet (es gibt keine [noeol]Markierung in der vim-Statuszeile).


Wie wird der Zeilenumbruch angezeigt? Wird es angezeigt, weil Sie einen Nebenmodus aktiviert haben? Es ist nützlich, ein Snippet aus Ihrem Setup einzufügen, das die letzten Zeilenumbrüche anzeigt. Ein Screenshot davon wäre auch nützlich.
Kaushal Modi

2
Mit "Anzeige" meine ich nicht, dass es eine visuelle Darstellung der Newline gibt. Ich meine einfach, dass ich meinen Cursor auf diese Zeile bewegen kann.
Sykora

Reproduzierbar nicht möglich: imgur.com/IAoV7p9 Gleiches Verhalten wie emacs -Q, es muss sich etwas in Ihrer Init-Datei befinden.
T. Verron

Oder warten Sie ... Sie meinen, dass Sie nicht in diese Zeile wechseln möchten, obwohl die Zeile vorhanden ist? Ich zweitens @kaushalmodi, Screenshots des vim und des Emacs-Verhaltens wären nützlich.
T. Verron

3
@sykora Bitte versuchen Sie, minimale Screenshots zu verwenden. Es gibt eine Menge von überschüssigem und redundanten Leerraum im Screenshot, so dass es viel größer als es sein muss, die die Miniatur fast unbrauchbar macht, da es zu klein ist , um zu sehen , was los ist. Wenn Sie Screenshots machen, passen Sie die Größe der Fenster an den Inhalt an.
Mondhorn

Antworten:


1

Lassen Sie mich einen schrecklichen Vorschlag machen, um dies umzusetzen:

(defun make-eof-intangible ()
  (interactive)
  (add-hook 'post-command-hook (lambda ()
                                 (when (and (equal (point) (point-max))
                                            (looking-back "\n"))
                                   (backward-char))) t t))

(Ich verwende einen lokalen Hook, weil ich vermute, dass das globale Einstellen die Dinge ernsthaft durcheinander bringen könnte. Aktivieren Sie ihn daher besser pro Puffer.)


1

Diese sind wahrscheinlich nicht genau das, was Sie wollen, können aber nützlich sein.

  • Ich verwende den linum-modeNebenmodus in allen meinen Puffern ( (global-linum-mode t)in Ihrer Init-Datei festgelegt). Dies zeigt Zeilennummern nur für die Zeilen an, die am Ende ein Zeilenumbruchzeichen haben.

  • Eine andere Sache, die Sie vielleicht mögen, ist das Aktivieren whitespace-mode. Standardmäßig werden graue $Zeichen auf leeren Zeilen angezeigt , sodass Sie sehen können, welche Zeilen leer sind. Siehe die Emacs Wiki Seite hier .

  • In ähnlicher Weise zeigt Ihnen die Einstellung indicate-empty-linesauf t, wo sich die letzte Zeile befindet (siehe Handbuch für Randanzeigen hier ).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.