php - minimalist - vim plug in manager
Encontrar todas las etiquetas cortas de PHP (8)
Encontrar
</?(/s|/n)
Reemplazar
<?php$1
Explicación de coincidir etiqueta corta </?
seguido de un espacio o una nueva línea (/s|/n)
y almacenar en $1
Todas las soluciones proporcionadas coinciden con lo que la línea no contiene, en lugar de lo que se garantizará que contenga.
Solo queremos coincidir con la etiqueta corta, y no nos importa lo que venga después (p / x / = etc). Esta búsqueda / reemplazo coincidirá con las etiquetas cortas en línea y las etiquetas cortas en nueva línea.
Nota: Si está utilizando saltos de línea de Windows, </?(/s|/r/n)
coincidirá con el mismo.
Necesito encontrar todas las etiquetas cortas de PHP.
La expresión regular para ella </?(?!php)
pero no puedo usarla en vim.
¿Cómo "convertirlo" a vim?
El patrón correcto de anticipación que está buscando es <?/(php/)/@!
que coincidirá con todas las etiquetas cortas, excepto las seguidas por php
Para obtener más detalles sobre las aseveraciones anticipadas / posteriores, simplemente escriba :help /@
in vim
La mejor manera de encontrar etiquetas cortas en vim es encontrar todas las apariciones de <?
no seguido por una p
:
/<?[^p]
La razón por la que su expresión regular está fallando en vim es porque /?
encuentra signos de interrogación literales, mientras que /?
es un cuantificador; /</?
in vim intentará encontrar 0 o 1 signos menos que. Esto es al revés de lo que cabría esperar en la mayoría de los motores de expresión regular.
Si desea hacer coincidir las etiquetas cortas seguidas inmediatamente por una nueva línea, no puede usar [^p]
, lo que requiere que haya algo que coincida con lo que no es una p
. En este caso, puede hacer coincidir "no p o fin de línea" con
/<?/($/|[^p]/)
Para mí este funcionó bien:
</?(?!php|xml)
Para que coincida con <?
y no <?php
solo usa esto como un término de búsqueda en vim:
/<?[^p]
/
para iniciar la búsqueda en modo cmd
Quiero reemplazar a todos <?
etiquetas a <?php
en PhpStorm por buscar y reemplazar.
Para mi funciona esto
encontrar
</?[^p](.*)
reemplazar
<?php/n$1
Estoy usando $1
para agregar / n después de la etiqueta php, de lo contrario reemplazará todas las picaduras con <?
Una ligera modificación a la respuesta anterior ...
/<?[^p/n]
La respuesta anterior no coincide con una etiqueta corta de apertura seguida de una nueva línea que estaba oculta en el código que estaba viendo, esta sí ...
Usando (una versión reciente de) grep
:
grep -P ''</?(?!(php|xml|=))'' *
Para encontrar todos los archivos con un <?
etiqueta corta:
find -type f -exec grep -IlP ''</?(?!(php|xml|=))'' {} +
Tenga en cuenta que estos no coinciden con la etiqueta corta <?=
, Ya que siempre está disponible desde 5.4.0 y no hace daño de ninguna manera. (Considerando que <?
Hace daño si allow_short_tags = Off
).