Vamos a usar algo que llamo búsqueda condicionada en VI: buscar un texto que vaya o no seguido de otro. En el editor de texto VI podemos usar expresiones regulares para buscar patrones en el texto. Esto es de mucha ayuda.
Desde hace tiempo las etiquetas para señalar el inicio del código php “<?” no se aceptan. Esto se hace para evitar que se confunda con la de procesamiento de declaraciones XML:
<?xml version="1.0" encoding="utf-8" ?>
Para eso hay que usar la etiqueta “<?php” y así no hay problema. Siguen sirviendo las etiquetas <?= para insertar variables directamente:
... <P><?=$variable?></P> ...
Busqueda y sustitución automática en VI
Buscar y sustituir texto en vi es muy fácil y podéis encontrar aquí una paqueña explicación.
Para buscar y sustituir estas etiquetas automáticamente se puede usar la siguiente instrucción:
:%s/<?\(php\|=\)\@!/<?php /g
Esto lo que hace es buscar en todo el fichero (“%”) las apariciones del texto “<?” que no vayan seguidas (“@!”) de “php” o “=” y las sustituye (la s del principio) por “<?php ” (lo que va detras de la segunda “/” es lo que va a sustituir a lo encontrado). Al final (detrás de la tercera “/”) viene una “g” para que la sustitución se haga globalmente, por si hay más de una aparición por línea, también se puede poner una “i” para indicar que no se diferencie mayúsculas de minúsculas, quedaría:
:%s/<?\(php\|=\)\@!/<?php /gi
Como véis hay barras invertidas “\” en algunos sitios para diferenciar esos caracteres especiales de los que debe considerar como texto a buscar, como en los paréntesis que son para agrupar las opciones.
He añadido el espacio después de php por si hay alguna línea que tenga código después de <?php para que no quede pegado y dé un error (“<?phpecho”, por ejemplo).
La sintaxis de \@! es un poco confusa porque va después del patrón que no debe encontrar.
Esto puede ser útil para utilizar la expresión en sed o algún programa de búsqueda de texto en ficheros que admita expresiones regulares pero no sé si funcionara de la misma forma.
En principio no parece algo complicado pero para que se haga automático hay que tener en cuenta que no se han de sustituir todas las apariciones de la etiqueta corta sino las que cumplen unas condiciones por eso lo de búsqueda condicionada.