2017-02-09 37 views
2

中可見我有textfile CRLF行結束符。該文件包含兩行文本(顯示在VIM):爲什麼sed make行結束符在vim

 
foo 
bar 

說我想找到模式foogoo更換整個行,所以我跑:

 
sed -i 's/foo.*/goo/' textfile 

textfile表示在手術後Vim是這樣的:

 
goo 
bar^M 

我的問題是:爲什麼以前隱藏的回車在Vim中變得可見?

回答

3

的命令:

sed -i 's/foo.*/goo/' textfile 

除去從行的端部的自\r\r只供sed的在UNIX上,通過.*匹配的任意的炭。

看起來像Vim足夠聰明,只要在文件中使用一致,就不會顯示用於Windows樣式回車的^ M。由於上述sed命令,它們不再一致地被使用,因爲它僅從符合foo.*的行中刪除\r

如果這是你的問題,我建議使用:

sed -i 's/foo.*/goo\r/' textfile 

sydill's comment向我指出正確的手冊中描述該行爲::help file-formats

...如果你開始編輯一個新文件並且'fileformats'選項不是空的 (這是默認的),Vim將嘗試檢測文件 ar e以指定的格式分隔。當設置爲「unix,dos」時,Vim將 檢查一行(在Unix和Amiga上使用)或 (MS-DOS)行。只有當全部行結束時,'fileformat'將 設置爲「dos」,否則設置爲「unix」。當'fileformats'包含「mac」時, 並且在該文件中找不到任何字符,'fileformat'被設置爲「mac」。 ...

+0

這回答我的問題,並提供了一個解決方案的問題。謝謝! – gortsu

+1

這正是發生了什麼,但也許可以用_consistently_而不是_conseque_?在':h file-formats'中有一個有用的段落,我也將添加到這個答案中(如果您開始編輯...只有當所有行以結尾時,'fileformat'設置爲「dos」,否則它設置爲「unix」) – sidyll

+1

讓我改變/添加。感謝您的評論! – hek2mgl