Exuberant Ctags#
Program ctags#
--excmd#
Argument --excmd
określa jeden z trzech trybów wyszukiwania zgodnych z poleceniami edytora EX (pole tagaddress
), który w docelowym edytorze tekstowym zostanie wykorzystany do zlokalizowania tagów pochodzących z bieżącego wywołania programu ctags. W celu zachowania spójnego wyniku dla wszystkich analizowanych plików najlepiej umieszczać argument --excmd
jeszcze przed pierwszym analizowanym plikiem. Argument --excmd
jest ignorowany w trybie etags.
Opis działania#
Prawidłowe użycie argumentu najlepiej objaśnić na zapisie składniowym:
ctags --excmd=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. value - jedna z trzech wartości tekstowych reprezentująca tryb wyszukiwania. Można podawać całe słowo lub jego pierwszą literę (wielkość znaków ma znaczenie dla pojedynczej pierwszej litery, a w przypadku całego słowa tylko jego pierwsza litera musi być mała):
"number"
lub"n"
- tagi z bieżącej generacji do oznaczania swojego położenia w kodzie źródłowym używają tylko numerów linii. Alternatywnie można skorzystać z identycznie działającego skróconego argumentu-n
.Ma to następujące zalety:
- Znacząco zmniejsza się rozmiar wynikowego pliku z tagami.
- Eliminuje problemy ze znalezieniem tagów, które wynikłyby z powodu zmiany linii będących źródłem tych tagów (w sytuacji, kiedy po zmianie w tych liniach ponownie nie wygenerowaliśmy dla nich uaktualnionych tagów), co w trybie
"pattern"
(zależnie od charakteru zmian w liniach) prawdopodobnie spowodowałoby niedopasowanie utworzonego wcześniej wzorca (zwróć uwagę, że niektóre edytory, takie jak vim, są w stanie obsłużyć takie sytuacje na wiele sposobów). - Eliminuje znajdowanie identycznie pasujących, ale błędnie zlokalizowanych, linii źródłowych.
- Zachowuje osobne wpisy dla linii o identycznej treści. W trybie
"pattern"
powtarzające się wpisy zostaną usunięte bo generowane przez niego wzorce wyszukiwania są identyczne, co sprawia, że duplikaty stają się bezużyteczne.
Z drugiej jednak strony tryb ten ma jedną istotną wadę; zmiany w plikach źródłowych (np. dodawanie/usuwanie linii) mogą powodować, że numery linii w wygenerowanych tagach nie będą odpowiadały liniom w plikach źródłowych, co spowoduje przeskakiwanie w miejsca, które nie są rzeczywistym miejscem występowania danej definicji. Zasadniczo tryb ten został przewidziany dla kodu źródłowego, który nie ulega dalszym modyfikacjom.
Wybranie trybu
"number"
powoduje całkowite zignorowanie argumentu-B
lub-F
."pattern"
lub"p"
- tagi z bieżącej generacji do oznaczania swojego położenia w kodzie źródłowym używają wzorców wyszukiwania, a nie numerów linii stosowanych zwykle w przypadku definicji makr. Ma to tę zaletę, że zapobiega odwoływaniu się do przestarzałych numerów linii w sytuacji, kiedy dodano lub usunięto jakieś linie od czasu ostatniego wygenerowania tagów. Alternatywnie można skorzystać z identycznie działającego skróconego argumentu-N
."mixed"
lub"m"
- tagi z bieżącej generacji do oznaczania swojego położenia w kodzie źródłowym używają mieszanego trybu. W większości przypadków będą to wzorce wyszukiwania (czyli tryb"pattern"
), choć w języku C dla definicji makr użyte zostaną numery linii (czyli tryb"number"
). Jest to domyślne zachowanie z oryginalnego Ctags, które pozostawiono także w projekcie Exuberant Ctags. W języku Fortran numery linii zostają użyte także do zwykłych bloków, ponieważ odpowiadające im linie źródłowe są zasadniczo identyczne, co sprawia, że tworzenie wzorców wyszukiwania do znajdowania wszystkich dopasowań jest bezużyteczne.W trybie
"pattern"
lub"mixed"
za pomocą argumentu-B
lub-F
można dodatkowo ustawiać kierunek dla wzorców wyszukiwania (tj. do tyłu lub do przodu).
- 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).
Argument --excmd
można podawać naprzemiennie z argumentem -n
czy -N
, nawet wiele razy (separatorem jest spacja), i każdy kolejny będzie miał wpływ tylko na te pliki, które występują bezpośrednio po nim.
Prosty przykład:
ctags --excmd=number *
ctags --excmd=n *
ctags -n *
ctags --excmd=pattern *
ctags --excmd=p *
ctags -N *
ctags --excmd=mixed *
ctags --excmd=m *
ctags *
ctags --excmd=p --excmd=n * :: oznaczanie położenia numerami linii
ctags --excmd=n --excmd=p * :: oznaczanie położenia wzorcami wyszukiwania
ctags --excmd=n test.js --excmd=p test.html :: oznaczanie położenia numerami linii w pliku 'test.js', a potem wzorcami wyszukiwania w pliku 'test.html'
:: Błędne przypadki
ctags --excmd
ctags --excmd=
ctags --excmd=""
ctags --excmd=" "
ctags --excmd=cos