Usando VI, como posso pesquisar e substituir a seguinte instrução?
Pergunta
Eu preciso substituir o seguinte:
CREATE TABLE /*!32312 IF NOT EXISTS*/ `access`
para
CREATE TABLE IF NOT EXISTS `access`
eu tentei
:%s/\/\*\!\d+(.*)\*\//\1/g
Mas isso não parecia ir. O que estou fazendo errado?
Solução
O VIM requer retrocesso + (ou use * em vez disso). Além disso, você precisa de parênteses de agrupamento de barraca de barra. Desta forma:
:%s/\/\*\!\d\+\(.*\)\*\//\1/g
Sim, as regexes Posix de estilo antigo de Vim são péssimas:/
EDIT: Como mencionado nos comentários abaixo, + funciona se escapado como +. E d realmente é suportado, opa. Editou o exemplo regex para corrigir isso. Veja também o exemplo de Brian Carper para uma versão mais sucinta e legível.
Outras dicas
Use "muito mágica" e use delimitadores que não sejam o padrão para facilitar a leitura (e lembrar).
:%s@\v/\*!\d+(.*)\*/@\1@g
Sem "muito mágica", você tem que colocar uma barra de barriga na frente de +
e ()
(mas não na frente de *
ou algumas outras coisas). Não é muito consistente.
Um pouco diferente e mais eficiente com [^*]+ :-)
1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1