Come posso sopprimere la visualizzazione di emacs della nuova riga finale in un file?


11

Una delle stranezze di vim è che non mostra una riga vuota alla fine di un file se il file termina con il carattere di nuova riga. In questo modo, se il file non termina con una nuova riga, il display è lo stesso, solo con l' [noeol]indicatore nella modeline.

Emacs d'altra parte, visualizza l'ultima riga se il file termina con una nuova riga e non diversamente.

Mentre il comportamento di Emacs è fondamentalmente più sensato, nel bene e nel male, mi sono abituato al primo.

Esiste un modo per sopprimere la visualizzazione dell'ultima riga vuota, pur richiedendo che il file venga terminato come nuova riga?

Emacs comportamento new-line

Lo screenshot mostra tre finestre (visualizza l'immagine in una nuova scheda se troppo piccola):

  1. Ampia finestra di emacs a sinistra in hexl-mode, che mostra che c'è davvero una nuova riga alla fine del file (0a, in cui è posizionato il cursore).

  2. Finestra Emacs in alto a destra, con il cursore sulla terza riga vuota.

  3. Finestra Vim in basso a destra, con il cursore sull'ultima riga di testo. Il cursore non può spostarsi al di sotto di questo punto, anche se il file termina con una nuova riga (non vi è alcun [noeol]marcatore sulla linea di stato vim).


Come viene visualizzata la nuova riga? Viene visualizzato perché hai attivato una modalità minore? Sarà utile inserire uno snippet dall'impostazione che visualizzi le ultime nuove righe. Sarebbe utile anche uno screenshot di questo.
Kaushal Modi,

2
Per "display", non intendo dire che esiste una rappresentazione visiva della nuova riga. Intendo semplicemente che posso spostare il cursore su quella linea.
Sykora,

Impossibile riprodurre: imgur.com/IAoV7p9 Stesso comportamento con emacs -Q, deve essere qualcosa nel file init.
T. Verron,

Oppure aspetta ... vuoi dire che non vuoi essere in grado di spostarti su quella linea, anche se la linea esiste? In secondo luogo, @kaushalmodi, sarebbero utili schermate della vim e del comportamento di emacs.
T. Verron,

3
@sykora Prova a utilizzare schermate minime . C'è molto spazio in eccesso e ridondante nello screenshot, rendendolo molto più grande di quanto deve essere, il che rende la miniatura quasi inutile, poiché è troppo piccola per vedere cosa sta succedendo. Quando acquisisci schermate, ridimensiona le finestre per adattarle al loro contenuto.
lunaryorn,

Risposte:


1

Permettetemi di dare un suggerimento orribile per implementare questo:

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

(Sto usando un hook locale perché sospetto che impostarlo a livello globale possa rovinare seriamente le cose, quindi meglio abilitarlo in base al buffer)


1

Questi probabilmente non sono esattamente quello che vuoi, ma possono essere utili.

  • Sto usando la linum-modemodalità minore in tutti i miei buffer (impostato (global-linum-mode t)nel tuo file init). Questo mostra i numeri di riga solo per le righe che hanno un carattere di nuova riga alla fine.

  • Un'altra cosa che ti potrebbe piacere è abilitare whitespace-mode, per impostazione predefinita questo mostra $segni grigi su linee vuote, permettendoti così di vedere quali linee sono vuote. Vedi la pagina Wiki Emacs qui .

  • In modo simile, l'impostazione indicate-empty-linessu tmostrerà dove si trova l'ultima riga (vedere il manuale per gli indicatori di frangia qui ).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.