语法为 :[addr]s/源字符串/目的字符串/[option]
全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行。 如:“1,20” :表示从第1行到20行; “%” :表示整个文件,同“1,$”; “. ,$” :从当前行到文件尾; s : 表示替换操作
[option] : 表示操作类型 如:g 表示全局替换; c 表示进行确认 p 表示替代结果逐行显示(Ctrl + L恢复屏幕); 省略option时仅对每行第一个匹配串进行替换; 如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
下面是一些例子: #将That or this 换成 This or that :%s/\(That\) or \(this\)/\u\2 or \l\1/ —- #将句尾的child换成children :%s/child\([ ,.;!:?]\)/children\1/g —- #将mgi/r/abox换成mgi/r/asquare :g/mg\([ira]\)box/s//mg//my\1square/g <=> :g/mg[ira]box/s/box/square/g —- #将多个空格换成一个空格 :%s/ */ /g —- #使用空格替换句号或者冒号后面的一个或者多个空格 :%s/\([:.]\) */\1 /g —- #删除所有空行 :g/^$/d —- #删除所有的空白行和空行 :g/^[ ][ ]*$/d —- #在每行的开始插入两个空白 :%s/^/> / —- #在接下来的6行末尾加入. :.,5/$/./ —- #颠倒文件的行序 :g/.*/m0O <=> :g/^/m0O —- #寻找不是数字的开始行,并将其移到文件尾部 :g!/^[0-9]/m$ <=> g/^[^0-9]/m$ —- #将文件的第12到17行内容复制10词放到当前文件的尾部 :1,10g/^/12,17t$ ~~~~重复次数的作用 —- #将chapter开始行下面的第二行的内容写道begin文件中 :g/^chapter/.+2w>>begin —- :/^part2/,/^part3/g/^chapter/.+2w>>begin —- :/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$
Vim 撤销 回退 操作
在vi中按u可以撤销一次操作
u 撤销上一步的操作
Ctrl+r 恢复上一步被撤销的操作注意:
如果你输入“u”两次,你的文本恢复原样,那应该是你的Vim被配置在Vi兼容模式了。 重做如果你撤销得太多,你可以输入CTRL-R(redo)回退前一个命令。换句话说,它撤销一个撤销。要看执行的例子,输入CTRL-R两次。字符A和它后面的空格就出现了:young intelligent turtle有一个特殊版本的撤销命令:“U”(行撤销)。行撤销命令撤销所有在前一个编辑行上的操作。 输入这些命令两次取消前一个“U”:A very intelligent turtlexxxx 删除veryA intelligent turtlexxxxxx 删除turtleA intelligent用“U”恢复行A very intelligent turtle用“u”撤销“U”A intelligent“U”命令自己改变自己,“u”命令撤销操作,CTRL-R命令重做操作。这有点乱,但不用担心,用“u”和CTRL-R命令你可以切换到任何状态。流行的文本编辑器通常都有前进和后退功能,可以在文件中曾经浏览过的位置之间来回移动。在 vim 中使用 Ctrl-O 执行后退,使用 Ctrl-I 执行前进。
vi/vim 中可以使用 :s 命令来替换字符串。该命令有很多种不同细节使用方法,可以实现复杂的功能,记录几种在此,方便以后查询。
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky n 为数字,若 n 为 .,表示从当前行开始到最后一行 :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符 :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/ :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/ 1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky 2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky (n 为数字,若 n 为 .,表示从当前行开始到最后一行) 3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky 4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符 :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/ 5. 删除文本中的^M 问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。 。 使用命令:cat filename1 | tr -d “^V^M” > newfile; 。 使用命令:sed -e “s/^V^M//” filename > outputfilename.需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M.你必须要手工进行输入,而不是粘贴。 。 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//. 。 :%s/^M$//g 如果上述方法无用,则正确的解决办法是: [Page] 。 tr -d \"\\r\" < src >dest 。 tr -d \"\\015\" dest 。 strings A>B 6. 替换确认 我们有很多时候会需要某个字符(串)在文章中某些位置出现时被替换,而其它位置不被替换的有选择的操作,这就需要用户来进行确认,vi的查找替换同样支持 例如 :s/vivian/sky/g 替换当前行所有 vivian 为 sky 在命令后面加上一个字母c就可以实现,即:s/vivian/sky/gc 顾名思意,c是confirm的缩写 7. 其它 利用 :s 命令可以实现字符串的替换。具体的用法包括: :s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1 :s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1 :。,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1 :1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1 :g/str1/s//str2/g 功能同上 从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索 字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作(原文地址: )