Comment puis-je supprimer l'affichage par emacs du retour à la ligne final dans un fichier?

11

L'une des bizarreries de vim est qu'il n'affiche pas de ligne vide à la fin d'un fichier si le fichier se termine par le caractère de nouvelle ligne. De cette façon, si le fichier ne se termine pas par une nouvelle ligne, l'affichage est le même, uniquement avec le [noeol]marqueur dans la modélisation.

Emacs en revanche, affiche la dernière ligne si le fichier se termine par une nouvelle ligne, et ne le fait pas autrement.

Alors que le comportement d'Emacs est fondamentalement plus sensé, pour le meilleur ou pour le pire, je me suis habitué au premier.

Existe-t-il un moyen de supprimer l'affichage de la dernière ligne vide, tout en exigeant la fin du retour à la ligne du fichier?

Comportement de nouvelle ligne Emacs

La capture d'écran montre trois fenêtres (voir l'image dans le nouvel onglet si elle est trop petite):

  1. Grande fenêtre emacs à gauche hexl-mode, vous montrant qu'il y a vraiment une nouvelle ligne à la fin du fichier (0a, où le curseur est positionné).

  2. Fenêtre Emacs en haut à droite, avec curseur sur la troisième ligne vide.

  3. Fenêtre Vim en bas à droite, avec curseur sur la dernière ligne de texte. Le curseur ne peut pas se déplacer en dessous de ce point, même si le fichier se termine par une nouvelle ligne (il n'y a pas de [noeol]marqueur sur la ligne d'état vim).

sykora
la source
Comment la nouvelle ligne s'affiche-t-elle? S'affiche-t-il parce que certains modes mineurs sont activés? Il sera utile de mettre un extrait de votre configuration qui affiche les dernières nouvelles lignes. Une capture d'écran de cela serait également utile.
Kaushal Modi
2
Par "affichage", je ne veux pas dire qu'il y a une représentation visuelle de la nouvelle ligne. Je veux simplement dire que je peux déplacer mon curseur sur cette ligne.
sykora
Impossible de reproduire: imgur.com/IAoV7p9 Même comportement avec emacs -Q, il doit être quelque chose dans votre fichier init.
T. Verron
Ou attendez ... vous voulez dire que vous ne voulez pas pouvoir passer à cette ligne, même si la ligne existe? J'appuie @kaushalmodi, des captures d'écran du vim et du comportement emacs seraient utiles.
T. Verron
3
@sykora Veuillez essayer d'utiliser des captures d'écran minimales . Il y a beaucoup d'espace vide en excès et redondant dans la capture d'écran, ce qui la rend beaucoup plus grande qu'elle ne devrait l'être, ce qui rend la vignette presque inutile, car elle est trop petite pour voir ce qui se passe. Lorsque vous prenez des captures d'écran, veuillez redimensionner les fenêtres en fonction de leur contenu.
lunaryorn

Réponses:

1

Permettez-moi de faire une horrible suggestion pour mettre en œuvre cela:

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

(J'utilise un hook local parce que je soupçonne que le paramétrer globalement pourrait gâcher les choses sérieusement, donc mieux l'activer sur une base par tampon)

Sigma
la source
1

Ce ne sont probablement pas exactement ce que vous voulez, mais peuvent être utiles.

  • J'utilise le linum-modemode mineur dans tous mes tampons (définis (global-linum-mode t)dans votre fichier init). Cela affiche les numéros de ligne uniquement pour les lignes qui ont un caractère de nouvelle ligne à la fin.

  • Une autre chose que vous aimeriez peut-être activer whitespace-mode, par défaut, cela montre des $signes gris sur les lignes vides, vous permettant ainsi de voir quelles lignes sont vides. Voir la page Wiki Emacs ici .

  • De la même manière, le réglage indicate-empty-linessur tvous montrera où se trouve la dernière ligne (voir le manuel des indicateurs de frange ici ).

ph0t0nix
la source