Skip to content

Instantly share code, notes, and snippets.

@neodevelop
Created May 18, 2026 19:15
Show Gist options
  • Select an option

  • Save neodevelop/114d708babf348e85f474e1d8915ec27 to your computer and use it in GitHub Desktop.

Select an option

Save neodevelop/114d708babf348e85f474e1d8915ec27 to your computer and use it in GitHub Desktop.
Limpieza masiva de código Groovy con Vim: vimgrep, quickfix, cfdo y expresiones regulares

Limpieza masiva de código Groovy con Vim: vimgrep, quickfix, cfdo y expresiones regulares

Cuando trabajamos con código legado, especialmente en proyectos de Java y Groovy, es común encontrar ruido acumulado: punto y coma innecesario, modificadores redundantes, getters/setters generados automáticamente, comentarios antiguos o demasiadas líneas en blanco.

Vim puede convertirse en una herramienta extremadamente poderosa para limpiar todo eso sin salir del editor. Los comandos siguientes usan tres ideas centrales:

  1. Buscar patrones en múltiples archivos con :vimgrep
  2. Aplicar cambios masivos con :cfdo
  3. Eliminar bloques completos usando :g y expresiones regulares

1. Buscar punto y coma en archivos Groovy

:vimgrep /;/ src/main/groovy/com/expresso/actionForms/*.groovy

Este comando busca el carácter ; dentro de todos los archivos .groovy ubicados en:

src/main/groovy/com/expresso/actionForms/

Los resultados se cargan automáticamente en la lista quickfix.

Abrir resultados

:copen

Navegar entre resultados

:cnext
:cprev

2. Eliminar punto y coma en todos los archivos encontrados

:cfdo %s/\;//g | update

Desglose

Ejecutar comando sobre cada archivo

:cfdo

Aplica el comando siguiente a cada archivo de la lista quickfix.

Sustitución global

%s/\;//g

Elimina todos los ; del archivo actual.

Guardar únicamente si hubo cambios

update

Ejemplo

Antes:

String name;
Integer age;

Después:

String name
Integer age

3. Buscar y eliminar public

:vimgrep /public / src/main/groovy/com/expresso/collections/**/*.groovy

Luego:

:cfdo %s/public //g | update

Groovy no necesita explícitamente public en muchos casos.

Ejemplo

Antes:

public String name

Después:

String name

4. Buscar y eliminar private

:vimgrep /private / src/main/groovy/com/expresso/collections/**/*.groovy
:cfdo %s/private //g | update

Ejemplo

Antes:

private String code

Después:

String code

⚠️ Esto puede alterar encapsulamiento. Úsalo con cuidado.


5. Eliminar getters y setters dentro del archivo actual

:g/\v^\s*(\w)\s+(get|set)\w*\(\)\s*\{/,/^\s*\}/d

¿Qué hace?

Elimina bloques completos que parecen métodos get o set.


Desglose de la expresión regular

Very Magic Mode

\v

Hace más simple escribir regex en Vim.

Inicio de línea

^

Espacios opcionales

\s*

Nombre de tipo

\w+

Métodos get o set

(get|set)\w*

Coincide con:

getName
setValue
getUserData

Paréntesis

\(\)

Apertura de bloque

\s*\{

Patrón final

/^\s*\}/

Busca la llave de cierre.


6. Versión más general para getters y setters

:g/\v^\s*\w+\s+(get|set)\w*\(\)\s*\{/,/^\s*\}/d

Ejemplo

String getName() {
    return name
}

7. Eliminar solamente getters

:g/\v^\s*\w+\s+get\w*\(\)\s*\{/,/^\s*\}/d

Ejemplo

Antes:

String getName() {
    return name
}

Después:


8. Eliminar comentarios JavaDoc o GroovyDoc

:g/\v^\s+\/\*\*/,/^\s*\*\//d

Ejemplo

Antes:

/**
 * Nombre del cliente
 */
String name

Después:

String name

9. Eliminar métodos booleanos isSomething

:g/\v^\s*\w+\s+is\w*\(.*\)\s*\{/,/^\s*\}/d

Ejemplo

Boolean isActive() {
    return active
}

10. Eliminar getters con tipos complejos

:g/\v^\s*\w+.*\s+get\w*\(\)\s*\{/,/^\s*\}/d

Ejemplo

List<String> getItems() {
    return items
}

11. Eliminar setters con parámetros

:g/\v^\s*\w+\s+set\w*\(.+\)\s*\{/,/^\s*\}/d

Ejemplo

void setName(String name) {
    this.name = name
}

12. Buscar getters en múltiples archivos

:vimgrep /\v^\s*\w+.*\s+get\w*\(\)\s*\{/,/^\s*\}/ src/main/groovy/com/expresso/collections/**/*.groovy

Luego:

:cfdo g/\v^\s*\w+.*\s+get\w*\(\)\s*\{/,/^\s*\}/d | update

13. Buscar y eliminar setters en múltiples archivos

:vimgrep /\v^\s*\w+.*\s+set\w*\(.+\)\s*\{/ src/main/groovy/com/expresso/collections/**/*.groovy

Luego:

:cfdo g/\v^\s*\w+.*\s+set\w*\(.+\)\s*\{/,/^\s*\}/d | update

14. Buscar y eliminar comentarios en múltiples archivos

:vimgrep /\v^\s+\/\*\*/,/^\s*\*\// src/main/groovy/com/expresso/collections/**/*.groovy

Luego:

:cfdo g/\v^\s+\/\*\*/,/^\s*\*\//d | update

15. Buscar múltiples líneas en blanco

:vimgrep /\n\{3,}/ src/main/groovy/com/expresso/collections/**/*.groovy

Normalizar líneas vacías

:%s/\n\{3,}/\r\r/e

Esto convierte secuencias de 3 o más saltos de línea en únicamente 2.


Flujo recomendado de trabajo

1. Buscar

:vimgrep /patron/ ruta/**/*.groovy

2. Revisar resultados

:copen

3. Aplicar cambios

:cfdo comando | update

4. Revisar cambios con Git

git diff

Recomendación importante

Haz este tipo de limpieza en una rama separada:

git checkout -b cleanup/groovy-vim-refactor

Y realiza commits pequeños:

git add .
git commit -m "Remove unnecessary semicolons"

Luego:

git add .
git commit -m "Remove redundant visibility modifiers"

Conclusión

Vim no es solamente un editor de texto. Con vimgrep, quickfix, cfdo, :g y expresiones regulares, puede convertirse en una herramienta muy poderosa de refactorización textual.

En proyectos Groovy heredados, estos comandos permiten:

  • eliminar ruido sintáctico
  • remover getters/setters innecesarios
  • limpiar documentación obsoleta
  • normalizar formato
  • hacer refactors masivos extremadamente rápidos

La clave está en trabajar cuidadosamente:

  1. Buscar
  2. Revisar
  3. Modificar
  4. Validar con Git

Vim aquí funciona como un bisturí de mantenimiento: pequeño, preciso y extremadamente poderoso.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment