Como posso suprimir a exibição da nova linha final do emacs em um arquivo?

11

Uma das peculiaridades do vim é que ele não mostra uma linha vazia no final de um arquivo se o arquivo terminar com o caractere de nova linha. Dessa forma, se o arquivo não terminar com uma nova linha, a exibição será a mesma, apenas com o [noeol]marcador na modelagem.

O Emacs, por outro lado, exibe a última linha se o arquivo terminar com uma nova linha e, caso contrário, não.

Embora o comportamento do Emacs seja fundamentalmente mais sensível, para o bem ou para o mal, eu me acostumei com o primeiro.

Existe alguma maneira de suprimir a exibição da última linha vazia, embora ainda exija que o arquivo seja encerrado com nova linha?

Comportamento de nova linha do Emacs

A captura de tela mostra três janelas (veja a imagem na nova guia, se for muito pequena):

  1. Janela grande do emacs à esquerda hexl-mode, mostrando que realmente há uma nova linha no final do arquivo (0a, onde o cursor está posicionado).

  2. Janela Emacs no canto superior direito, com o cursor na terceira linha vazia.

  3. Janela Vim no canto inferior direito, com o cursor na última linha do texto. O cursor não pode se mover abaixo desse ponto, mesmo que o arquivo termine com uma nova linha (não há [noeol]marcador na linha de status do vim).

sykora
fonte
Como a nova linha é exibida? É exibido porque você tem algum modo secundário ativado? Será útil colocar um trecho de sua configuração que exibe as últimas novas linhas. Uma captura de tela disso também seria útil.
Kaushal Modi
2
Por "exibição", não quero dizer que exista uma representação visual da nova linha. Simplesmente quero dizer que posso mover meu cursor para essa linha.
sykora
Não foi possível reproduzir: imgur.com/IAoV7p9 Mesmo comportamento com emacs -Q, deve ser algo no seu arquivo init.
T. Verron
Ou espere ... você quer dizer que não deseja poder passar para essa linha, mesmo que a linha exista? Segundo @kaushalmodi, capturas de tela do vim e do comportamento do emacs seriam úteis.
T. Verron
3
@sykora Por favor, tente usar screenshots mínimos . Há muito espaço em branco redundante e excessivo na captura de tela, tornando-a muito maior do que precisa, o que torna a miniatura quase inútil, pois é muito pequena para ver o que está acontecendo. Ao tirar screenshots, redimensione as janelas para ajustá-las ao conteúdo.
lunaryorn 29/09/14

Respostas:

1

Deixe-me dar uma sugestão horrível para implementar isso:

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

(Estou usando um gancho local porque suspeito que configurá-lo globalmente pode atrapalhar seriamente as coisas, portanto, habilite-o melhor por buffer)

Sigma
fonte
1

Provavelmente não é exatamente o que você deseja, mas pode ser útil.

  • Estou usando o linum-modemodo secundário em todos os meus buffers (definido (global-linum-mode t)no seu arquivo init). Isso mostra os números de linha apenas para as linhas que possuem um caractere de nova linha no final.

  • Outra coisa que você pode gostar é ativar whitespace-mode, por padrão, isso mostra $sinais em cinza nas linhas vazias, permitindo que você veja quais linhas estão vazias. Veja a página Wiki do Emacs aqui .

  • De maneira semelhante, a configuração indicate-empty-linespara tmostra onde está a última linha (consulte o manual para indicadores de franja aqui ).

ph0t0nix
fonte