2015-10-28 33 views
6

Próbuję utworzyć prostą kolorystykę plików dziennika, teraz możliwe jest włączenie niestandardowych języków do kodu (mam 0.9.2). Stworzyłem prosty plik .tmLanguage do kolorowania litery "q", tylko po to, aby uruchomić, ale nie udało się.Tworzenie prostego, niestandardowego kolorowania języka na kod VS

Mój nowy język "log" jest skojarzony poprawnie z rozszerzeniem pliku i mogę go również wybrać ręcznie z wewnątrz kodu, ale nie ma miejsca zabarwienie. Mam wrażenie, że ma to związek z jakim "zasięgiem", z którym kojarzę swój wzór, ale nie jestem pewien. Czy istnieje lista prawidłowego zakresu do wyboru? Początkowo myślałem, że użyję czegoś ogólnego, takiego jak "komentarz", aby uzyskać jakiś kolor, ale to nie działa.

Oto mój plik .tmLanguage:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
    <dict> 
     <key>scopeName</key> 
     <string>text.log</string> 

     <key>fileTypes</key> 
     <array> 
      <string>log</string> 
     </array> 

     <key>name</key> 
     <string>Log file</string> 

     <key>patterns</key> 
     <array> 
      <dict> 
       <key>match</key> 
       <string>q</string> 
       <key>name</key> 
       <string>comment</string> 
      </dict> 
     </array> 
    </dict> 
</plist> 

mam coś tutaj chyba nieporozumienie, więc każda pomoc jest bardzo mile widziane :-)

Odpowiedz

5

Musisz zamiast używać wyrażeń regularnych ciągów statycznych do opisania wzór:

<key>match</key> 
<string>q</string> <- This needs to be a regular expression 
<key>name</key> 
<string>comment</string> 

Podam bardziej przydatny przykład dla zakodowanego pliku dziennika. Koloruje liczby, wskazówki, ostrzeżenia i błędy w różnych kolorach. Zasady identyfikacji tych słów kluczowych i liczb są oparte na wyrażeniu regularnym.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
    <dict> 
     <key>scopeName</key> 
     <string>text.log</string> 

     <key>fileTypes</key> 
     <array> 
      <string>log</string> 
     </array> 

     <key>name</key> 
     <string>Log file</string> 

     <key>patterns</key> 
     <array> 
      <dict> 
       <key>match</key> 
       <string>\b(?i:(hint|info|information))\b</string> 
       <key>name</key> 

       <string>info-token</string> 
      </dict>     
      <dict> 
       <key>match</key> 
       <string>\b(?i:(warning|warn))\b</string> 
       <key>name</key> 
       <string>warn-token</string> 
      </dict> 
      <dict> 
       <key>match</key> 
       <string>\b(?i:(Error|Failure|Fail))\b</string> 
       <key>name</key> 
       <string>error-token</string> 
      </dict> 
      <dict> 
       <key>match</key> 
       <string>\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b</string> 
       <key>name</key> 
       <string>constant.numeric</string> 
      </dict>         
     </array> 
     <key>uuid</key> 
     <string>FF0550E0-3A29-11E3-AA6E-0800200C9A77</string> 
    </dict> 
</plist> 

wyróżnienia daje wynik takiego (domyślny motyw):

enter image description here

nie znalazłem oficjalną dokumentację na temat dostępnych żetonów (jak error-token, constant.numeric etc). Ale istnieje plik zlokalizowany w %VSCODE_INSTALLATION%\resources\app\out\vs\languages\markdown\common\tokens.css. Wydaje się, że lista wszystkich dostępnych tokenów itp. Użyj go jako odniesienia podczas tworzenia pliku .tmLanguage.

Ale zwróć uwagę: niektóre motywy używają tylko tokenów podstawowych podstawowych. A niektóre inne motywy używają tego samego koloru dla wielu różnych tokenów. Powinieneś więc często testować zakreślacz na podstawie najczęściej spotykanych motywów, aby sprawdzić, czy wynik wygląda dobrze, czy nie.

Powinieneś odwiedzić tę stronę o Language Grammars, aby dowiedzieć się więcej.

+0

Wielkie dzięki za użyteczną próbki i wskazówek na temat tokenów językowych, naprawdę to doceniam! Twoja próbka działała od razu po wyjęciu z pudełka, więc porównałem ją z moim bardziej podstawowym plikiem i okazało się, że brakowało mi części ** uuid **, co spowodowało problemy. Teraz działa dobrze :-) – emilast

+1

BTW, 'q' jest tak naprawdę prawidłowym wyrażeniem regularnym, aczkolwiek bardzo krótkim ... To było tylko do testowania, tak naprawdę nie potrzebuję identyfikowania q: s w moim dzienniku pliki :-) – emilast

+2

Wyodrębniłem listę poprawnych tokenów językowych, jest ona dostępna tutaj: https://gist.github.com/vivainio/b89bd60a3f2c7bbb31f7e149d6cb8806 – vivainio

1

Jak powiedział @Woshi, potrzebujesz wyrażeń regularnych.

Jeśli chodzi o zakresy, które ogólnie działają z większością motywów kolorystycznych, podaję link do this answer. Należy pamiętać, że w przypadku zakresu, który ma zostać pobrany, musi znajdować się w słowniku z kluczem "nazwa".

+0

Dziękuję, znalazłem tę stronę wczoraj. Przydatna lektura, ale okazało się, że mam problem z brakiem ** uuid ** danych. Mój "komentarz" zakresu okazał się ważny. – emilast

5

Właśnie wydaliśmy rozszerzenie języka, które wprowadza kolorystykę do panelu Wyjście. Zasadniczo robi to tak samo, jak zatwierdzona odpowiedź na ten wątek i dodaje typ MIME text/x-code-output, który jest używany przez panel Wyjście.

dostać za darmo tutaj: https://marketplace.visualstudio.com/items?itemName=IBM.output-colorizer

Źródło tutaj: https://github.com/IBM-Bluemix/vscode-log-output-colorizer Proszę przyczyniać! Błędy, prośby o nowe funkcje, składki są mile widziane.

Oto kilka screenów z nim pracować:

enter image description here enter image description here enter image description here

Powiązane problemy