letter-case – ¿Cómo puedo convertir palabras a camelCase en una macro?

Pregunta:

Tengo una lista de palabras como esta:

these are
some
words that I want
to convert to
camel case

Necesito una forma de convertir, por ejemplo, camel case en camelCase dentro de una macro (o una forma de convertir cada línea de una selección de línea visual en camel case).

Podría usar algo como wgUlhx tantas veces como sea necesario, pero el problema es que esto no funciona para palabras de diferentes longitudes (así que, por ejemplo, wgUlhxwgUlhx funcionaría para convert this please pero no para convert these pretty please ).

La salida deseada para las líneas anteriores sería

theseAre
some
wordsThatIWant
toConvertTo
camelCase

¿Hay alguna forma de automatizar esto?

Respuesta:

Un trazador de líneas

Encontré un reemplazo de expresión regular simple (asumiendo que se establece 'magia'):

:s/ \([a-zA-Z]\)/\u\1/g

Esto coincide con cualquier letra individual después de un espacio, guardando la letra. Luego, lo reemplaza con la letra guardada en mayúsculas ( \u = mayúscula, \1 = primera coincidencia guardada), para cada coincidencia en la línea.

Aplicar sobre todo el archivo poniendo un % entre : y s .

La desventaja de esta solución es que es lineal (lo que funciona para sus ejemplos), pero se quedaría corto si solo quisiera poner en mayúsculas unas pocas palabras de muchas dentro de una línea.

Una solucion mas completa

map <leader>g~ :set opfunc=MyCamelCase<CR>g@
function! MyCamelCase(type, ...)
  let searchsave=@/
    silent s/\%>'\[ \([a-zA-Z]\)\%<']/\u\1/g
  let @/=searchsave
 endfunction

Esto crea un nuevo operador que puede operar con un movimiento. Si tiene <leader> como \ , entonces proporcione el siguiente texto (con | como el cursor):

This is some |example text to work with.

Al escribir \g~3w obtiene

This is some exampleTextTo work with.

Es decir, hemos escrito en mayúsculas más de 3 palabras.

Descripción de esa sustitución:

s/ inicia la sustitución.
\%>'\[ es un poco doloroso. La \%>'m dice que coincida con la derecha de una marca. Queremos marcar [ , pero eso también debe escaparse en este patrón. Entonces, esto comienza la coincidencia después de la moción dada al operador.
\([a-zA-Z\) es lo mismo que el de una línea anterior.
\%<'] este es el otro extremo, coincidiendo antes del final del movimiento.
/\u\1/g es el reemplazo del one-liner anterior.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım