我在一段時間內沒有在Unix系統中使用vim,但是我記得沒有\ r,它總是\ n。Vim: n與 r
我在windows下使用gVim,當我使用搜索時,我使用了\ n。搜索\ r不返回任何內容。但是當我替換這些字符時我必須使用\ r's。 \ n的給我^ @
任何人都可以解釋這裏發生了什麼?在UNIX
我在一段時間內沒有在Unix系統中使用vim,但是我記得沒有\ r,它總是\ n。Vim: n與 r
我在windows下使用gVim,當我使用搜索時,我使用了\ n。搜索\ r不返回任何內容。但是當我替換這些字符時我必須使用\ r's。 \ n的給我^ @
任何人都可以解釋這裏發生了什麼?在UNIX
查找起來:
:set fileformat=unix
:set fileformat=dos
這可以平臺上使用切換到其他編碼。
,裏面VIM,^V
+ <enter>
給了我一個^M
這是\r
字符。
另外,在vim內部找不到\r
,除非您告訴它以二進制模式編輯文件,即不使用自動檢測行結束的默認自動模式。 (它應該在狀態中打印[dos]
。)
FWIW,如果你的文件有一些以\ n結尾的行,而其他行以\ r \ n結尾,你會看到^ M個字符。如果有人使用Windows對文本文件執行編輯,您可能會混淆。 – 2008-12-08 20:07:16
是的,當然,vim會選擇合理的結束行。 – mat 2008-12-08 20:10:15
在Windows中,如果以文本模式打開文件,\ n將被解釋爲換行符和換行符。這通常不是* nix系統的情況。
vim對回車符(\ r)和換行符(\ n)做了一些修改。舉例來說,如果你在Unix和VI顯示你在「^ M」結尾的行,因爲他們的Windows的文本文件,一個簡單的方法來擺脫他們是進入命令
:%s/^V^M/^V^M/g
一點也沒有看起來它應該做任何事情,但它確實如此。
看起來像你問了兩件事。其中一個問題是\r
與\n
其他人已經涉及。
另一個問題是替換右側的\n
。如果你看看:h s/\n
,它說\n
在替換替換部分插入<NUL>
/<NL>
,而不是一個換行符。
如果您執行:%s/\n/\n/
並在十六進制編輯器中保存並打開文件,則所有^@
字符都是ASCII 0的(NUL字符)。爲什麼Vim在左側使用\n
作爲行尾,\n
在右側使用NUL超出了我的想象。但是這種特殊的行爲與Windows和Unix無關。
:%s/^V^M/^V^M/g
同樣,下面做同樣的事情(我認爲),並更容易打出來。
:%s/\r/\r/g
在幕後,Vim使用\ R(回車)來保存結束線(無論FILEFORMAT,正被讀取時,文件或寫入其中只有重要的)。 Vim使用\ n來表示NUL。但是,您搜索EOL爲\ n,但在替換中,\ n代表NUL。它的解釋如下:h sub-replace-sepcial。搜索\ r將找到不屬於fileformat的EOL的回車符。有一個很長的解釋:h文件格式。
你應該改變接受的答案; Jonathan Leffer的回答是正確的,但與問題無關。 – sjy 2014-08-13 03:10:43