我正在为一个教师重构一堆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
好的,这是一个开始。现在我只需打开vim中的每个SQL文件,运行所有五个正则表达式,然后保存。这感觉应该是它的五倍。他们可以复制到一个令人讨厌但很容易复制的正则表达式吗?
答案 0 :(得分:6)
你为什么要在vim中这样做?怎么样sed / awk?
e.g。用sed
sed -e 's/create table/\U&/g' -e's/not null/\U&/g' -e 's/.../\U&/' *.sql
顺便说一句,你可以做vi
:%s/create table/\U&/g
改变案例,保存一些打字。
<强>更新强>
如果你真的想在vi中执行一个长命令,也许你可以试试:
:%s/create table\|create database\|foo\|bar\|blah/\U&/g
答案 1 :(得分:3)
复制其内容(默认情况下为未命名的寄存器),
:%y
如果只有一个文件应该执行替换, 像往常一样打开它并将该寄存器的内容作为Normal运行 mode命令,
:@"
如果要自动编辑多个文件,请将该文件打开为 参数,
:args *.sql
并对参数中的每个文件执行yanked替换 列表中,
:argdo @"|up
(替换后运行的:update
命令,写入
如果已经更改,则提交缓冲区。)
答案 2 :(得分:0)
虽然sed可以处理你想要的东西(当你通过标志'i'请求时它可以是交互式的),vim仍然非常强大。一旦我需要在1M SLOC代码库中的某个函数调用中更改最后一个参数。参数可以是一行或多行。在vim中,我很容易实现它。
您可以一次打开vim中的所有php文件:
vim *.php
在ex模式下运行之后:
:bufdo! %s/create table/CREATE TABLE/gi
重复其余命令。最后保存所有文件并退出vim:
:xall