47

私はWordpressを頻繁に使用していますが、特にデバッグ時に何が起こっているのかを理解するために、Wordpressのコアファイルを一時的に変更することがありました。今日は少し驚きました。git status変更をgitリポジトリにコミットする準備ができたとき、Wordpressファイルの1つがコミット用にステージングされていないものとしてマークされていることに気付きました。そのファイルを閉じる前に行ったすべての変更を元に戻したことを覚えているので、diff何が変更されたかを確認するために使用することにしました。プロジェクトのファイルを、ダウンロードディレクトリに保存しているWordpressコピーのファイルと比較しました。最後にファイルが異なることがわかりました。diff元のファイルの最後に改行がないことを示します。

1724c1724
< }
\ No newline at end of file
---
> }

私もその線に触れたことはありません。大きなファイルの途中で行った変更。これにより、vimがファイルの最後に改行文字を追加したと思います。なぜそれが起こるのでしょうか?

4

5 に答える 5

54

ここで見たすべての回答は、「Vimがファイルの最後に改行文字を追加しないようにするにはどうすればよいですか?」という質問に対応していますが、「 Vimがファイルの最後に改行を追加するのはなぜですか?」という質問です。 "。私のブラウザの検索エンジンが私をここに連れてきました、そして私はその質問に対する答えを見つけられませんでした。

これは、POSIX標準が行を定義する方法に関連しています(ファイルが改行で終わる必要がある理由を参照してください)。したがって、基本的に、行は次のとおりです。

3.206ライン
0個以上の非<newline>文字と終了する<newline>文字のシーケンス。

したがって、それらはすべて改行文字で終了する必要があります。そのため、Vimはデフォルトで常に改行を追加します(POSIXによれば、改行は常に存在する必要があるため)。

それをしているのはそれだけではありません。GNOMEのデフォルトのテキストエディタであるGeditは、まったく同じことを行います。


編集

他の多くのツールもその改行文字を期待しています。たとえば、次を参照してください。

また、興味があるかもしれません:Vimはファイルの終わりに改行を表示します

于 2015-07-15T09:28:08.643 に答える
17

vimテキストエディタであるため、ファイルを「クリーンアップ」できる場合があります。末尾の改行なしで書く方法の詳細については、 http: //vimhelp.appspot.com/vim_faq.txt.html#faq-5.4を参照してください。

ファイルの最後に改行(EOL)を付けずにファイルを書き込むにはどうすればよいですか?

eolこのオプションをオフにしbinaryて、ファイルの最後にEOLなしでファイルを書き込むオプションをオンにすることができます。
   :set binary
   :set noeol
   :w

または、次を使用することもできます。
   :set noeol
   :w ++bin

于 2013-01-05T11:26:48.143 に答える
6

改行の追加はVimのデフォルトの動作です。必要ない場合は、次のソリューションを使用してください。VIMファイルの終わりで自動改行を無効にする

無効にするには、これを.vimrcに追加します

set fileformats+=dos
于 2013-01-05T11:25:27.060 に答える
4

次の行を.vimrcに入れることができます

autocmd FileType php setlocal noeol binary

これでうまくいくはずですが、実際にはあなたのアプローチはやや間違っています。まず第一に、php終了することをまったく気にしないでください。第二に、変更を保存したくない場合は、を押しuたり、さらに悪いことに手動でファイルの状態を再作成しようとしないでください。保存せずに終了してq!ください。エディターを離れて何らかの理由で保存した場合は、試してみてくださいgit checkout <file>

于 2013-01-05T11:25:43.903 に答える
0

3.206行0個以上の非文字と終了文字のシーケンス。

興味深いことに、vimを使用すると、新しいファイルを開いてファイルを書き込むことができ、ファイルはゼロバイトになります。新しいファイルを開き、を使用して行を追加するとo、ファイルは2文字の長さになります。上記のファイルを開いてバックアップし、2行目を削除しddてファイルを書き込むと、1バイトの長さになります。バックアップしたファイルを開き、残っている唯一の行を削除して、ファイルを書き込みます。これはゼロバイトになります。したがって、vimは、完全に空である限り、ゼロバイトのファイルを書き込むことができます。上記のposixの定義に反するようです。私は推測する...

于 2017-01-19T18:40:43.413 に答える