Wie kann ich in VIM die Syntax / Ident-Regeln von jinja und javascript in derselben Datei mischen?

8

Ich benutze jinja Vorlagensprache, um HTML und Javascript für eine Webseite zu generieren. Wie kann ich vim verstehen lassen, dass alles zwischen '{{'/'}}' und '{%'/'%}' Jinja-Code ist und der Rest es Javascript-Code? Gibt es eine einfache Möglichkeit, das zu tun?

    
Thiago de Arruda 19.10.2010, 13:02
quelle

2 Antworten

3

Für die Syntax macht mein SyntaxRange-Plugin die Einrichtung so einfach wie einen einzigen Funktionsaufruf .

Für verschiedene Dateitypeinstellungen, wie Einrückungsoptionen, müssen Sie ein :autocmd CursorMoved,CursorMovedI installieren, das überprüft, in welche Region die aktuelle Zeile fällt (eventuell mit der Syntax für Hinweise, zB mit synID() ), und dann die Optionswerte vertauscht auf das Ergebnis.

Bearbeiten : Für Ihren speziellen Anwendungsfall wäre das etwa so:

%Vor%

, das Sie in ~/.vim/after/syntax/javascript.vim einfügen können, um es automatisch auf alle JavaScript-Dateien anzuwenden.

    
Ingo Karkat 04.05.2013, 20:09
quelle
7

Es gibt eine relativ einfache Möglichkeit, verschiedene Bereiche in Ihrem Code zu verwenden, die unterschiedliche Syntaxdateien verwenden, indem Sie den Befehl "Syntax include" und einen Befehl "syntax region" verwenden, um jede Region zu definieren. Unten ist ein Code, mit dem ich unterschiedliche Regionen von Perl, R und Python in einem einzigen Dokument markieren kann. Die 'unlet'-Anweisungen sind notwendig, da die Syntaxdateien oft von b: current_syntax abhängig sind, wenn sie zum ersten Mal ausgeführt werden. Ihr wäre ähnlich, aber definieren Sie "Start" und "Ende" für die Regionen jinja und javascript mit den Begrenzern, die Sie in Ihrer Frage aufgelistet haben. Überprüfen Sie die Hilfe für "syn-region" und "syn-include", um weitere Informationen zu erhalten:

%Vor%

Ich bin mir nicht sicher, wie man in den Regionen unterschiedliche Auto-Indenting-Einstellungen erhält, das ist eine Frage, die ich mir selbst stellen wollte. Ich denke, eine Lösung wäre, alle Spracheinzugsdateien in einem zu konsolidieren und eine If-Struktur zu haben, die entsprechend der Region, in der sie sich befindet, verarbeitet. Vielleicht gibt es jedoch einen einfacheren Weg.

    
Herbert Sitz 19.10.2010 15:01
quelle

Tags und Links