Vimは通常<EOL>
、元のファイルに1行があった場合にのみ最後の行に書き込みます。
常にファイルの最後に新しい行を書き込むようにvimを作成する方法(ファイルがバイナリではなく、まだない場合)?
eol
オプションをテストしましたが、期待どおりに機能しませんでした。
関連項目:テキストファイルの終わりで行末の欠落を保持しますが、反対です。そして:なぜファイルは改行で終わる必要があるのですか?
Vimは通常<EOL>
、元のファイルに1行があった場合にのみ最後の行に書き込みます。
常にファイルの最後に新しい行を書き込むようにvimを作成する方法(ファイルがバイナリではなく、まだない場合)?
eol
オプションをテストしましたが、期待どおりに機能しませんでした。
関連項目:テキストファイルの終わりで行末の欠落を保持しますが、反対です。そして:なぜファイルは改行で終わる必要があるのですか?
回答:
Vimはバッファーに最新の改行を表示しませんが、実際にはvimはファイルを書き込むときに常にEOLをファイルの最後に配置します。これはUnixシステムのテキストファイルの標準だからです。詳細については、こちらをご覧ください。要するに、vimのファイルの最後に新しい行がないことを心配する必要はありません。
この小さな実験を行って、この動作を確認できます。ターミナルで次を実行します。
$vim test_test
たとえば、文字のみを入力し、1
ファイルを保存します:w。
ファイルには1文字しかありませんよね?実際にはありません:)あなたは今あなたのファイル1
とLF
キャラクターを持っています。hexdumpユーティリティで確認しましょう:
$hexdump test_test
出力:
0000000 31 0a
0000002
31
文字のASCIIコードがあり1
、かつ0a
非印刷のASCIIコードでLF
すでに行の終わりのためのコードを知っている可能性としてUNIXの文字。
しかしeol
、ファイルの最後にシンボルがないファイルを開くとどうなりますか。それも確認しましょう。最後にeolなしでファイルを作成してみましょう。たとえば次のように:
$echo -n "1" > test_without_eol
そして、再びhexdumpで内部を見てみましょう。
$hexdup test_without_eol
出力は次のようになります。
000000 31
0000001
したがって、ここにはeol
文字はありません。このファイルをvimで開きましょう:
$vim test_without_eol
エディターの下部に表示されます:
"test_without_eol" [noeol] 1L, 1C
このファイルを保存すると、eol
キャラクターは自動的にパットされます。
ファイルの終わりを本当に見る必要がある場合。このコマンドを使用してみてください:
:set listchars=eol:$
すべてのeol
文字が$
記号として表示されます。
:set listchars=eol:$
Vimは唯一のファイルとして開かれた場合にEOLを省略'binary'
し、'endofline'
(とき開口部のバイナリファイルは、EOLを持っていなかった、または明示的にオプションをリセットする場合)オプションがリセットされます。言い換えれば、Vimはバイナリファイルの欠落したEOLのみを尊重します。テキストファイルの場合、常に(追加された)EOLで書き込みます。(だからこそ、EOLなしでテキストファイルを保持するために私のPreserveNoEOLプラグインのようなソリューションが必要です。)ですべての詳細を見つけることができます:help 'endofline'
。
そのため、VimにEOLを自動的に書き込ませるために、ファイルを非バイナリとして開くようにするだけです。
アレクサンダーが言及した、Vimはそのように(特にと混乱だ理由です、EOFでEOLを示していない空/ブランクの新しいライン、別のものである)ので、それは実際にファイルを保存上のすべての時間を書き込みます。
以下は、それが機能するかどうかをテストする簡単なテストです。
$ printf foo > foo.txt
$ cat foo.txt
foo$ wc foo.txt
0 1 3 foo.txt
$ vim -cwq foo.txt
$ cat foo.txt
foo
$ wc foo.txt
1 1 4 foo.txt
EOLがない場合のシェルプロンプトの動作に注意してください(次の行と混在します)。Vimでファイルを再保存すると、追加されます。
使用wc
すると、保存する前と保存した後の行、単語、文字をカウントできるため、実際に変更されていることがわかります。
なぜこれがとても重要なのですか?ファイルをPOSIX準拠に保つため。