regex vim replace camelcasing underscores

regex - camelCase para subrayar en vi(m)



vim replace (6)

Si por alguna razón quiero convertir selectivamente camelCase nombrado cosas a guión bajo separado en vim, ¿cómo podría hacerlo?

Actualmente he descubierto que puedo hacer una búsqueda /s[az][AZ] y grabar una macro para agregar un guión bajo y convertir a minúsculas, pero tengo curiosidad sobre si puedo hacerlo con algo como:

%s/([az])([AZ])//1/u/2/gc

¡Gracias por adelantado!

EDIT: descubrí la respuesta para camelCase (que es lo que realmente necesitaba), pero ¿alguien más puede responder cómo cambiar CamelCase a camel_case?


Es posible que desee probar el complemento Abolish por Tim Pope. Proporciona algunos atajos para forzar de un estilo a otro. Por ejemplo, comenzando con:

MixedCase

Escribir crc [mnemónico: CoeRce en Camelcase] te daría:

mixedCase

Escribir crs [mnemónico: CoeRce a Snake_case] le daría:

mixed_case

Y escribir crm [mnemónico: CoeRce en MixedCase] ​​lo llevará de vuelta a:

MixedCase

Si también instala repeat.vim , puede repetir los comandos de coerción presionando la tecla de puntos.


Esto es un poco largo, pero parece hacer el trabajo:

:%s//</u/|/l/u//= join(split(tolower(submatch(0)), ''/zs''), ''_'')/gc


Inicié un plugin que hace esto. https://github.com/chiedojohn/vim-case-convert

Para convertir el caso, seleccione un bloque de texto en modo visual y escriba uno de los siguientes (se explica por sí mismo):

:CamelToHyphen :CamelToSnake :HyphenToCamel :HyphenToSnake :SnakeToCamel :SnakeToHyphen

Para convertir todas las ocasiones en su documento, ejecute uno de los siguientes comandos:

:CamelToHyphenAll :CamelToSnakeAll :HyphenToCamelAll :HyphenToSnakeAll :SnakeToCamelAll :SnakeToHyphen

Agregue una explosión (por ejemplo: ¡CamelToHyphen!) A cualquiera de los comandos anteriores para omitir las indicaciones antes de cada conversión. Es posible que no desee hacer eso, ya que el complemento no conocería las diferentes variables u otro texto en su archivo.


Para el caso de CamelCase:

%s#(/</u/|/l)(/l+)(/u)#/l/1/2_/l/3#gc

Consejo: los delimitadores de expresiones regulares se pueden modificar como en mi ejemplo para hacerlo (algo) más legible.


Supongo que debería haber seguido intentándolo durante unos 5 minutos más. Bueno ... si alguien tiene curiosidad:

%s//(/l/)/(/u/)//1/_/l/2/gc hace el truco.

En realidad, me di cuenta de que esto funciona para camelCase, pero no CamelCase, que también podría ser útil para alguien.


Tengo una API para varios procesos orientados al desarrollo. Entre otras cosas, proporciona algunas funciones para transformar nombres entre convenciones (configurables) (variable <-> atributo <-> getter <-> setter <-> constante <-> parámetro <-> ...) y estilos (camelcase (bajo / alto) <-> guiones bajos). Estas funciones de conversión se han incluido en un complemento.

El plugin + API se puede recuperar desde aquí: https://github.com/LucHermitte/lh-dev , para esta tarea de conversión de nombres, requiere lh-vim-lib

Se puede usar de la siguiente manera:

  • coloque el cursor sobre el símbolo que desea cambiar de nombre
  • Escriba :NameConvert + el tipo de conversión que desea (aquí: underscore ). NB: este comando admite autocompletar.
  • et voilà!