在vi中,如果要删除行尾的换行符,可以用如下方法
第一种情况:只删除单行
如有文件如下:
[fanzf@SWserver ~/tmp]$ cat names.tmp
101 Nate H.
102 John M.
104 Cassy T.
106 Mary L.
107 Isaac C.
要将第一行和第二行合并,在命令行模式下可将光标移动到第一行,输入J(john,大写)即可;另外一种办法也是在命令行模式下,光标也移动到第一行,输入命令 :s//n//
运行效果如下
101 Nate H. 102 John M.
104 Cassy T.
106 Mary L.
107 Isaac C.
~
第二种情况:删除所有换行符
在命令行模式下,光标也移动到第一行,输入命令 :%s//n//g
效果如下
101 Nate H.102 John M.g104 Cassy T.g106 Mary L.g107 Isaac C.g
在以上命令中,
s 是替换,
/ 是间隔符,
/n 是换行负,即要替换的原串,
/n后面的//,是要指替换成的串,在这里表示无
两条删除命令的区别在于前面有无 % , 有%则在全文中替换
后面的g,是在整行中替换,由于每行最多只有一个换行,所以g在这里没实际意义
摘自:http://bbs.chinaunix.net/viewthread.php?tid=248620
在命令状态下,在某一行上按"J"键将Join下一行
J合并当前行和下一行
合并多行可以用.重复上一J命令或用nJ合并从当前行起的n行
为什么vi在文本的每行末尾都加上换行\n?
答案:因为文本每行末尾都应该加上换行。参考:http://stackoverflow.com/questions/729692/why-should-files-end-with-a-newline
根据2011年ISO发布的C语言标准C11(ISO/IEC 9899:2011)和C++标准C++11(ISO/IEC 14882:2011),每行末尾都应该换行。
Windows换行为\r\n,unix为\n,mac为\r。
vi:新建文件每行末尾都有\n。
二进制文件最后不需要换行,所以vi使用以下设置时文件末尾不会加上换行。
set binary
set noeol
但是不建议这样使用,因为set binary与set softtabstop冲突
vi如何显示\n:
set binary会把\r显示成ᶺM,而不显示\n。注:~/.vimrc中set binary有效,vi打开以后set binary无效。
set list会在每一行尾显示一个$,与\r或者\n都无关。