2008-12-08 83 views
20

我在一段時間內沒有在Unix系統中使用vim,但是我記得沒有\ r,它總是\ n。Vim: n與 r

我在windows下使用gVim,當我使用搜索時,我使用了\ n。搜索\ r不返回任何內容。但是當我替換這些字符時我必須使用\ r's。 \ n的給我^ @

任何人都可以解釋這裏發生了什麼?在UNIX

+0

你應該改變接受的答案; Jonathan Leffer的回答是正確的,但與問題無關。 – sjy 2014-08-13 03:10:43

回答

17

查找起來:

:set fileformat=unix 
:set fileformat=dos 

這可以平臺上使用切換到其他編碼。

1

,裏面VIM,^V + <enter>給了我一個^M這是\r字符。

另外,在vim內部找不到\r,除非您告訴它以二進制模式編輯文件,即不使用自動檢測行結束的默認自動模式。 (它應該在狀態中打印[dos]。)

+1

FWIW,如果你的文件有一些以\ n結尾的行,而其他行以\ r \ n結尾,你會看到^ M個字符。如果有人使用Windows對文本文件執行編輯,您可能會混淆。 – 2008-12-08 20:07:16

+0

是的,當然,vim會選擇合理的結束行。 – mat 2008-12-08 20:10:15

2

我認爲問題可能在於Windows和Unix執行換行的方式。 Unix的格式是\ n(換行),但是對於Windows,它是\ r \ n(回車,換行)。

+0

你有這個倒退,UNIX是\ n(這是換行),Windows是\ r \ n(carraige return,換行), – Powerlord 2008-12-08 20:17:50

+0

感謝您糾正我。這是我的一個錯字。 – Sean 2008-12-08 20:40:36

0

在Windows中,如果以文本模式打開文件,\ n將被解釋爲換行符和換行符。這通常不是* nix系統的情況。

3

vim對回車符(\ r)和換行符(\ n)做了一些修改。舉例來說,如果你在Unix和VI顯示你在「^ M」結尾的行,因爲他們的Windows的文本文件,一個簡單的方法來擺脫他們是進入命令

:%s/^V^M/^V^M/g 

一點也沒有看起來它應該做任何事情,但它確實如此。

25

看起來像你問了兩件事。其中一個問題是\r\n其他人已經涉及。

另一個問題是替換右側的\n。如果你看看:h s/\n,它說\n在替換替換部分插入<NUL>/<NL>,而不是一個換行符。

如果您執行:%s/\n/\n/並在十六進制編輯器中保存並打開文件,則所有^@字符都是ASCII 0的(NUL字符)。爲什麼Vim在左側使用\n作爲行尾,\n在右側使用NUL超出了我的想象。但是這種特殊的行爲與Windows和Unix無關。

3
:%s/^V^M/^V^M/g 

同樣,下面做同樣的事情(我認爲),並更容易打出來。

:%s/\r/\r/g 
6

在幕後,Vim使用\ R(回車)來保存結束線(無論FILEFORMAT,正被讀取時,文件或寫入其中只有重要的)。 Vim使用\ n來表示NUL。但是,您搜索EOL爲\ n,但在替換中,\ n代表NUL。它的解釋如下:h sub-replace-sepcial。搜索\ r將找到不屬於fileformat的EOL的回車符。有一個很長的解釋:h文件格式。