magic选项
默认情况下,magic选项是打开的。如果关闭了此选项,那么正则表达式中的许多的特殊字符就失去了他们神奇的魔力,而变成了普通的字符。
我们使用以下只有一行的文件来测试magic选项。先用:%print
命令将整个文件打印出来:
Test aaa* aa* a*
然后设置magic选项并且执行替换命令。其中,p标记打印出所改变的行:
:set magic
:1 substitute /a*/b/p
命令的执行结果如下:
bTest aaa* aa* a*
命令只是改变了一行开始的部分。为什么会将Test变为b*Test呢?这是因为*可以匹配0次或是多次,而Test正是以0个a开始的。为什么只是替换了一次呢?这是因为:substitute命令中是改变第一个出现的地方,如果我们使用g标记就可以替换全部的匹配项了。如果希望g标记成为默认设置,那么可以使用:set gdefault
命令。
我们撤销刚才的命令并再次执行替换命令:
:undo
:1 substitute /a*/b/pg
命令的执行结果如下:
bTest b*b b*b b*
如果在关闭magic选项的情况下再次执行命令:
:undo
:set nomagic
:1 substitute /a*/b/pg
命令的执行结果如下:
Test aab ab b
smgic命令
:smagic命令,可以在执行替换命令时强制转换*等特殊字符的意义。例如我们执行以下命令:
:smagic /a*/b/pg
命令的执行结果如下:
bTest b*b b*b b*
:snomagic命令,强行关掉magic选项:
:snomagic /a*/b/pg
命令的执行结果如下:
Test aab ab b
:set magic | 打开magic选项 |
:set nomagic | 关闭magic选项 |
:smagic | 强制使用magic选项 |
:snomagic | 强制禁用magic选项 |