中可見我有textfile
CRLF行結束符。該文件包含兩行文本(顯示在VIM):爲什麼sed make行結束符在vim
foo bar
說我想找到模式foo
與goo
更換整個行,所以我跑:
sed -i 's/foo.*/goo/' textfile
textfile
表示在手術後Vim是這樣的:
goo bar^M
我的問題是:爲什麼以前隱藏的回車在Vim中變得可見?
中可見我有textfile
CRLF行結束符。該文件包含兩行文本(顯示在VIM):爲什麼sed make行結束符在vim
foo bar
說我想找到模式foo
與goo
更換整個行,所以我跑:
sed -i 's/foo.*/goo/' textfile
textfile
表示在手術後Vim是這樣的:
goo bar^M
我的問題是:爲什麼以前隱藏的回車在Vim中變得可見?
的命令:
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」。 ...
這回答我的問題,並提供了一個解決方案的問題。謝謝! – gortsu
這正是發生了什麼,但也許可以用_consistently_而不是_conseque_?在':h file-formats'中有一個有用的段落,我也將添加到這個答案中(如果您開始編輯...只有當所有行以結尾時,'fileformat'設置爲「dos」,否則它設置爲「unix」) –
sidyll
讓我改變/添加。感謝您的評論! – hek2mgl