2010-10-19 12 views

Respuesta

3

Para la sintaxis, mi SyntaxRange plugin hace que la configuración sea tan simple como una llamada a una sola función.

Para diferentes configuraciones de tipo de archivo como opciones de sangría, usted tiene que instalar un :autocmd CursorMoved,CursorMovedI que comprueba en qué región de la línea actual cae (tal vez utilizando la sintaxis en busca de pistas, por ejemplo, con synID()), y luego intercambia los valores de las opciones en función del resultado .

Editar: Para su caso en particular, que sería algo así como:

:call SyntaxRange#Include('{{', '}}', 'jinja') 
:call SyntaxRange#Include('{%', '%}', 'jinja') 

que se podía poner en ~/.vim/after/syntax/javascript.vim aplicarla automáticamente a todos los archivos JavaScript.

+0

Gracias por el plugin SyntaxRange, simplifica en gran medida la sintaxis específica de la región hl. Si da un ejemplo simple de la solución que propuso para la sangría basada en la región, transferiré la respuesta por usted –

+0

@ThiadodeArruda Sí, un ejemplo es una buena idea. ¡He añadido uno! –

+0

Gracias por el ejemplo, ¿podría extender su ejemplo para incluir sangría? –

7

Hay una manera relativamente fácil de tener diferentes regiones en su código que usan diferentes archivos de sintaxis, usando el comando "sintaxis incluida" y un comando "región de sintaxis" para definir cada región. A continuación se muestra un código que tengo para sintaxis resaltar diferentes regiones de Perl, R y Python en un solo documento. Las sentencias 'unlet' son necesarias porque los archivos de sintaxis a menudo dependen de que b: current_syntax no exista cuando se ejecutan por primera vez. El suyo sería similar, pero defina el "inicio" y el "final" para las regiones jinja y javascript utilizando los delimitadores que enumeró en su pregunta. Compruebe ayuda para "syn-región" y "sin-include" para obtener más información:

let b:current_syntax = '' 
unlet b:current_syntax 

syntax include @Perlcode $VIMRUNTIME\syntax\perl.vim 
syntax region rgnPerl start='^src-Perl' end='^end-Perl' [email protected] 
let b:current_syntax = '' 
unlet b:current_syntax 
syntax include @rinvim $VIMRUNTIME\syntax\r.vim 
syntax region rgnR matchgroup=Snip start="^src-R" end="^end-R" keepend [email protected] 
let b:current_syntax = '' 
unlet b:current_syntax 
syntax include @python $VIMRUNTIME\syntax\python.vim 
syntax region rgnPython matchgroup=Snip start="^src-Python" end="^end-Python" keepend [email protected] 
let b:current_syntax='combined' 

No estoy seguro acerca de cómo obtener diversos auto-sangría en las regiones, esa es una pregunta que iba a mira dentro de mi Creo que una solución sería consolidar todos los archivos de sangría de idiomas en uno y tener una estructura if que procese según la región en la que se encuentre. Sin embargo, tal vez haya una manera más simple que eso.

Cuestiones relacionadas