Составление переключателя регулярных выражений в VIM - PullRequest
0 голосов
/ 23 сентября 2011

Я работаю над рефакторингом PHP-кода для инструктора. Первое, что я решил сделать, - это обновить все файлы SQL, которые будут написаны в соглашениях по кодированию SQL в Drupal, то есть ключевые слова в верхнем регистре. Я написал несколько регулярных выражений:

:%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

Хорошо, это начало. Теперь я просто открываю каждый файл SQL в vim, запускаю все пять регулярных выражений и сохраняю. Это в пять раз больше работы, чем должно быть. Могут ли они быть объединены в одно неприятно длинное, но легко копируемое регулярное выражение?

Ответы [ 3 ]

6 голосов
/ 23 сентября 2011

почему вы должны делать это в vim? как насчет sed / awk?

например. с седом

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
3 голосов
/ 23 сентября 2011
  1. Открыть файл, содержащий команды замещения.
  2. Копировать его содержимое (по умолчанию в безымянный регистр),

    :%y
    
  3. Если существует только один файл, в котором должны быть выполнены замены, откройте его как обычно и запустите содержимое этого регистра как обычный команда mode,

    :@"
    

    Если есть несколько файлов для автоматического редактирования, откройте эти файлы как аргументы,

    :args *.sql
    

    и выполнить замену для каждого файла в аргументе список

    :argdo @"|up
    

    (Команда :update, выполняющаяся после подстановок, пишет буфер в файл, если он был изменен.)

0 голосов
/ 23 сентября 2011

Хотя sed может справиться с тем, что вы хотите (однако он может быть интерактивным, как вы запрашиваете флаг 'i'), vim все еще очень мощный. Однажды мне нужно было изменить последний аргумент в вызове некоторой функции в базе кода SLM 1M. Аргументы могут быть в одной строке или в нескольких строках. В VIM я добился этого довольно легко.

Вы можете открыть все php файлы в vim одновременно:

vim *.php

После этого запустить в режиме ex:

:bufdo! %s/create table/CREATE TABLE/gi

Повторите остальные команды. В конце сохраните все файлы и выйдите из vim:

:xall
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...