Jak mogę wyłączyć wyświetlanie emacsa ostatniej linii nowego pliku?

11

Jednym z dziwactw Vima jest to, że nie pokazuje pustej linii na końcu pliku, jeśli plik kończy się znakiem nowej linii. W ten sposób, jeśli plik nie kończy się na nowej linii, wyświetlanie jest takie samo, tylko ze [noeol]znacznikiem w modeline.

Emacs, z drugiej strony, wyświetla ostatni wiersz, jeśli plik kończy się na nowej linii, i nie inaczej.

Podczas gdy zachowanie Emacsa jest zasadniczo bardziej rozsądne, na lepsze lub gorsze, przyzwyczaiłem się do tego pierwszego.

Czy jest jakiś sposób, aby ukryć wyświetlanie ostatniej pustej linii, jednocześnie wymagając, aby plik został zakończony nową linią?

Emacs zachowanie nowej linii

Zrzut ekranu pokazuje trzy okna (jeśli obraz jest zbyt mały, wyświetl obraz w nowej karcie):

  1. Duże okno emacs po lewej stronie hexl-mode, pokazujące, że na końcu pliku naprawdę znajduje się nowa linia (0a, w której znajduje się kursor).

  2. Okno Emacsa w prawym górnym rogu, z kursorem w pustej trzeciej linii.

  3. Okno Vima w prawym dolnym rogu, z kursorem w ostatnim wierszu tekstu. Kursor nie może poruszać się poniżej tego punktu, nawet jeśli plik kończy się nową linią ( [noeol]na linii statusu vim nie ma znacznika).

sykora
źródło
Jak wyświetlana jest nowa linia? Czy wyświetla się, ponieważ masz włączony mniejszy tryb? Przydatne będzie wstawienie fragmentu konfiguracji, który wyświetla ostatnie znaki nowego wiersza. Przydatny byłby również zrzut ekranu.
Kaushal Modi
2
Przez „display” nie rozumiem, że istnieje wizualna reprezentacja nowej linii. Chodzi mi po prostu o to, że mogę przesunąć kursor do tej linii.
sykora
Nie można odtworzyć: imgur.com/IAoV7p9 To samo zachowanie z emacs -Q, musi to być coś w twoim pliku init.
T. Verron
Lub poczekaj ... masz na myśli, że nie chcesz być w stanie przejść do tej linii, nawet jeśli linia istnieje? Po drugie @kaushalmodi, przydatne byłyby zrzuty ekranu vima i zachowanie emacsa.
T. Verron
3
@sykora Spróbuj użyć minimalnych zrzutów ekranu. Na zrzucie ekranu jest dużo nadmiaru i nadmiarowej pustej przestrzeni, co czyni go znacznie większym, niż powinien być, co czyni miniaturę prawie bezużyteczną, ponieważ jest zbyt mała, aby zobaczyć, co się dzieje. Podczas robienia zrzutów ekranu zmień rozmiar okien, aby pasowały do ​​ich zawartości.
lunaryorn

Odpowiedzi:

1

Pozwól, że dam okropną sugestię, aby wdrożyć:

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

(Korzystam z lokalnego hooka, ponieważ podejrzewam, że globalne ustawienie może poważnie zepsuć, więc lepiej włącz go dla poszczególnych buforów)

Sigma
źródło
1

Prawdopodobnie nie są to dokładnie to, czego chcesz, ale mogą być przydatne.

  • Używam linum-modetrybu pomocniczego we wszystkich moich buforach (ustawionych (global-linum-mode t)w pliku init). Pokazuje numery linii tylko dla linii, które mają znak nowej linii na końcu.

  • Inną rzeczą, którą możesz polubić, jest włączenie whitespace-mode, domyślnie wyświetla szare $znaki na pustych liniach, pozwalając w ten sposób zobaczyć, które linie są puste. Zobacz stronę Wiki Emacsa tutaj .

  • W podobny sposób, ustawiając indicate-empty-linessię tpokaże, gdzie jest ostatnia linia (zobacz instrukcję dla wskaźników pobocznych tutaj ).

ph0t0nix
źródło