在VIM中复合开关正则表达式

wjl*_*wjl 0 regex vim

我正在为一个教师重构一堆PHP代码.我决定做的第一件事是更新所有要用Drupal SQL编码约定编写的SQL文件,即大写关键字.我写了一些正则表达式:

:%s/create table/CREATE TABLE/gi
:%s/create database/CREATE DATABASE/gi
:%s/primary key/PRIMARY KEY/gi
:%s/auto_increment/AUTO_INCREMENT/gi
:%s/not null/NOT NULL/gi
Run Code Online (Sandbox Code Playgroud)

好的,这是一个开始.现在我只需打开vim中的每个SQL文件,运行所有五个正则表达式,然后保存.这感觉应该是它的五倍.他们可以复制到一个令人讨厌但很容易复制的正则表达式吗?

Ken*_*ent 6

为什么你要在vim中做到这一点?怎么样sed/awk?

例如用sed

sed -e 's/create table/\U&/g' -e's/not null/\U&/g' -e 's/.../\U&/' *.sql
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你可能会这样做

:%s/create table/\U&/g 
Run Code Online (Sandbox Code Playgroud)

改变案例,保存一些打字.

更新

如果你真的想要一个长命令在vi中执行,也许你可以尝试:

:%s/create table\|create database\|foo\|bar\|blah/\U&/g
Run Code Online (Sandbox Code Playgroud)