【vim】No newline at end of file
問題
gitで差分を確認するときなどに、以下のメッセージが出ます。
\ No newline at end of file
見た目には何も違わないように見えるのですが、なぜ?
答え
vimでテキストファイルを編集すると、「改行(\n)が付与される」。
POSIX的にはテキストファイル末尾には改行があるべきらしく、vimでテキストファイルを開いて保存すると改行が付く。
この挙動をしないようにするには、以下のコマンドを実行してからファイルを保存するとよい。
:set binary :set noeol
まとめて書くとこう。
:set binary noeol
混乱のもとは、ファイル末尾に改行を付与するエディタ(vim)とファイル末尾に改行を付与しないエディタ(他のエディタ)混在しているからかと思われる。
vimの挙動を確認
EmEditorで7文字入ったファイルを作る。末尾に改行はない。容量は7byte。
16進ダンプを確認。改行はない。
$ od -c test.txt 0000000 t e s t 1 2 3 0000007
vimで開いて何もしないで保存して終了(:wq)すると、容量が8byteになった。
16進ダンプを確認。改行が付与された。
$ od -c test.txt 0000000 t e s t 1 2 3 \n 0000010
:set binary noeol してから保存して終了(:wq)すると、容量は7byteになった。
改行は消えた。
$ od -c test.txt 0000000 t e s t 1 2 3 0000007
vimでは末尾の改行が見えないのも混乱の原因でしょうか。(noeolと表示はあるものの)
対策は……
テキストなのに、「バイナリだよ」と設定するのももやもやするところ。
vim的にはテキストファイルは「改行までが1行です」なのでしょう。
vimに合わせるなら、他のエディタでも行末に改行を入れるのがよいかもしれません。
他のエディタでは「行番号2」が見えても気にしないこと。
メモ
vscodeだとファイル末尾に改行を入れる設定がある。
"files.insertFinalNewline": true
コメント