Exuberant Ctags#
Program ctags#
--<lang>-kinds#
Argument --<lang>-kinds
dla bieżącego wywołania programu ctags kontroluje stanem włączenia/wyłączenia określonych rodzajów tagów w poszczególnych językach spośród wszystkich obsługiwanych języków (zarówno tych pochodzących z wbudowanych parserów, jak i tych z własnych wyrażeń regularnych), które będą brane pod uwagę przy generowaniu tagów dla analizowanych plików. W celu zachowania spójnego wyniku dla wszystkich analizowanych plików dla danego języka najlepiej umieszczać kontrolujący go argument --<lang>-kinds
jeszcze przed pierwszym analizowanym plikiem w tym języku.
Opis działania#
Prawidłowe użycie argumentu najlepiej objaśnić na zapisie składniowym:
ctags --<lang>-kinds[=[+|-]value] [--argument | -argument] [path]
gdzie poszczególne człony oznaczają:
- ctags - ścieżka względna lub bezwzględna do pliku binarnego programu ctags (
ctags.exe
). Wszystko zależy od sposobu uruchamiania programu ctags, np. z systemowej konsoli, ze skrótu do programu czy z innego programu/skryptu. - <lang> - identyfikator konkretnego języka obsługiwanego w bieżącym wywołaniu programu ctags, którego stan włączenia/wyłączenia zdefiniowanych dla niego poszczególnych rodzajów tagów będzie modyfikowany. Wielkość znaków nie ma znaczenia.
value - jedna z dwóch wartości tekstowych wpływająca na stan włączenia/wyłączenia określonych rodzajów tagów zdefiniowanych w poszczególnych językach (wielkość znaków ma znaczenie):
""
- specjalna pusta wartość oznaczająca wyłączenie wszystkich zdefiniowanych do tej pory rodzajów tagów dla danego języka. Jest ona równoważna z przekazaniem pustego argumentu--<lang>-kinds
(tj. bez podania jakiejkolwiek wartości)."list"
- lista skrótowych nazw (czyli pojedynczych liter) wskazujących na określone rodzaje tagów zdefiniowanych dla danego języka w bieżącym wywołaniu programu ctags, które zostaną (zależnie od sposobu zapisu tych skrótowych nazw) włączone lub wyłączone przy generowaniu tagów dla analizowanych plików. Skrótowe nazwy na liście podaje się bez rozdzielania ich dodatkowymi znakami separacji."+"
lub"-"
- dodatkowe prefiksy w postaci znaku plusa lub minusa umieszczane przed wartościami w argumencie--<lang>-kinds
, które kontrolują stanem włączenia/wyłączenia poszczególnych rodzajów tagów zdefiniowanych dla danego języka. Znak plusa włącza a znak minus wyłącza wszystkie te rodzaje tagów, które za nim występują. Jeśli pierwszy rodzaj tagu na przekazanej liście nie zostanie poprzedzony znakiem plusa lub minusa to wszystkie rodzaje tagów zdefiniowane dla danego języka są wyłączone. Do momentu napotkania znaku minusa w przekazanej liście każdy umieszczony w niej rodzaj tagu pozostaje włączony. W ten sposób łatwo jest włączać/wyłączać wszystkie zdefiniowane rodzaje tagów dla danego języka za jednym zamachem, albo włączać/wyłączać tylko niektóre z nich. Oto kilka przykładowych wywołań programu ctags z wykorzystaniem lub pominięciem tych prefiksów:"ctags --c-kinds"
lub"ctags --c-kinds="
lub"ctags --c-kinds="""
- wyłączenie wszystkich rodzajów tagów dla języka C."ctags --c-kinds=v"
- wyłączenie wszystkich rodzajów tagów dla języka C, a potem włączenie tagu z rodzajem 'v'."ctags --c-kinds=+lp"
lub"ctags --c-kinds=+l+p"
- włączenie dla języka C tagów z rodzajem 'l' i 'p', które domyślnie są wyłączone (reszta rodzajów tagów ma domyślny stan włączenia/wyłączenia)."ctags --c-kinds=-fv"
lub"ctags --c-kinds=-f-v"
- wyłączenie dla języka C tagów z rodzajem 'f' i 'v' (reszta rodzajów tagów ma domyślny stan włączenia/wyłączenia).
- argument - jeden lub więcej dodatkowych argumentów dostrajających działanie programu ctags.
- path - jedna lub więcej dodatkowych ścieżek do plików/folderów, które będą analizowane przy generowaniu tagów (szczegóły).
Kilka uwag odnośnie stosowania argumentu --<lang>-kinds
:
- Argument
--<lang>-kinds
można podawać wielokrotnie (separatorem jest spacja), i każdy kolejny będzie miał wpływ tylko na te argumenty, które występują bezpośrednio po nim. - Jeśli pierwszym członem w argumencie
--<lang>-kinds
będzie identyfikator nieobsługiwanego języka to zwrócony zostanie komunikatctags: Warning: Unknown language "xxx" in "xxx-kinds" option
. - Jeśli wartość w argumencie
--<lang>-kinds
będzie zawierała nieistniejący rodzaj taga dla danego języka to zwrócony zostanie komunikatctags: Warning: Unsupported parameter 'xxx' for --lang-kinds option
. - Przekazanie argumentu
--<lang>-kinds
bez podania jakiejkolwiek wartości jest równoważne z niejawnym użyciem pustej wartości""
. Argument
--<lang>-kinds
nie wpływa na stan włączenia/wyłączenia tych rodzajów tagów, które pochodzą z własnych wyrażeń regularnych zdefiniowanych argumentem--regex-<lang>
dla języków z wbudowanych parserów. W razie konieczności należy usunąć dla danego języka wszystkie te argumenty z wyrażeniami regularnymi, które odpowiadają za tworzenie niechcianych rodzajów tagów.Powyższe zachowanie może być błędem lub celowym zabiegiem, gdzie wyłączenie wszystkich rodzajów tagów dla języka obsługiwanego przez wbudowany parser obejmie tylko te rodzaje tagów, które zostały zdefiniowane bezpośrednio w parserze, co w połączeniu z argumentem
--list−kinds
pozwoli szybko zlokalizować te dodatkowe rodzaje tagów, które pochodzą z własnych wyrażeń regularnych zdefiniowanych argumentem--regex-<lang>
dla tego języka.- Stan włączenia/wyłączenia wszystkich rodzajów tagów zdefiniowanych dla konkretnego lub wszystkich obsługiwanych języków można sprawdzić argumentem
--list−kinds
, gdzie przy wyłączonym rodzaju tagu pojawi się dodatkowy dopisek"[off]"
. - Niektóre rodzaje tagów, których definicje umieszczono bezpośrednio w parserze danego języka są domyślnie wyłączone (jak w przypadku języka C/C++).
Prosty przykład:
ctags --c-kinds="" --list-kinds=c :: wyłączenie wszystkich rodzajów tagów pochodzących z parsera dla języka C
ctags --c-kinds= --list-kinds=c :: wyłączenie wszystkich rodzajów tagów pochodzących z parsera dla języka C
ctags --c-kinds --list-kinds=c :: wyłączenie wszystkich rodzajów tagów pochodzących z parsera dla języka C
ctags --list-kinds=c
ctags --c-kinds=vf --list-kinds=c :: włączenie dla języka C tylko tych tagów z rodzajem 'v' i 'f'
ctags --c-kinds=v+f --list-kinds=c :: włączenie dla języka C tylko tych tagów z rodzajem 'v' i 'f'
ctags --c-kinds=-vf --list-kinds=c :: wyłączenie dla języka C tagów z rodzajem 'v' i 'f'
ctags --c-kinds=-v-f --list-kinds=c :: wyłączenie dla języka C tagów z rodzajem 'v' i 'f'
ctags --c-kinds=+lp --list-kinds=c :: włączenie dla języka C tagów z rodzajem 'l' i 'p' (które domyślnie są wyłączone)
ctags --c-kinds=+l+p --list-kinds=c :: włączenie dla języka C tagów z rodzajem 'l' i 'p' (które domyślnie są wyłączone)
ctags --c-kinds --c-kinds=vf --list-kinds=c :: wyłączenie wszystkich rodzajów tagów, a potem włączenie tylko 'v' i 'f'
ctags --c-kinds --c-kinds=+vf --list-kinds=c :: wyłączenie wszystkich rodzajów tagów, a potem włączenie tylko 'v' i 'f'
ctags --c-kinds --c-kinds=+v+f --list-kinds=c :: wyłączenie wszystkich rodzajów tagów, a potem włączenie tylko 'v' i 'f'
ctags --regex-c=/a/a/ --c-kinds --list-kinds=c :: nowy rodzaj tagu 'r' pozostaje włączony
ctags --regex-c=/a/a/v/ --c-kinds --list-kinds=c :: nowy rodzaj tagu 'v' pozostaje włączony
ctags --regex-c=/a/a/v/ --c-kinds=v --list-kinds=c :: nowy rodzaj tagu 'v' pozostaje włączony
ctags --regex-c=/a/a/v/ --c-kinds=+v --list-kinds=c :: nowy rodzaj tagu 'v' pozostaje włączony
ctags --regex-c=/a/a/v/ --c-kinds=-v --list-kinds=c :: nowy rodzaj tagu 'v' pozostaje włączony
ctags --langdef=new --list-kinds=new :: nowy język 'new' nie ma żadnych rodzajów tagów
ctags --langdef=new ctags --regex-new=/a/a/ --list-kinds=new :: nowy rodzaj tagu 'r' pozostaje włączony
ctags --langdef=new ctags --regex-new=/a/a/ --new-kinds --list-kinds=new :: wyłączenie wszystkich rodzajów tagów
ctags --langdef=new ctags --regex-new=/a/a/ --new-kinds=-r --list-kinds=new :: wyłączenie nowego rodzaj tagu 'r'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/ --list-kinds=new :: dwa nowe rodzaj tagu 'r' pozostają włączone
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/ --new-kinds --list-kinds=new :: wyłączenie wszystkich rodzajów tagów
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/ --new-kinds=-r --list-kinds=new :: wyłączenie dwóch nowych rodzajów tagu 'r'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/ --new-kinds=r --list-kinds=new :: włączenie tylko tych tagów z rodzajem 'r'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/ --new-kinds=+r --list-kinds=new :: włączenie dodatkowych tagów z rodzajem 'r'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/v/ --list-kinds=new :: dwa nowe rodzaj tagu 'r' i 'v' pozostają włączone
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/v/ --new-kinds --list-kinds=new :: wyłączenie wszystkich rodzajów tagów
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/v/ --new-kinds=-r --list-kinds=new :: wyłączenie nowego rodzajów tagu 'r'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/v/ --new-kinds=-v --list-kinds=new :: wyłączenie nowego rodzajów tagu 'v'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/v/ --new-kinds=-rv --list-kinds=new :: wyłączenie nowego rodzajów tagu 'r' i 'v'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/v/ --new-kinds=r --list-kinds=new :: włączenie tylko tych tagów z rodzajem 'r'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/v/ --new-kinds=v --list-kinds=new :: włączenie tylko tych tagów z rodzajem 'v'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/v/ --new-kinds=rv --list-kinds=new :: włączenie tylko tych tagów z rodzajem 'r' i 'v'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/v/ --new-kinds --new-kinds=+r --list-kinds=new :: włączenie dodatkowych tagów z rodzajem 'r'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/v/ --new-kinds --new-kinds=+v --list-kinds=new :: włączenie dodatkowych tagów z rodzajem 'v'
ctags --langdef=new --regex-new=/a/a/ --regex-new=/a/a/v/ --new-kinds --new-kinds=+rv --list-kinds=new :: włączenie dodatkowych tagów z rodzajem 'r' i 'v'
:: Błędne przypadki
ctags ---kinds
ctags --cos-kinds
ctags --c-kinds=a
ctags --regex-c=/a/a/ --c-kinds=r
ctags --regex-c=/a/a/ --c-kinds=+r
ctags --regex-c=/a/a/ --c-kinds=-r