vim的全局替换

来自 

本文是在学习《使用vi编辑器, Lamb & Robbins编著》时在所记的笔记。

本文内容:

基本全局替换

确认替换

上下文相关替换

本文约定:

$ + 命令 表示在普通的bash的命令行下

:  + 命令 表示在vim的ex(命令)模式, 按"Ctrl" + ":" 进入

------------------------------------------------------------------------------------------------


替换命令的基本语法

在全局替换中,ex编辑器使用指定的字符模式对文件中的每行进行检查。在所有行中发现模式的位置,ex使用新字符串来替换模式。

全局替换真正使用的是两个ex命令是 :g(global全局)和:s(switch替换)。

替换命令的语法如下:

:s / old / new / 

这将把当前中模式old的第一次出现修改为new。  /(斜杆)是命令不同部分之间的分隔符(当斜杆为该行的最后一个字符时,可不写)

下面这种形式的替换命令:

:s / old / new / g

把当前行old的每次出现改为new,而不只是该行的第一个old。:s命令允许替换串后面带有选项,上面语法中的g代表全局(g选项影响一行中的每个模式,不要把它与影响文件中所有行的:g命令混淆)

通过在:s命令前加上地址前缀,可以把它的范围扩展到多行。例如下面命令把50行到100行的old的每次出现都改为new:

:50, 100 s / old / new / g

下面的命令把整个文件中的old的每次出现都改为new:

:1, $s / old / new / g

我们知道%等价于1,$,所以上行命令也可以这样写:

:% s / old / new / g


确认替换

使用搜索替换命令有时候会出错,而得到不想要的结果。所以小心并确认文件中需要修改的内容是一个明智的做法

在替换命令尾部加上c (confirm用于确认),在替换每个old前都会提示并确认:

:1, 30 s /old/new/ gc

将会出现提示replace with hehe (y/n/a/q/l/^E/^Y)?

y替换,n不替换,a替换所有,q放弃,l替换第一个并进入插入模式,^E和^Y是提示你用Ctrl+e或Ctrl+y来滚动屏幕的。


上下文相关替换

除了直接使用一个单词(或短语)替换另一个,还有稍微复杂的全局替换语法。这些语法可以对一个模式进行搜索,一旦找到含有模式的行,就可以使用不同与模式的串进行替换,我们把这种替换叫做上下文相关替换。

语法格式如下:

:g /pattern/s/old/new/g  将会把包含pattern的行中,把所有old替换为new

第一个g表示是在文件的所有行上执行的命令,模式pattern识别要发生替换的行。在那些包含模式pattern的行上,ex将把old替换(s)为new。最后的g表示在该行上进行全部替换。

如果用来进行搜索的模式与想要修改的模式相同,那么就不必重复它:

:g/string/s//new/g 等价于  :g/string/s/string/new/g

还要注意:

:g/string/s//new/g 也等价于 :% s/string/new/g

可以用第二种方式少输一些字符

时间: 2024-10-12 19:58:31

vim的全局替换的相关文章

vim的全局替换[zz]&把字符替换成回车

本文出自   http://blog.csdn.net/shuangde800 本文是在学习<使用vi编辑器, Lamb & Robbins编著>时在所记的笔记. 本文内容: 基本全局替换 确认替换 上下文相关替换 本文约定: $ + 命令 表示在普通的bash的命令行下 :  + 命令 表示在vim的ex(命令)模式, 按"Ctrl" + ":" 进入 ----------------------------------------------

学习vi和vim编辑器(9):全局替换(2)

上一篇文章已经学习了如何通过vi编辑器中" :s "命令进行全局替换,而且可以在替换命令中使用正则表达式以进行强大的模式匹配.这一篇文章将学习模式匹配的更多范例,以进一步熟悉正则表达式. 模式匹配的范例: (1)匹配一个完整的单词:如下图所示,如果需要将文本里所有的child单词替换成为children,可能最先想到的就是下图所示的替换命令: 但是这个命令会把childrendish,Fabrichild这两个单词中的child都做替换,这不是我们想要的.替换的关键就是child要是一

vim(5):全局替换

vim全局替换文件: 语法为 :[addr]s/源字符串/目的字符串/[option] 全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. 如:"1,20" :表示从第1行到20行: "%" :表示整个文件,同"1,$": ". ,$" :从当前行到文件尾: s : 表示替换操作 [option] : 表示操作类型 如:g 表示全局替换; c 表示进行确认 p 表示替代结果逐行显示

学习vi和vim编辑器(8):全局替换(1)

本章学习vi编辑器中的全局替换命令.通过全局替换命令,可以自动替换文件中所有出现过的某个单词.全局替换一般会用到两个ex命令:":g"(global),":s"(substitute). 替换命令: 替换命令的语法如下: " :s/old/new/ ",该命令会将当前这一行中第一个出现的old模式替换为new.其中斜线用来分隔命令的各部分(如果斜线位于该命令的最后一个字符,则该斜线可以省略). " :s/old/new/g "

vim全局替换命令

语法为 :[addr]s/源字符串/目的字符串/[option] 全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. 如:“1,20” :表示从第1行到20行: “%” :表示整个文件,同“1,$”: “. ,$” :从当前行到文件尾: s : 表示替换操作 [option] : 表示操作类型 如:g 表示全局替换; c 表示进行确认 p 表示替代结果逐行显示(Ctrl + L恢复屏幕): 省略option时仅对每行第一个匹配串进行替换: 如果在源字

vim功能之替换和查找

vim有着强大的替换和查找功能,若能进行熟练的运用,可以让工作效率得到一个很大程度的提高. 替换 语法:[addr]s/源字符串/目的字符串/[option] [addr]表示检索范围,如: "1,n":表示从第1行到n行"%":表示整个文件,同"1,$"".,$":表示从当前行到文件尾 [addr]省略时表示当前行 s:表示替换操作,其为substitute的缩写 [option] : 表示操作类型,如: g:globe,表

Vim正则表达式匹配替换字符串

/********************************************************************** * Vim正则表达式匹配替换字符串 * 说明: * 用Vim用了几年了,平时也就替换字符串比较多,很少用正则表达式替换, * 今天在修改HTML文档的时候,不想一个一个去替换. * * 2018-6-1 深圳 宝安西乡 曾剑锋 ****************************************************************

windows全局替换字体

Win+R,输入regedit,按HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Fonts路径打开,右侧双击Microsoft YaHei & Microsoft YaHei UI (TrueType)和Microsoft YaHei Bold & Microsoft YaHei UI Bold(TrueType),将msyh.ttc和msyhbd.ttc,即微软雅黑和微软雅黑粗体改成自己喜欢的字体.字体需选择

vim中的替换操作

在vim中 :s(substitute)命令用于查找并替换字符串.使用方法如下: :s/<find-this>/<replace-with-this>/<flags> 例如: 1 :%s/foo/bar/g # 在全局范围内(%)查找foo并将之替换为bar,所有出现都会被替换(g) 2 :s/foo/bar/g # 在当前行内查找foo并将之替换为bar,所有出现都会被替换(g) 3 :'<,'>s/foo/bar/g # 在选区内进行替换,Visual模