如何抑制emacs在文件中显示最后换行符?


11

vim的一个怪癖是,如果文件以换行符结尾,则在文件末尾不会显示空行。这样,如果文件以换行符结尾,则显示是相同的,只是[noeol]在modeline中带有标记。

另一方面,如果文件以换行符结尾,则Emacs显示最后一行,否则不显示。

尽管Emacs的行为从根本上讲是明智的,但无论好坏,我已经习惯了前者。

有什么办法可以抑制最后一个空行的显示,同时仍然要求文件以换行符终止?

Emacs换行行为

屏幕截图显示了三个窗口(如果太小,则在新选项卡中查看图像):

  1. 左侧大emacs窗口hexl-mode,向您显示文件末尾确实有换行符(光标位于0a处)。

  2. Emacs窗口在右上角,光标在第三行空白处。

  3. Vim窗口在右下角,光标在最后一个文本行上。即使文件以换行符结尾([noeol]在vim状态行上没有标记),光标也不能移动到该点以下。


换行符如何显示?因为启用了一些次要模式,它会显示吗?在您的设置中放入显示最后换行符的代码段将很有用。屏幕截图也将很有用。
Kaushal Modi 2014年

2
所谓“显示”,并不是说换行符具有视觉效果。我只是意味着我可以将光标移动到该行。
sykora 2014年

无法复制:imgur.com/IAoV7p9与的行为相同emacs -Q,它必须在您的init文件中。
T. Verron 2014年

还是等待...您的意思是即使该行存在,您也不想移动到该行?我第二个@kaushalmodi,vim和emacs行为的屏幕截图将很有用。
T. Verron 2014年

3
@sykora请尝试使用最少的屏幕截图。屏幕截图中有很多多余和多余的空白,使其比所需的要大得多,这使缩略图几乎无用,因为它太小了以至于无法查看正在发生的情况。 截屏时,请调整窗口大小以适合其内容。
lunaryorn 2014年

Answers:


1

让我提出一个可怕的建议来实现这一点:

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

(我使用的是本地钩子,因为我怀疑在全局范围内设置它可能会导致混乱,因此最好在每个缓冲区上启用它)


1

这些可能不完全是您想要的,但可能很有用。

  • linum-mode在所有缓冲区中都使用了次要模式((global-linum-mode t)在您的init文件中设置)。这仅显示末尾带有换行符的行的行号。

  • 您可能想要启用的另一件事是whitespace-mode,默认情况下,这会$在空行上显示灰色符号,从而使您可以看到哪些行是空的。在此处查看Emacs Wiki页面

  • 以类似的方式,设置indicate-empty-linest将显示最后一行的位置(请参见此处的边缘指示器手册)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.