2014-04-17 15 views
10

Jak mogę uczynić moją klasę wyróżnioną jako normalny typ pierwotny, taki jak int lub double?Sublime Text - C++ Highlight

Zobacz exemple:

enter image description here

chcę oświadczyć, że kiedy test Test aloha; być podświetlone w taki sam sposób, int a.

+0

Czy możesz to zrobić w Sublime Text? Gdybyś mógł, odinstalowałbym wszystkie IDE na moim komputerze ... –

Odpowiedz

13

Podświetlanie składni jest sterowane przez plik tmLanguage. W ST3 są one przechowywane w plikach .cache.

Wykonaj następujące kroki.

  • Otwarte Narzędzia -> Komenda palet i obsługiwanie Package Manager zainstalować PackageResourceViewer
  • W palecie polecenia SELECT PackageResourceViewer: Open Resource
  • W prezentowanym panelu wybierz C++
  • W prezentowanym panelu wybierz C++.tmLanguage

Teraz masz plik definicji języka wyświetlany dla ciebie.

Zapoznaj się z formą definiowania poszczególnych części języka. Jeśli szukamy class znalazły się następujące jako jeden z meczów:

<dict> 
    <key>match</key> 
    <string>\b(class|struct)\s+([_A-Za-z][_A-Za-z0-9]*\b);</string> 
    <key>name</key> 
    <string>meta.class-struct-block.c++</string> 
    <key>captures</key> 
    <dict> 
     . . . 
    . . . 
</dict> 

wybrałem, że jeden, ponieważ wiąże się jakieś regularne expresssion (regex) dopasowanie i że to aluzja do tego, co chcesz zrobić.

Ponieważ ST ma piękne otwarte ramy, każdy z nas, który zna trochę programowania, może dodać nasze własne definicje komponentów językowych do tych plików .tmLanguage. Ta elastyczność jest częścią tego, dlaczego ST jest moim wyborem.

Zobaczmy, jak to zrobić.

Pierwszą rzeczą jest zapisanie pliku C++.tmLanguage, który otworzyliśmy w edytorze w naszym folderze User.

Robimy to zarówno zachować oryginalny jako wycofywania jeśli coś pójdzie źle i, ponieważ oznacza to, że nasza wersja User będzie nie nadpisane każdorazowo aktualizacji ST. Sposób, w jaki ST ładuje pliki, oznacza, że ​​duplikaty w folderze User zastępują wartości w domyślnej lokalizacji, więc nasze wersje User mają pierwszeństwo w stosunku do tego, co działa, gdy używamy ST. Fajne hej?

Mamy teraz naszą własną wersję pliku C++.tmLanguage, z którą będziemy się bawić.

Znajdź definicję podobną do tego, co chcemy zrobić i powiel ją.

mam zamiar skopiować to:

<dict> 
    <key>match</key> 
    <string>\b(class|wchar_t|nullptr_t)\b</string> 
    <key>name</key> 
    <string>storage.type.c++</string> 
</dict> 

Pierwszą rzeczą, mam zamiar zrobić, to zdecydować, co mam zamiar wymienić mój nowy komponent językowy.

Mogę po prostu nadać mu nazwę istniejącego komponentu językowego, który ma kolor, który chcę mieć. Ma to tę zaletę, że jeśli ta nazwa jest już na miejscu w istniejących schematach kolorów, otrzymam wyróżnienie za darmo. Zapraszam do dokonania tego wyboru.

Ale aby odkryć więcej tego systemu, wymyślę własne nazwisko i zakres dla siebie. Więc będę to nazwać duncan.name.class. Możesz użyć dowolnej nazwy, która nie koliduje z istniejącą nazwą.

Tak uczynię, że zmiany w powielać:

<dict> 
    <key>match</key> 
    <string>\b(class|wchar_t|nullptr_t)\b</string> 
    <key>name</key> 
    <string>duncan.name.class</string> 
</dict> 

Teraz muszę napisać regex do zidentyfikowania składnik mojego nowego języka. Jest to dość łatwe, ponieważ zakładam, że wszyscy podążamy za dość standardową praktyką nazywania naszych klas czołowymi czapkami i nie używamy tego dla innych składników językowych, więc mój regex musi znaleźć dowolny ciąg, który zaczyna się od alfa z WIELKIEJ BRYTANII, można łatwo zdefiniować jako [A-Z], a następnie dowolne znaki alfanumeryczne. Zauważ, że wyklucza to interpunkcja (jak podkreślenie _), więc jeśli używasz ich w nazwach klas, musisz rozwinąć wyrażenie regularne, aby uwzględnić te znaki.

Więc zmieńmy warunek dopasowania użyć tego wyrażenia regularnego:

<dict> 
    <key>match</key> 
    <string>\b([A-Z][a-zA-Z0-9]+)\b</string>   
    <key>name</key> 
    <string>duncan.name.class</string> 
</dict> 

Teraz mam nowy komponent językowy muszę powiedzieć mój temat, jak go obsłużyć. Zamierzam pracować nad motywem Amy dla tego przykładu.

Wracając do historii jako PackageResourceViewer tak:

  • W palecie polecenia SELECT PackageResourceViewer: Open Resource
  • W prezentowanym panelu wybierz Color Scheme - Default
  • W prezentowanym panelu wybierz Amy.tmTheme

Teraz masz gotowy plik motywu. Ponownie chcę zapisać moją kopię do folderu User, a następnie skopiować istniejący przykład. Mam zamiar skopiować String, ale wszystko, co chwyta twoją wyobraźnię, jest w porządku.

<dict> 
    <key>name</key> 
    <string>String</string> 
    <key>scope</key> 
    <string>string</string> 
    <key>settings</key> 
    <dict> 
     <key>foreground</key> 
     <string>#999999</string> 
    </dict> 
</dict> 

Teraz będę zmienić powielać z String zrobić kolorystykę do mojego nowego komponentu języka.

<dict> 
    <key>name</key> 
    <string>Class Names :: Duncan</string> 
    <key>scope</key> 
    <string>duncan.name.class</string> 
    <key>settings</key> 
    <dict> 
     <key>foreground</key> 
     <string>#999999</string> 
     <key>background</key> 
     <string>#FFFFFF</string> 
     <key>fontStyle</key> 
     <string>bold</string> 
    </dict> 
</dict> 

Mam nadzieję, że rozpoznajesz nazwiska, których używam w pracy, którą wykonaliśmy powyżej?

Wybrałem nieco szalony zestaw preferencji podświetlania składni tylko po to, aby pokazać niektóre z dostępnych opcji.Stuknij się, bawiąc się pomysłami tutaj.

Czy to wszystko ma sens?

Dzięki tym pomysłom możesz naprawić wszelkie podświetlenia składni, które masz w ST3, aby działały dokładnie tak, jak chcesz. Być może moje powyższe wyrażenie nie jest zbyt wspaniałe? Nie myślałem o tym zbyt wiele, więc może się okazać, że potrzebujesz więcej pracy, aby uzyskać to, czego chcesz.

Daj mi znać, jeśli niektóre z nich nie mają sensu, a postaram się zrobić to lepiej.

+0

Awesome! Bardzo pomocne. – user3286105

+0

@jwpfox. Dziękujemy za szczegółowy i edukacyjny samouczek. Niestety, nie mogę znaleźć pliku C++. TmLanguage podczas wykonywania powyższych instrukcji. Czy ST3 przeniosło ustawienia podświetlania składni do innego pliku? – herteladrian

+0

Istnieje teraz nowy format pliku, patrz https://www.sublimetext.com/docs/3/syntax.html – jwpfox

4

Zalecam również zainstalowanie pakietu Scope Hunter, a następnie włącz Toggle Instant Scoper przez Ctrl+Shift+P. Spowoduje to wyświetlenie zakresu elementu pod kursorem.

Dzięki temu można zobaczyć, w jaki sposób ST przeanalizował plik, i użyć nazwy każdego zakresu w definicji motywu, aby odmiennie pokolorować elementy o różnym zakresie.

+1

O wiele łatwiej jest szybko zrozumieć, co się dzieje i zbadać parsowanie. Właśnie uświadomiłem sobie, że domyślne parsowanie C++ w Sublime Text 3 ma o wiele mniej zakresów niż początkowo wyobrażałem. Alternatywnie 'Ctrl + Alt + Shift + P' pokaże zakresy na pasku stanu bez instalowania pakietów. – arthropod