emacsがファイルの最後の改行を表示しないようにするにはどうすればよいですか?


11

vimの奇妙な点の1つは、ファイルが改行文字で終わっている場合、ファイルの最後に空の行が表示されないことです。このように、ファイル改行で終わっていない場合、表示は同じ[noeol]ですが、モードラインのマーカーのみが表示されます。

一方、Emacsは、ファイルが改行で終わっている場合は最後の行を表示し、それ以外の場合は表示しません。

Emacsの振る舞いは根本的に賢明ですが、良くも悪くも、私は前者に慣れてきました。

最後の空の行の表示を抑制しながら、ファイルを改行で終了する必要がある方法はありますか?

Emacsの改行動作

スクリーンショットは3つのウィンドウを示しています(小さすぎる場合は、新しいタブに画像を表示します)。

  1. の左側の大きなemacsウィンドウ。hexl-modeファイルの最後(カーソルが置かれている場所)に改行が実際にあることを示しています。

  2. 右上のEmacsウィンドウ。空の3行目にカーソルがあります。

  3. 右下にVimウィンドウがあり、最後のテキスト行にカーソルがあります。ファイルが改行で終わっていても、カーソルはこのポイントの下に移動できません([noeol]vimステータスラインにマーカーはありません)。


改行はどのように表示されますか?マイナーモードが有効になっているために表示されますか?最後の改行を表示する設定からのスニペットを配置すると便利です。そのスクリーンショットも役に立ちます。
Kaushal Modi 2014

2
「表示」とは、改行を視覚的に表現することを意味するものではありません。単にその行にカーソルを移動できることを意味します。
sykora 2014

再現できません:imgur.com/IAoV7p9と同じ動作emacs -Qですが、initファイル内にある必要があります。
T.ヴァーロン2014

または待ってください...その行が存在していても、その行に移動できないようにしたいということですか?@kaushalmodiの2番目に、vimとemacsの動作のスクリーンショットが役立つでしょう。
T.ヴァーロン2014

3
@sykora 最小限のスクリーンショットを使用してみてください。スクリーンショットには多くの余分な冗長な空白スペースがあり、必要以上に大きくなっています。サムネイルが小さすぎて何が起こっているのかを確認できないため、サムネイルはほとんど役に立たなくなります。 スクリーンショットを撮るときは、コンテンツに合わせてウィンドウのサイズを変更してください。
lunaryorn 14

回答:


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ファイルで設定)。これは、末尾に改行文字がある行の行番号のみを示します。

  • あなたが好むかもしれないもう1つのことは、を有効whitespace-modeにすることです。デフォルトでは$、空の行に灰色の記号が表示されるため、どの行が空であるかを確認できます。Emacs Wikiページはこちらを参照してください

  • 同様に、に設定indicate-empty-linesするtと、最後の行の場所が表示されます(フリンジインジケーターについては、こちらのマニュアルを参照してください)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.