Vim Modeline · 4 min read · Nov 14, 2025

Cómo hacer cambios de configuración específicos de archivos en Vim usando Modeline

Mientras que los plugins son sin duda una de las mayores fortalezas de Vim, varias otras funcionalidades lo convierten en uno de los editores de texto/IDEs más potentes y ricos en características disponibles para los usuarios de Linux hoy en día. Una de estas funcionalidades es la capacidad de hacer cambios de configuración específicos de archivos. Esta capacidad se puede acceder utilizando la función Modeline del editor.

En este artículo, discutiremos cómo puedes usar la función Modeline de Vim con ejemplos fáciles de entender.

Pero antes de comenzar a hacer eso, vale la pena mencionar que todos los ejemplos, comandos e instrucciones mencionados en este tutorial han sido probados en Ubuntu 16.04 - Ubuntu 22.04.

VIM Modeline

Uso

Como ya hemos mencionado, la función Modeline de Vim te permite hacer cambios específicos de archivos. Por ejemplo, supongamos que deseas reemplazar todas las tabulaciones utilizadas en un archivo particular de tu proyecto con espacios, y asegurarte de que todos los demás archivos no se vean afectados por este cambio. Este es un caso de uso ideal donde Modeline te ayuda en lo que deseas hacer.

Entonces, lo que puedes hacer es poner la siguiente línea al principio o al final del archivo en cuestión:

# vim: set expandtab:

Hay altas probabilidades de que si intentas hacer el ejercicio mencionado anteriormente para probar el caso de uso en tu máquina Linux, las cosas no funcionen como se esperaba. Si ese es el caso, no te preocupes, ya que la función Modeline necesita ser activada primero en algunos casos (está desactivada por defecto en sistemas como Debian, Ubuntu, Gentoo y OSX por razones de seguridad).

Para habilitar la función, abre el archivo .vimrc (ubicado en tu directorio personal), y luego agrega la siguiente línea:

set modeline

Ahora, cada vez que ingreses una tabulación y guardes el archivo (donde se ingresó el comando expandtab de modeline), la tabulación se convertirá automáticamente en espacios en blanco.

Consideremos otro caso de uso. Supongamos que el espacio de tabulación predeterminado en Vim está configurado en 4, pero para un archivo particular, deseas aumentarlo a 8. Para esto, necesitas agregar la siguiente línea al principio o al final del archivo:

// vim: noai:ts=8:

Ahora intenta ingresar una tabulación y verás que el número de espacios que cubre será 8.

Puede que hayas notado que mencioné que estos comandos de modeline deben ser ingresados en algún lugar cerca de la parte superior o inferior del archivo. Si te preguntas por qué es así, la razón es que la función está diseñada de esta manera. Las siguientes líneas (tomadas de la documentación oficial de Vim) deberían aclarar esto:

El modeline no puede estar en cualquier parte del archivo: debe estar en las primeras o últimas líneas. La ubicación exacta donde vim verifica el modeline está controlada por la variable modelines; consulta :help modelines. Por defecto, está configurado en 5 líneas*.

Y aquí está lo que dice el comando :help modelines (al que se hace referencia en las líneas anteriores):

Si 'modeline' está activado, 'modelines' da el número de líneas que se verifica para los comandos de configuración. Si 'modeline' está desactivado o 'modelines' es cero, no se verifica ninguna línea.

Intenta poner el comando de modeline más allá del rango predeterminado de 5 líneas (ya sea desde la parte inferior o desde la parte superior), y notarás que los espacios de tabulación volverán al valor predeterminado de Vim - en mi caso, eso son 4 espacios.

Sin embargo, puedes cambiar este comportamiento si lo deseas, usando el siguiente comando en tu archivo .vimrc.

set modelines=[nuevo-valor]

Por ejemplo, aumenté el valor de 5 a 10.

set modelines=10

Esto significa que ahora puedo poner el comando de modeline en cualquier lugar entre las primeras o últimas 10 líneas del archivo.

Avanzando, en cualquier momento, mientras editas un archivo, puedes ingresar lo siguiente (con el editor Vim en modo de comando) para ver la configuración actual relacionada con modeline, así como dónde se configuraron por última vez.

:verbose set modeline? modelines?

Por ejemplo, en mi caso, el comando anterior produjo la siguiente salida:

 modeline  
      Última configuración desde ~/.vimrc  
 modelines=10  
      Última configuración desde ~/.vimrc

Aquí hay algunos puntos importantes que necesitas saber sobre la función Modeline de Vim:

  • Esta función está habilitada por defecto para Vim que se ejecuta en modo nocompatible (no compatible con Vi), pero algunas distribuciones notables de Vim desactivan esta opción en el vimrc del sistema por razones de seguridad.
  • La función está desactivada por defecto al editar como root (si has abierto el archivo usando ‘sudo’, entonces no hay problema - la función funciona).
  • Con ‘ set', el modeline termina en el primer dos puntos que no sigue a una barra invertida. Y sin ‘ set', ningún texto puede seguir a las opciones. Por ejemplo, / vim: noai:ts=4:sw=4 / es un modeline inválido.

Preocupaciones de Seguridad

Lamentablemente, la función Modeline de Vim puede ser utilizada para comprometer la seguridad. De hecho, se han reportado múltiples problemas de seguridad relacionados con Modeline en el pasado, incluyendo inyección de comandos de shell, ejecución de comandos arbitrarios, acceso no autorizado, y más. Es cierto que la mayoría de estos son antiguos y ya deberían haber sido solucionados, pero da una idea de que la función Modeline podría ser mal utilizada por hackers.

Conclusión

Modeline puede ser una función avanzada del editor Vim, pero no es muy difícil de entender. No hay duda de que hay una pequeña curva de aprendizaje involucrada, pero eso no es mucho pedir dado lo útil que es la función. Por supuesto, hay preocupaciones de seguridad, lo que significa que debes sopesar tus opciones antes de habilitar y usar la función.

¿Alguna vez has utilizado la función Modeline? ¿Cómo fue tu experiencia? Compártelo con nosotros (y con toda la comunidad de HowtoForge) en los comentarios a continuación.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.