magic选项
默认情况下,magic选项是打开的。你也可以在命令中,使用\m标记来指定使用magic模式。在启用magic选项的情况下,.
、*
和[]
等字符是含有特殊意义的;而+
、?
、()
、和{}
则仍被视为普通字符。
如果关闭了magic选项,那么正则表达式中的许多的特殊字符就失去了神奇的魔力,而变成普通的字符。
我们使用以下只有一行的文件来测试magic选项。先用:%print
命令将整个文件打印出来:
Test aaa* aa* a*
然后设置magic选项并且执行替换命令。其中,p标记打印出所改变的行:
:set magic
:1 substitute /a*/b/p
命令的执行结果如下:
bTest aaa* aa* a*
命令只是改变了一行开始的部分。因为*可以匹配0次或多次,而Test正是以0个a开始的,所有将Test替换为bTest。因为: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
你可以使用以下命令,查看相关帮助文件。
:help 'magic'
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选项 |