vim 末尾會自動添加 ?

比如我用vim編輯一個文件,內容是hello world,然後保存退出,vim會在world之後添加一個
,怎麼設置能避免vim的這種行為。

難道是我起床的方式不對?


這是 Windows 和 Linux 對文本文件的定義區別。

Windows 認為
是文本行之間的「分隔符」, 所以只有兩行之間才需要
,一行文本不需要
。Windows 中具有 10 行的文本應該有 9 個
「分隔符」。

Linux 認為
是文本行的「結束符」,一個有效的文本行必須包含
符號,否則根本不是個有效的文本文件。Linux 中具有 10 行的文本應該有 10 個
「結束符」。

vim 遵循的是 Linux 的定義,結尾沒有
的文本文件不是一個合法的文本文件,因此必須加上。

當然,如果你只是需要一個選項禁止這個行為,可以用 Ruchee 的方法,不過這樣產生的文本對某些工具不兼容。


我來解釋一下 @pansz 和 @蕭井陌 二人回答的意思。在 Unix 以及 Linux shell 下非常常見的一種操作是用 cat 把兩個文件連接起來。砍掉 EOF 之後,如果第一個文件的結尾沒有
,那麼第二個文件的第一行就會貼到第一個文件的最後一行之後,這樣就很容易引發問題。如果需要跨平臺處理類似的問題,一個常見的做法是在可能接在後面的文件前面加一行註釋或者留一個空行,這樣萬一第一行跟在後面也不會造成很大影響。


試試這個,我也是搜索來的,因為自己從沒遇到過這樣的現象:

set binary

set noendofline


等你某一天發現你的編譯器因為你沒有在文件尾部加換行符而報錯就就會後悔改vim行為這個決定了。。


最後一行沒有
的話,cat多個文件的時候會分不清文件界線,cat單個文件的時候終端的提示符會停在最後一個字元後面,顯得很奇怪


linux默認的text文件都需要
結尾,建議不要修改這種特性,

如果不需要
,應該將該文件視為binary文件,保存文檔前執行 :set bin noeol 即可


推薦閱讀:

用vim被人說裝逼,怎麼辦?

TAG:文本編輯器 | Vim | vimrc | Vim插件 |