Hace poco hice una pregunta en la que aprendí que no es posible pasar nada excepto parámetros :set
en vim modelines. Entiendo las preocupaciones de seguridad, pero me pregunto si no hay otra forma de evitar esto. Una pregunta reciente sobre SO sobre la configuración de grandes lotes de parámetros para cumplir con un estándar de codificación me hizo pensar: ¿sería posible definir un "grupo" de cosas en mi archivo rc que pueda activarse o desactivarse desde la línea de modelos?
Disculpe el pseudocódigo, pero ¿hay alguna forma de crear una función que se active desde un parámetro establecido?
set_function! codestyle()
if &1 == 'psr-2'
set ts=4
set sw=4
endfi
if &1 == 'drupal7'
set ts=2
set sw=2
iab D8 Drupal 8
endif
endset_function
Esto podría ser activado por una línea de modelo como
# vim: codestyle=psr-2
De alguna manera, esto sería similar a la coincidencia de tipo de archivo, pero permitiría anulaciones manuales. También configuraría el entorno de otras formas predefinidas, evitando los problemas de seguridad de tener un archivo ejecutando otros comandos arbitrarios en vim, pero permitiendo un entorno más personalizado. ¿Hay alguna forma de hacer esto?
set
; AFAIK, esto no es posible en Vim ...Respuestas:
Tienes algunas opciones.
Primero: puede escribir su propio tipo de decodificador modeline, es decir, un complemento. Esta es una respuesta muy similar a la que le di a tu otra pregunta.
De hecho, no podemos agregar nuevas opciones de vim (que se pueden configurar con
:set
), pero podemos agregar nuevas variables. Y no podemos usar las modelinas estándar para hacer más que configurar las opciones de vim.Segunda posibilidad: let-modeline podría explotarse a través de la función de devolución de llamada para llamar a una función u otra. Puede tener su
CodeStyle()
función en su.vimrc
o en un complemento (¿carga automática?), Luego sus archivos contienen:Pero si su necesidad es tan precisa y si realmente no desea complementos como local_vimrc , escriba su propio decodificador tipo modeline.
La tercera, y la OMI, la mejor opción en ese caso sería definir un nuevo tipo de archivo y el conjunto
'ft'
de este tipo de archivo en modelines con:# vim: set ft=php.psr2
. Conphp
ser el tipo de archivo habitual mundial (no estoy seguro acerca de esto), ypsr2
siendo el tipo de archivo especializado que va corresponden a sus estilos de codificación. Tendrá que definir dos ftplugins: ftplugin / psr2.vim y ftplugin / drupal7.vim donde pondrá sus llamadas:setlocal
(y no:set
).fuente