今天在使用vim(ubuntu)时遇到了一个问题,使用s/foo/bar/替换时,如果要在bar中包含换行符,那么使用\n是无法达到目的的。
而我们已经清楚,在ubuntu下换行符为\n,(windows下为\r\n,Mac下为\r)。但是如果在s/foo/bar/中的bar中包含\n(例如s/foo/\naaa/),替换完成后,会看到替换为^@aaa,而不是我们希望的在foo之前换行。
google了下,原来vim当中s/foo/bar/, foo和bar中的换行符是不同的,foo当中的换行符要根据不同的文件格式(unix/windows/mac)来确定,而bar中的换行符只有一种就是:\r。无论文件格式是哪一种,vim都会将bar中的\r替换为相应的换行符。所以在ubuntu下面执行:
s/\n/\r/事实上文档没有进行任何改动
在windows下面执行s/\r\n/\r/也是相同的效果。