2010-10-19 22 views

Répondre

3

Pour la syntaxe, mon SyntaxRange plugin rend l'installation aussi simple qu'un simple appel de fonction.

Pour différents paramètres de types de fichiers tels que les options d'indentation, vous devez installer un :autocmd CursorMoved,CursorMovedI qui vérifie dans quelle région la ligne actuelle est (en utilisant peut-être la syntaxe pour obtenir des conseils, par exemple avec synID()), puis permute les valeurs d'option en fonction du résultat .

Modifier: Pour votre cas d'utilisation particulière, ce serait quelque chose comme:

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

que vous pourriez mettre en ~/.vim/after/syntax/javascript.vim pour l'appliquer automatiquement à tous les fichiers JavaScript.

+0

Merci pour le plugin SyntaxRange, il simplifie grandement la syntaxe spécifique à la région hl. Si vous donnez un exemple simple de la solution que vous avez proposée pour l'indentation basée sur la région, je vais transférer la réponse pour vous –

+0

@ThiadodeArruda Oui, un exemple est une bonne idée. J'en ai ajouté un! –

+0

Merci pour l'exemple, pourriez-vous aussi étendre votre exemple pour inclure l'indentation? –

7

Il existe un moyen relativement simple d'avoir différentes régions dans votre code qui utilisent des fichiers de syntaxe différents, en utilisant la commande "syntax include" et une commande "region de syntaxe" pour définir chaque région. Ci-dessous est un code que je dois mettre en évidence syntaxiquement différentes régions de Perl, R et Python dans un seul document. Les statuts 'unlet' sont nécessaires car les fichiers de syntaxe dépendent souvent de l'inexistence de b: current_syntax lors de leur première exécution. Le vôtre serait similaire, mais définissez le 'début' et la 'fin' pour les régions jinja et javascript en utilisant les délimiteurs que vous avez listés dans votre question. Consultez l'aide pour « syn-région » et « syn-include » pour plus d'information:

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' 

Je ne suis pas sûr de la façon d'obtenir différentes auto-indenter dans les régions, c'est une question que j'allais regarde en moi-même. Je pense qu'une solution consisterait à consolider tous les fichiers d'indentation de langues en un seul et avoir une structure if qui traite selon la région dans laquelle elle se trouve. Peut-être y a-t-il un moyen plus simple.