¿Cómo puedo suprimir la visualización de emacs de la nueva línea final en un archivo?

11

Una de las peculiaridades de vim es que no muestra una línea vacía al final de un archivo si el archivo termina con el carácter de nueva línea. De esta manera, si el archivo no termina con una nueva línea, la visualización es la misma, solo que con el [noeol]marcador en la línea de modo.

Emacs, por otro lado, muestra la última línea si el archivo termina con una nueva línea, y no lo hace de otra manera.

Si bien el comportamiento de Emacs es fundamentalmente más sensible, para bien o para mal, me he acostumbrado a lo primero.

¿Hay alguna forma de suprimir la visualización de la última línea vacía, sin dejar de requerir que el archivo se finalice con una nueva línea?

Comportamiento de nueva línea de Emacs

La captura de pantalla muestra tres ventanas (vea la imagen en una pestaña nueva si es demasiado pequeña):

  1. Gran ventana de emacs a la izquierda hexl-mode, que le muestra que realmente hay una nueva línea al final del archivo (0a, donde se coloca el cursor).

  2. Ventana de Emacs en la parte superior derecha, con el cursor en la tercera línea vacía.

  3. Ventana de Vim en la parte inferior derecha, con el cursor en la última línea de texto. El cursor no puede moverse por debajo de este punto, aunque el archivo termine con una nueva línea (no hay ningún [noeol]marcador en la línea de estado de vim).

sykora
fuente
¿Cómo se muestra la nueva línea? ¿Aparece porque tienes algún modo menor habilitado? Será útil poner un fragmento de su configuración que muestre las últimas líneas nuevas. Una captura de pantalla de eso también sería útil.
Kaushal Modi
2
Por "mostrar", no quiero decir que haya una representación visual de la nueva línea. Simplemente quiero decir que puedo mover el cursor a esa línea.
sykora
No se puede reproducir: imgur.com/IAoV7p9 Con el mismo comportamiento emacs -Q, debe ser algo en su archivo de inicio.
T. Verron
O espera ... ¿quieres decir que no quieres poder moverte a esa línea, aunque la línea exista? Segundo @kaushalmodi, serían útiles las capturas de pantalla de vim y el comportamiento de emacs.
T. Verron
3
@sykora Intenta usar capturas de pantalla mínimas . Hay una gran cantidad de espacio en blanco excesivo y redundante en la captura de pantalla, lo que lo hace mucho más grande de lo necesario, lo que hace que la miniatura sea casi inútil, ya que es demasiado pequeña para ver lo que está sucediendo. Al tomar capturas de pantalla, cambie el tamaño de las ventanas para que se ajusten a sus contenidos.
lunaryorn

Respuestas:

1

Déjame darte una horrible sugerencia para implementar eso:

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

(Estoy usando un enlace local porque sospecho que configurarlo globalmente podría estropear las cosas en serio, así que mejor actívelo por búfer)

Sigma
fuente
1

Probablemente no sean exactamente lo que desea, pero pueden ser útiles.

  • Estoy usando el linum-modemodo menor en todos mis búferes (establecido (global-linum-mode t)en su archivo de inicio). Esto muestra números de línea solo para las líneas que tienen un carácter de nueva línea al final.

  • Otra cosa que quizás le guste es habilitar whitespace-mode, de manera predeterminada, esto muestra $signos grises en las líneas vacías, lo que le permite ver qué líneas están vacías. Vea la página Wiki de Emacs aquí .

  • De manera similar, la configuración indicate-empty-linesde tle mostrará dónde está la última línea (consulte el manual para ver los indicadores marginales aquí ).

ph0t0nix
fuente