在進行字符串替換(:s/x/y/
)時,Vim對待^M
似乎存在某種不對稱。^v與vim替換字符串
也許一個例子是最好的;說我們有這個文本文件:
foo:bar:biz
我想分裂成行。這工作得很好:
:s/:/^M/g
(注意:^M
產生通過鍵入Ctrl-V
,Enter
)
這導致在文本文件中:現在
foo
bar
baz
,如果我撤消,然後再試一次,我注意到這是的不是工作:
:s/:/\n/g
這裏,得到的文本是:
foo^@bar^@biz
也就是說,它們是由ASCII NUL
字節(0x00
)加盟。
問題1:爲什麼用\n
代替NUL
字節?
現在,我想「好的,我猜^M
被用作Vim的'行分隔符'字符,我可以使用它'」。
所以我做的另一項實驗中,首先是一個項目每行文本文件:
foo
bar
baz
,現在,我想用冒號加入他們的行列,所以它看起來像第一個化身,以上。
於是我運行:
:%s/^M/:/
但這種失敗,出現錯誤:
然而,這個命令不會工作:
:%s/\n/:/
生產:
foo:bar:biz:
(我可以擺脫尾隨冒號自己的)
所以問題2:爲什麼在這種情況下,如果^M
不\n
工作?
最終,問題3:爲什麼會出現取決於它是否是一個字符串替換命令的左手或右手邊\n
和^M
之間的這種不對稱?
相關:http://stackoverflow.com/q/71323/5048383 – dNitro