Как я могу отключить отображение emacs последней строки в файле?

11

Одна из странностей vim заключается в том, что в конце файла не отображается пустая строка, если файл заканчивается символом новой строки. Таким образом, если файл не заканчивается новой строкой, отображение будет таким же, только с [noeol]маркером на моделине.

Emacs, с другой стороны, отображает последнюю строку, если файл заканчивается новой строкой, и не делает иначе.

Хотя поведение Emacs принципиально более разумно, к лучшему или худшему, я привык к первому.

Есть ли способ подавить отображение последней пустой строки, при этом все же требуя, чтобы файл был завершен новой строкой?

Emacs новая строка поведения

На скриншоте показаны три окна (если изображение слишком маленькое, просмотрите изображение на новой вкладке):

  1. Слева находится большое окно emacs hexl-mode, показывающее, что в конце файла действительно есть новая строка (0a, где находится курсор).

  2. Окно Emacs в правом верхнем углу, с курсором на пустой третьей строке.

  3. Окно Vim в правом нижнем углу с курсором на последней текстовой строке. Курсор не может двигаться ниже этой точки, даже если файл заканчивается новой [noeol]строкой (на строке состояния vim нет маркера).

Сикора
источник
Как отображается новая строка? Отображается ли он, потому что у вас включен какой-то второстепенный режим? Будет полезно поместить фрагмент из вашей настройки, который отображает последние символы новой строки. Скриншот этого тоже будет полезен.
Каушал Моди
2
Под «отображением» я не имею в виду визуальное представление новой строки. Я просто имею в виду, что я могу переместить курсор на эту строку.
Сыкора
Невозможно воспроизвести: imgur.com/IAoV7p9 То же самое поведение emacs -Q, должно быть что-то в вашем файле инициализации.
Т. Веррон
Или подождите ... вы имеете в виду, что вы не хотите иметь возможность перейти на эту линию, даже если линия существует? Я второй @kaushalmodi, скриншоты vim и поведение emacs были бы полезны.
Т. Веррон
3
@sykora Пожалуйста, попробуйте использовать минимальные скриншоты. На скриншоте много лишнего и избыточного пустого пространства, что делает его намного больше, чем нужно, что делает миниатюру практически бесполезной, поскольку она слишком мала, чтобы видеть, что происходит. При создании снимков экрана, пожалуйста, измените размер окна, чтобы соответствовать их содержанию.
lunaryorn

Ответы:

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)в вашем файле инициализации). Это показывает номера строк только для строк, которые имеют символ новой строки в конце.

  • Еще одна вещь, которая вам может понравиться - это включить whitespace-mode, по умолчанию это показывает серые $знаки на пустых строках, что позволяет вам видеть, какие строки пусты. Смотрите страницу Emacs Wiki здесь .

  • Аналогичным образом, установка indicate-empty-linesна tукажет вам, где находится последняя строка (см. Руководство по указателям краев здесь ).

ph0t0nix
источник