GNU/Linux >> Tutoriales Linux >  >> Linux

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

Si bien los complementos son sin duda una de las mayores fortalezas de Vim, hay varias otras funcionalidades que lo convierten en uno de los editores de texto/IDE más potentes y ricos en funciones disponibles para los usuarios de Linux en la actualidad. Una de estas funcionalidades es la capacidad de realizar cambios de configuración específicos del archivo. Se puede acceder a esta capacidad utilizando la función Modeline del editor.

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

But before we start doing that, it's worth mentioning that all the examples, commands, and instructions mentioned in this tutorial have been tested on Ubuntu 16.04, and the Vim version we've used is 7.4.

Modelo VIM

Uso

Como ya mencionamos, la función Modeline de Vim le permite realizar cambios específicos de archivos. Por ejemplo, suponga que desea reemplazar todas las pestañas utilizadas en un archivo particular de su proyecto con espacios y asegúrese de que todos los demás archivos no se vean afectados por este cambio. Este es un caso de uso ideal en el que Modeline te ayuda en lo que quieres hacer.

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

# vim: set expandtab:

Hay muchas posibilidades de que si intenta hacer el ejercicio mencionado anteriormente para probar el caso de uso en su máquina Linux, las cosas no funcionarán como se esperaba. Si ese es el caso, no se preocupe, ya que la función Modeline debe activarse primero en algunos casos (está deshabilitada de manera predeterminada en sistemas como Debian, Ubuntu, Gentoo y OSX por razones de seguridad).

Para habilitar la función, abra el archivo .vimrc (ubicado en su directorio de inicio) y luego agregue la siguiente línea:

set modeline

Ahora, cada vez que ingrese a una pestaña y guarde el archivo (donde expandtab se ingresó el comando modeline), la pestaña se convertirá automáticamente en espacios en blanco.

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

// vim: noai:ts=8:

Ahora prueba a entrar en una pestaña y verás que el número de espacios que cubre será de 8. 

Es posible que haya notado que digo que estos comandos de Modeline deben ingresarse en algún lugar cerca de la parte superior o inferior del archivo. Si se pregunta 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 dejar esto más claro:

"La línea de modelo no puede estar en ninguna parte del archivo:debe estar en la primera o en las últimas líneas. La ubicación exacta donde vim busca la línea de modelo está controlada por modelines variable; ver :modelos de ayuda . De forma predeterminada, está configurado en 5 líneas ."

Y esto es lo que :help modelines comando (al que se hace referencia en las líneas anteriores) dice:

If 'modeline' is on 'modelines' gives the number of lines that is checked for set commands. If 'modeline' is off or 'modelines' is zero no lines are checked.

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

Sin embargo, puede cambiar este comportamiento si lo desea, utilizando el siguiente comando en su archivo .vimrc.

set modelines=[new-value]

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

set modelines=10

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

Continuando, en cualquier momento, mientras edita un archivo, puede ingresar lo siguiente (con el editor Vim en el modo de comando) para ver la configuración actual relacionada con la línea de modelos, así como dónde se establecieron por última vez.

:verbose set modeline? modelines?

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

 modeline
Last set from ~/.vimrc
modelines=10
Last set from ~/.vimrc

Estos son algunos de los puntos importantes que necesita saber sobre la función Modeline de Vim:

  • Esta característica está habilitada de forma predeterminada para Vim que se ejecuta en modo no compatible (no compatible con Vi), pero algunas distribuciones notables de Vim deshabilitan esta opción en el sistema vimrc por seguridad.
  • La función está deshabilitada de forma predeterminada cuando se edita como root (si ha abierto el archivo con 'sudo', entonces no hay problema, la función funciona).
  • Con 'set' , el modelo termina en los primeros dos puntos que no siguen una barra invertida. Y sin 'set' , ningún texto puede seguir a las opciones. Por ejemplo, /* vim:noai:ts=4:sw=4 */ es una línea de modelo no válida.

Preocupaciones de seguridad

Lamentablemente, la función Modeline de Vim se puede utilizar para comprometer la seguridad. De hecho, en el pasado se informaron múltiples problemas de Modeline relacionados con la seguridad, incluida la inyección de comandos de shell, la ejecución de comandos arbitrarios, el acceso no autorizado y más. De acuerdo, la mayoría de estos son antiguos y ya se habrían solucionado, pero da una idea de que los piratas informáticos podrían hacer un mal uso de la función Modeline.

Conclusión

Modeline puede ser una característica avanzada del editor Vim, pero no es muy difícil de entender. No hay duda de que implica un poco de curva de aprendizaje, pero eso no es mucho pedir dada la utilidad de la función. Por supuesto, existen problemas de seguridad, lo que significa que debe sopesar sus opciones antes de habilitar y usar la función.

¿Ha utilizado alguna vez la función Modeline? ¿Cómo fue tu experiencia? Comparta con nosotros (y con toda la comunidad de HowtoForge) en los comentarios a continuación.


Linux
  1. ¿Cómo hacer que Ldapsearch funcione en Sles sobre Tls usando un certificado?

  2. Haga que Vim sea su IDE de Perl usando el complemento perl-support.vim

  3. Haga que Vim sea su Bash-IDE usando el complemento bash-support

  4. Tutorial:haga de Vim su IDE de C/C++ usando el complemento c.vim

  5. Cómo abrir un archivo en vim usando pipe

Cómo proteger con contraseña los archivos de texto usando Vim Editor en Linux

Cómo proteger con contraseña un archivo usando Vim en Linux

Cómo guardar un archivo en Vi / Vim y salir del editor

Cómo comentar varias líneas a la vez en el editor vim usando 3 métodos

Cómo deshacer o rehacer cambios en Vim

Cómo proteger archivos con contraseña usando el editor Vim en Ubuntu