vimの挿入モードで2つの異なるファイルの違いが表示されないのはなぜですか?


8

2つのファイルを作成しましょう:

$ echo -n 'test' > test.txt
$ wc test.txt 
0 1 4 test.txt

ファイルにtest.txtは、末尾の改行が含まれていません。

$ echo 'test' > test_n.txt
$ wc test_n.txt 
1 1 5 test_n.txt

ファイルにtest_n.txtは、末尾の改行が含まれています。

上記の2つのファイルは明らかに異なりますがvim挿入モードの両方のファイルのプレビューには違いがありません。

$ vim test.txt

ここに画像の説明を入力してください

$ vim test_n.txt

ここに画像の説明を入力してください

なぜ違いがないのですか(改行または特別な区別)?

そしてvim挿入モードでそのような追加の文字を追加または削除するにはどうすればよいですか?


4
":set list"は違いを表示し、検査できるモードがあります。どちらもヘルプファイルにあります。
トーマスディッキー

ありがとう@ThomasDickey私は以前このオプションを知りませんでした。
simhumileco

1
@ThomasDickey回答を追加する場合は、おそらく受け入れられた回答になります。ありがとうございました。
simhumileco

2
@filbrandenはコメントに回答を投稿しないでください。コメントでの回答はコミュニティによって投票できず、質問に回答済みのマークを付けません。
terdon

2
@ThomasDickey上記を参照してください。回答として投稿してください。
terdon

回答:


12

vimには、ファイルの最後の行に改行文字がない場合に何をするかを指示するモード "eol"(行末)があります。あなたはvim(またはviのようなプログラム)のすべてのモード設定を見ることができます

:set all

POSIX VIは、ファイルがいずれかの長さがゼロであるか、このための機能を持っていない持っている末尾の改行を。これは、POSIX viがテキストファイルのみを扱うためです。これは、定義上、改行で終わる行です。簡単に確認すると、nviとelvisにはこのためのモードがありません。私のコメントでは、vimの詳細を忘れていました。vileとは異なり、「:setリスト」では欠落している改行がすぐに表示されません。これが私がvimで見るものです:

ssss$
test$
~
~

下劣な間:

ssss^J
test
~
~

どちらのエディターでも、ファイルを読み込んだり、モードを変更したりできます。たとえば、

:set noeol

そして、ファイルを書き出して、更新されたファイルの改行を取得します。直接表示するのではなく、vim のステータス行を変更してこの情報を表示できます。デフォルトでは、これを行うようには見えませんが、一部のパッケージャはこれをカスタマイズしています。たとえば、

"foo" [noeol] 2L, 9C                                          1,1           All

コメントの1つは「?」の使用を提案しています 修飾子setコマンド、例えば、

:set eol?

これは次のようなものになるかもしれません:

noendofline                                                   2,1           All

挿入モードでは、これは

-- INSERT --                                                  2,1           All

したがって、ステータスラインは、この情報を維持するのに適切な場所のようです。

機能はしばらくありました:

  • eolソースコードのコメントによると、この機能はvim 2.4(1994年7月)で初めて登場しました。

  • vileのnewlineモードは1993年7月に登場しました。

nvi、elvis、vim、vileはすべて、POSIX viのテキストファイルに加えてバイナリファイルを処理します)。


2
vimを使用して約20年、私はまだそれについて新しいことを学びます。そして私はまだemacsが怖いです。:D
Tim Kennedy

1
vimでは、:set eol?eolがオンかオフかを確認することもできるため、のすべての出力を確認する必要はありません:set all
ケビン

「ファイルの長さがゼロであるか、末尾に改行がある」というわかりやすい方法は、「すべての行が改行で終わり、テキストファイルが0行以上のシーケンスである」というものです。
R .. GitHub ICE HELPING ICEの停止
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.