fbpx

Comandos Linux – Comando ctags

Comando ctags do Linux

Atualizado: 05/04/2019 por Computer Hope

comando ctags

Em sistemas operacionais do tipo Unix, o comando ctags cria arquivos de tags para o código- fonte .

Descrição

Os programas ctags e etags (daqui em diante referidos coletivamente como ctags , exceto onde distinguidos) geram um arquivo de índice (ou “tag”) para uma variedade de objetos de idioma encontrados no (s) arquivo (s) especificado (s). Esse arquivo de tag permite que esses itens sejam localizados rápida e facilmente por um editor de texto ou outro utilitário . Uma “marca” significa um objeto de idioma para o qual uma entrada de índice está disponível (ou a entrada de índice criada para esse objeto).

Como alternativa, ctags pode gerar um arquivo de referência cruzada que lista, de forma legível por humanos, informações sobre os vários objetos de origem encontrados em um conjunto de arquivos de idioma.

Os arquivos de índice de tags são suportados por vários editores, que permitem ao usuário localizar o objeto associado a um nome que aparece em um arquivo de origem e pular para o arquivo e a linha que define o nome. Esses incluem:

  • vi e seus derivados (por exemplo, Elvis , Vim , Vile , Lemmy )
  • CRiSP
  • Emacs
  • FTE (editor de texto dobrável)
  • JED
  • jEdit
  • Minado
  • NEdit (Edição do Nirvana)
  • TSE (o editor do SemWare)
  • UltraEdit
  • Área de trabalho
  • X2
  • Zeus

O ctags é capaz de gerar diferentes tipos de tags para cada um dos muitos idiomas diferentes. Para obter uma lista completa dos idiomas suportados, os nomes pelos quais são reconhecidos e os tipos de tags gerados para cada um, consulte as opções –list-languages e –list-types .

Arquivos Fonte

A menos que a opção –language-force seja especificada, o idioma de cada arquivo de origem é selecionado automaticamente com base no mapeamento dos nomes dos arquivos para os idiomas. Os mapeamentos em vigor para cada idioma podem ser exibidos usando a opção –list-maps e podem ser alterados usando a opção –langmap . Nas plataformas que o suportam, se o nome de um arquivo não estiver mapeado para um idioma e o arquivo for executável , a primeira linha do arquivo será verificada para verificar se o arquivo é um script ” #! ” Para um idioma reconhecido.

Por padrão, todos os outros nomes de arquivos são ignorados. Isso permite executar ctags em todos os arquivos em um único diretório (por exemplo, ” ctags * “) ou em todos os arquivos em uma árvore inteira de diretórios de origem (por exemplo, ” ctags -R “), uma vez que somente os arquivos cujos nomes são mapeados para idiomas serão verificados.

O motivo pelo qual extensões .h são mapeadas para arquivos C ++ em vez de arquivos C é porque é comum usar extensões .h no C ++, e nenhum dano resulta em tratá-las como arquivos C ++.

Sintaxe

   ctags [options] [file(s)]
   etags [options] [file(s)]

Opções

Apesar da variedade de opções disponíveis, os padrões são definidos para que ctags seja executado normalmente sem nenhuma opção (por exemplo, ” ctags * ” ou ” ctags -R “), que criará um arquivo de tag no diretório atual para todas as fontes reconhecidas arquivos. As opções descritas abaixo são fornecidas apenas para permitir a personalização personalizada para atender a necessidades especiais.

Observe que os espaços que separam as opções de letra única de seus parâmetros são opcionais.

Observe também que os parâmetros booleanos para as opções de formato longo (aqueles que começam com ”  ” e que usam o parâmetro ” [= yes | no] “) podem ser omitidos; nesse caso, ” = yes ” está implícito. (por exemplo, –sort é equivalente a –sort = yes ). Observe também que ” = 1 ” e ” = on ” são considerados sinônimos para ” = yes ” e que ” = 0 ” e ” = off ” são considerados sinônimos para ” = no “.

Algumas opções são ignoradas ou úteis apenas quando usadas durante a execução no modo etags (consulte a opção -e ). Tais opções serão anotadas.

A maioria das opções pode aparecer em qualquer lugar da linha de comando , afetando apenas os arquivos que seguem a opção. Algumas opções, no entanto, devem aparecer antes do primeiro nome do arquivo e serão anotadas como tal.

As opções que adotam nomes de idiomas aceitarão esses nomes em maiúsculas ou minúsculas. Veja a opção –list-languages para obter uma lista completa dos nomes dos idiomas embutidos.

As opções são:

-aEquivalente a –append .
-BUse padrões de pesquisa para trás (por exemplo ,? Padrão? ). Ignorado no modo etags .
-eAtive o modo etags , que criará um arquivo de tags para uso com o editor Emacs . Como alternativa, se ctags for chamado por um nome que contenha a string ” etags ” (renomeando ou criando um link para o executável), o modo etags será ativado. Esta opção deve aparecer antes do primeiro nome do arquivo .
-f tagfileUse o nome especificado pelo tagfile para o arquivo de tags (o padrão é ” tags ” ou ” TAGS ” ao executar no modo etags ). Se tagfile for especificado como ”  “, o arquivo de tag será gravado na saída padrão. O ctags se recusará a aceitar pedidos se o tagfile existir e sua primeira linha contiver algo diferente de uma linha de tags válida. Isso salvará seu pescoço se você digitar erroneamente ” ctags -f * .c “, o que sobrescreveria seu primeiro arquivo C com as tags geradas pelo restante! Ele também se recusará a aceitar um nome de arquivo com vários caracteres que comece com um caractere ‘  ‘ (traço), pois isso provavelmente significa que você deixou de fora o nome do arquivo de tag e essa opção tentou pegar a próxima opção como o nome do arquivo . Se você realmente deseja nomear seu arquivo de tag de saída ” -ugly “, especifique-o como ” ./-ugly “. Esta opção deve aparecer antes do primeiro nome do arquivo. Se esta opção for especificada mais de uma vez, somente a última será aplicada.
-FUse padrões de pesquisa direta (por exemplo, / padrão / ). Esse é o padrão. Ignorado no modo etags .
lista -hEspecifica uma lista de extensões de arquivo, separadas por pontos, que devem ser interpretadas como arquivos de inclusão (ou cabeçalho). Para indicar arquivos sem extensão, use um ponto não seguido por um caractere que não seja ponto (por exemplo, ” . “, ” ..X “, ” .x. “). Esta opção afeta apenas como a definição do escopo de um determinado tipo de tags é interpretada (isto é, se elas são consideradas globalmente visíveis ou visíveis apenas dentro do arquivo em que estão definidas); não mapeia a extensão para nenhum idioma específico. Qualquer tag localizada em um arquivo não incluído e que não possa ser vista (por exemplo, vinculada a) de outro arquivo é considerada com escopo limitado (por exemplo, estático). Nenhum tipo de tag que apareça em um arquivo de inclusão será considerado com escopo limitado ao arquivo. Se o primeiro caractere da lista for um sinal de mais, as extensões da lista serão anexadas à lista atual; caso contrário, a lista substituirá a lista atual. Veja também a opção –file-scope . A lista padrão é ” .hHhh.hpp.hxx.h ++. Inc.def “. Para restaurar a lista padrão, especifique -h padrão. Observe que, se uma extensão fornecida para esta opção ainda não estiver mapeada para um idioma específico (consulte Arquivos de origem , acima), você também precisará usar a opção –langmap ou –language-force .
-I lista de identificadoresEspecifica uma lista de identificadores que devem ser manipulados especialmente ao analisar arquivos de origem C e C ++. Esta opção é fornecida especificamente para lidar com casos especiais decorrentes do uso de macros do pré-processador. Quando os identificadores listados são identificadores simples, esses identificadores serão ignorados durante a análise dos arquivos de origem. Se um identificador tiver o sufixo ‘ + ‘, ctags também ignorará qualquer lista de argumentos entre parênteses que pode seguir imediatamente o identificador nos arquivos de origem. Se dois identificadores forem separados com o caractere ‘ = ‘, o primeiro identificador será substituído pelo segundo identificador para fins de análise. A lista de identificadores pode ser fornecida diretamente na linha de comando ou lida em um arquivo separado. Se o primeiro caractere da lista de identificadores for ‘ @ ‘, ‘ . ‘ou um separador de nome de caminho (‘ / ‘ou’ \ ‘), ou os dois primeiros caracteres especificam uma letra de unidade (por exemplo, ” C: “), a lista de identificadores de parâmetros será interpretada como um nome de arquivo do qual ler um lista de identificadores, um por linha de entrada. Caso contrário, identifier-list é uma lista de identificadores (ou pares de identificadores) a serem manipulados especialmente, cada um deles delimitado por vírgula ou espaço em branco (nesse caso, a lista deve ser citada para manter a lista inteira como um argumento de linha de comando) . Múltiplas opções -I podem ser fornecidas. Para limpar a lista de identificadores de ignorados, forneça um único traço (”  “) para a lista de identificadores.

Esse recurso é útil quando as macros do pré-processador são usadas de maneira a causar confusão sintática devido à sua presença. De fato, essa é a melhor maneira de solucionar vários problemas causados ​​pela presença de macros que impedem a sintaxe nos arquivos de origem (veja Advertências , abaixo). Alguns exemplos:

  int foo ARGDECL4 (void *, ptr, long int, nbytes)

No exemplo acima, a macro ” ARGDECL4 ” seria interpretada por engano como o nome da função em vez do nome correto de ” foo “. A especificação de -I ARGDECL4 resulta no comportamento correto.

  / * cria uma cadeia de versão RCS no módulo * / 
 MODULE_VERSION ("$ Revisão: 690 $")

No exemplo acima, a chamada de macro se parece muito com uma definição de função porque não é seguida por ponto e vírgula (na verdade, pode até ser seguida por uma definição de variável global que se parece muito com uma declaração de parâmetro de função no estilo Kernighan & Ritchie ) . De fato, essa aparente definição de função pode até fazer com que o restante do arquivo seja ignorado ao tentar concluir a definição. A especificação de -I MODULE_VERSION + evitaria esse problema.

  Exemplo CLASS {// seu conteúdo aqui};

O exemplo acima usa ” CLASS ” como uma macro de pré-processador que se expande para algo diferente para cada plataforma. Por exemplo, CLASS pode ser definido como ” class __declspec (dllexport) ” nas plataformas Win32 e ” class ” no UNIX . Normalmente, a ausência da palavra-chave C ++ ” class ” faria com que o arquivo de origem fosse analisado incorretamente. O comportamento correto pode ser restaurado especificando -I CLASS = class .

Arquivo -LLeia do arquivo uma lista de nomes de arquivos para os quais as tags devem ser geradas. Se o arquivo for especificado como ”  “, os nomes dos arquivos serão lidos na entrada padrão . Os nomes de arquivos lidos usando esta opção são processados ​​a seguir aos nomes de arquivos exibidos na linha de comando. As opções também são aceitas nesta entrada. Se esta opção for especificada mais de uma vez, somente a última será aplicada. Nota: o arquivo é lido no modo orientado a linhas, em que uma nova linha é o único delimitador e o espaço em branco não final é considerado significativo, para que nomes de arquivos contendo espaços possam ser fornecidos (no entanto, o espaço em branco final é retirado das linhas); isso pode afetar como as opções são analisadas, se incluídas na entrada.
-nEquivalente a –excmd = número .
-NEquivalente a –excmd = padrão .
-o tagfileEquivalente a -f tagfile.
-REquivalente a –recurse .
-uEquivalente a –sort = não ( sem classificação).
-VEquivalente a –verbose .
-WEsta opção é ignorada silenciosamente para compatibilidade com as ctags do SVR4 Unix.
-xImprima um arquivo de referência cruzada tabular e legível por humanos (xref) na saída padrão em vez de gerar um arquivo de tag. As informações contidas na saída incluem: o nome da tag; o tipo de etiqueta; o número da linha, o nome do arquivo e a linha de origem (com espaço em branco extra condensado) do arquivo que define a marca. Nenhum arquivo de tag é gravado e todas as opções que afetam a saída do arquivo de tags serão ignoradas. Aplicativos de exemplo para esse recurso estão gerando uma lista de todas as funções localizadas em um arquivo de origem (por exemplo, arquivo ctags -x –c-types = f ) ou gerando uma lista de todas as variáveis ​​globais visíveis externamente localizadas em um arquivo de origem (por exemplo, , ctags -x –c-types = v –file-scope = nenhum arquivo ). Esta opção deve aparecer antes do primeiro nome do arquivo.
–append [ = sim | não ]Indica se as tags geradas a partir dos arquivos especificados devem ser anexadas às que já estão presentes no arquivo de tags ou devem substituí-las. Esta opção está desativada por padrão. Esta opção deve aparecer antes do primeiro nome do arquivo.
–etags-include = arquivoInclua uma referência ao arquivo no arquivo de tags. Esta opção pode ser especificada quantas vezes desejar. Isso suporta a capacidade do Emacs de usar um arquivo de tags que “inclui” outros arquivos de tags. [Disponível apenas no modo etags ]
–exclude = [ padrão ]Adicione padrão a uma lista de arquivos e diretórios excluídos. Esta opção pode ser especificada quantas vezes desejar. Para cada nome de arquivo considerado por ctags , cada padrão especificado usando esta opção será comparado com o caminho completo (por exemplo, some / path / base.ext ) e com o nome da base (por exemplo, base.ext ) do arquivo, permitindo assim padrões que correspondem a um determinado nome de arquivo, independentemente de seu caminho, ou correspondem apenas a um caminho específico. Se o suporte apropriado estiver disponível na biblioteca de tempo de execução do seu compilador C, o padrão poderá conter os curingas comuns do shell (não expressões regulares ) comuns no Unix (não se esqueça de citar o parâmetro option para proteger os curingas de serem expandidos pelo shell antes de serem passado para ctags ; saiba também que curingas podem corresponder ao caractere de barra, ‘ / ‘). Você pode determinar se os curingas do shell estão disponíveis na sua plataforma examinando a saída da opção –version , que incluirá ” + curingas ” na lista de recursos compilados; caso contrário, o padrão será comparado aos nomes dos arquivos usando uma comparação textual simples.

Se o padrão começar com o caractere ‘ @ ‘, o restante da sequência será interpretado como um nome de arquivo para ler os padrões de exclusão, um por linha. Se o padrão estiver vazio, a lista de padrões excluídos será limpa. Observe que, na inicialização do programa, a lista de exclusão padrão contém ” EIFGEN “, ” SCCS “, ” RCS ” e ” CVS “, que são nomes de diretórios para os quais geralmente não é desejável descer ao processar a opção –recurse .

–excmd = tipoDetermina o tipo de comando EX usado para localizar tags no arquivo de origem. (Ignorado no modo etags .) Os valores válidos para o tipo (a palavra inteira ou a primeira letra são aceitos) são:

número : use apenas números de linha no arquivo de tags para localizar tags. Isso tem quatro vantagens:

1. Reduz significativamente o tamanho do arquivo de tags resultante.

2. Elimina falhas na localização de tags porque a linha que define a tag foi alterada, causando falha na correspondência de padrões (observe que alguns editores, como o vim , podem se recuperar em muitos casos).

3. Elimina a busca de linhas de origem correspondentes idênticas, mas incorretas (consulte Bugs , abaixo).

4. Mantém entradas separadas no arquivo de tags para linhas com conteúdo idêntico. No modo padrão, as entradas duplicadas são descartadas porque os padrões de pesquisa gerados são idênticos, tornando as entradas duplicadas inúteis.

No entanto, esta opção tem uma desvantagem significativa: alterações nos arquivos de origem podem fazer com que os números de linha registrados no arquivo de tags não correspondam mais às linhas no arquivo de origem, fazendo com que saltos em algumas tags não atinjam a definição de destino por um ou mais linhas Basicamente, essa opção é melhor usada quando o código-fonte ao qual é aplicado não está sujeito a alterações. Selecionar esse tipo de opção faz com que as seguintes opções sejam ignoradas: -BF.

padrão : use apenas padrões de pesquisa para todas as tags, em vez dos números de linha geralmente usados ​​para definições de macro. Isso tem a vantagem de não fazer referência a números de linhas obsoletos quando as linhas foram adicionadas ou removidas desde que o arquivo de tag foi gerado.

misto : nesse modo, os padrões geralmente são usados ​​com algumas exceções. Para C, os números de linha são usados ​​para tags de definição de macro. Esse era o formato padrão gerado pelas ctags originais e, portanto, é mantido como o padrão para esta opção. Para o Fortran , os números de linha são usados ​​para blocos comuns porque suas linhas de origem correspondentes geralmente são idênticas, tornando as pesquisas de padrões inúteis para encontrar todas as correspondências.

–extra=[+|-]flagsEspecifica se é necessário incluir entradas de tags extras para certos tipos de informações. Os sinalizadores de parâmetro são um conjunto de sinalizadores de uma letra, cada um representando um tipo de entrada de tag extra a ser incluída no arquivo de tag. Se os sinalizadores forem precedidos pelo caractere ‘ + ‘ ou ‘  ‘, o efeito de cada sinalizador será adicionado ou removido daqueles ativados no momento; caso contrário, os sinalizadores substituem as configurações atuais. O significado de cada bandeira:

f : Inclua uma entrada para o nome do arquivo base de cada arquivo de origem (por exemplo, ” exemplo.c “), que endereça a primeira linha do arquivo.

q : inclua uma entrada de marca extra qualificada para cada marca que seja membro de uma classe (para idiomas para os quais essas informações são extraídas; atualmente C ++, Eiffel e Java ). A forma real da marca qualificada depende do idioma do qual a marca foi derivada (usando um formulário mais natural para a forma como as chamadas qualificadas são especificadas no idioma). Para C ++, ele está no formato ” class :: member “; para Eiffel e Java, está no formato ” class.member “. Isso pode permitir uma localização mais fácil de uma tag específica quando várias ocorrências de um nome de tag ocorrem no arquivo de tags. Observe, no entanto, que isso pode potencialmente dobrar o tamanho do arquivo de tags.

–fields=[+|-]flagsEspecifica os campos de extensão disponíveis que devem ser incluídos nas entradas do arquivo de tags (consulte Formato do arquivo de tags , abaixo, para obter mais informações). Os sinalizadores de parâmetro são um conjunto de sinalizadores de uma letra, cada um representando um tipo de campo de extensão a incluir, com os seguintes significados (desativados por padrão, a menos que seja indicado):

a : Acesso (ou exportação) dos alunos

f : escopo restrito a arquivos [ativado]

i : Informações sobre herança

k : tipo de tag como uma única letra [ativada]

K : Tipo de tag como nome completo

l : idioma do arquivo de origem que contém a tag

m : informações de implementação

n : número da linha de definição de tag

s : escopo da definição de tag [ativado]

S : Assinatura da rotina (por exemplo, protótipo ou lista de parâmetros)

z : Inclua a chave “kind:” no campo kind

t : Tipo e nome de uma variável ou typedef como “typeref:” campo [ativado]

Cada letra ou grupo de letras pode ser precedido por ‘ + ‘ para adicioná-lo ao conjunto padrão ou ‘  ‘ para excluí-lo. Na ausência de qualquer sinal ‘ + ‘ ou ‘  ‘ anterior, somente os tipos listados explicitamente nos sinalizadores serão incluídos na saída (ou seja, substituindo o conjunto padrão). Esta opção será ignorada se a opção –format = 1 tiver sido especificada. O valor padrão desta opção é fkst .

–file-scope [ = yes | no ]Indica se as tags com escopo definido apenas para um único arquivo (por exemplo, tags que não podem ser vistas fora do arquivo em que estão definidas, como tags “estáticas”) devem ser incluídas na saída. Veja também a opção -h . Essa opção é ativada por padrão.
–filtro [ = yes | no ]Faz com que as ctags se comportem como um filtro, lendo os nomes dos arquivos de origem da entrada padrão e imprimindo suas tags na saída padrão, arquivo por arquivo. Se –sorted estiver ativado, as tags serão classificadas apenas no arquivo de origem em que estão definidas. Os nomes de arquivos são lidos a partir da entrada padrão no modo de entrada orientado a linhas (consulte a nota para a opção -L ) e somente após os nomes de arquivos listados na linha de comandos ou de qualquer arquivo fornecido usando a opção -L . Quando esta opção está ativada, as opções -f , -o e –totals são ignoradas. Esta opção é bastante esotérica e está desativada por padrão. Esta opção deve aparecer antes do primeiro nome do arquivo.
–filter-terminator = stringEspecifica uma sequência para imprimir na saída padrão, seguindo as tags para cada nome de arquivo analisado quando a opção –filter está ativada. Isso pode permitir que um aplicativo leia a saída de ctags para determinar quando a saída de cada arquivo é finalizada. Observe que, se o nome do arquivo lido for um diretório e –recurse estiver ativado, essa sequência será impressa apenas uma vez no final de todas as tags encontradas, descendo o diretório. Essa sequência sempre será separada da última linha de tag do arquivo por sua nova linha final. Esta opção é bastante esotérica e está vazia por padrão. Esta opção deve aparecer antes do primeiro nome do arquivo.
–format=levelAltere o formato do arquivo de tag de saída. Atualmente, os únicos valores válidos para o nível são 1 ou 2 . O nível 1 especifica o formato do arquivo de tag original e o nível 2 especifica um novo formato estendido que contém os campos de extensão (mas de uma maneira que mantém a compatibilidade com as implementações originais do vi ). O nível padrão é 2 . Esta opção deve aparecer antes do primeiro nome do arquivo. Ignorado no modo etags .
–helpImprime na saída padrão uma descrição detalhada do uso e sai.
–if0[=yes|no]Indica uma preferência sobre se o código dentro de uma ramificação ” #if 0 ” de um condicional do pré-processador deve ser examinado para marcas que não sejam de macro (as marcas de macro são sempre incluídas). Como a intenção dessa construção é desativar o código, o valor padrão dessa opção é não . Observe que isso indica apenas uma preferência e não garante ignorar o código dentro de uma ramificação ” #if 0 “, pois o algoritmo de fallback usado para gerar tags quando as condicionais do pré-processador são muito complexas seguem todas as ramificações de uma condicional. Esta opção está desativada por padrão.
– <LANG> -kinds = [ + |  ] tiposEspecifica uma lista de tipos (ou tipos) específicos de idioma para incluir no arquivo de saída para um idioma específico, em que <LANG> faz distinção entre maiúsculas e minúsculas e é um dos nomes de idiomas internos (consulte o –list- idiomas para uma lista completa). Os tipos de parâmetro são um grupo de sinalizadores de uma letra que designam tipos de tags (específicos ao idioma) para incluir ou excluir da saída. Os conjuntos específicos de sinalizadores reconhecidos para cada idioma, seus significados e padrões podem ser listados usando a opção –list-types . Cada letra ou grupo de letras pode ser precedido por ‘ + ‘ para adicioná-lo ou ‘  ‘ para removê-lo do conjunto padrão. Na ausência de qualquer sinal ‘ + ‘ ou ‘  ‘ anterior, somente os tipos listados explicitamente nos tipos serão incluídos na saída (ou seja, substituindo o padrão para o idioma especificado).

Como exemplo para a linguagem C, para adicionar protótipos e declarações de variáveis ​​externas ao conjunto padrão de tipos de tags, mas excluir macros, use –c-types = + px-d ; para incluir apenas tags para funções, use –c-types = f .

–langdef = nameDefine um novo idioma definido pelo usuário, nome , a ser analisado com expressões regulares. Uma vez definido, o nome pode ser usado em outras opções, com nomes de idiomas. O uso típico dessa opção é primeiro definir o idioma e, em seguida, mapear os nomes de arquivos para ele usando –langmap , depois especificar expressões regulares usando –regex- <LANG> para definir como suas tags são encontradas.
–langmap=map[,map[…]]Controla como os nomes dos arquivos são mapeados para os idiomas (consulte a opção –list-maps ). Cada mapa separado por vírgula consiste no nome do idioma (um idioma interno ou definido pelo usuário), dois pontos e uma lista de extensões de arquivo e / ou padrões de nome de arquivo. Uma extensão de arquivo é especificada precedendo a extensão com um ponto (por exemplo, ” .c “). Um padrão de nome de arquivo é especificado colocando-o entre parênteses (por exemplo, ” ([Mm akefile) “). Se o suporte apropriado estiver disponível na biblioteca de tempo de execução do seu compilador C, o padrão do nome do arquivo poderá conter os curingas comuns do shell comuns no Unix (não se esqueça de citar o parâmetro option para proteger os curingas de serem expandidos pelo shell antes de serem passados ​​para ctags ). Você pode determinar se os curingas do shell estão disponíveis na sua plataforma examinando a saída da opção –version , que incluirá ” + curingas ” na lista de recursos compilados; caso contrário, os padrões de nome de arquivo serão comparados aos nomes de arquivo usando uma comparação textual simples. Ao mapear uma extensão de arquivo, ela primeiro será mapeada de qualquer outro idioma.

Se o primeiro caractere em um mapa for um sinal de mais, as extensões e os padrões de nome de arquivo nesse mapa serão anexados ao mapa atual desse idioma; caso contrário, o mapa substituirá o mapa atual. Por exemplo, para especificar que apenas os arquivos com extensões .c e .x devem ser tratados como arquivos de linguagem C, use ” –langmap = c: .cx “; para também adicionar arquivos com extensões .j como arquivos de linguagem Java, especifique ” –langmap = c: .cx, java: + .j “. Para mapear makefiles (por exemplo, arquivos nomeados ” Makefile “, ” makefile ” ou com a extensão ” .mak “) para um idioma chamado ” make “, especifique ” –langmap = make: ([Mm] akefile) .mak “ Para mapear arquivos sem extensão, especifique um ponto que não seja seguido por um caractere que não seja ponto (por exemplo, ” . “, ” ..X “, ” .x. “). Para limpar o mapeamento para um idioma específico (inibindo a geração automática de tags para esse idioma), especifique uma lista de extensões vazia (por exemplo, ” –langmap = fortran: “). Para restaurar os mapeamentos de idioma padrão para todo um idioma específico, forneça a palavra-chave ” padrão ” para o mapeamento. Para especificar restaurar os mapeamentos de idiomas padrão para todos os idiomas, especifique ” –langmap = default “. Observe que as extensões de arquivo são testadas antes dos padrões de nome de arquivo ao inferir o idioma de um arquivo.

–language-force = idiomaPor padrão, ctags seleciona automaticamente o idioma de um arquivo de origem, ignorando os arquivos cujo idioma não pode ser determinado (consulte Arquivos de origem , acima). Essa opção força o idioma especificado (sem distinção entre maiúsculas e minúsculas; interno ou definido pelo usuário) a ser usado para todos os arquivos fornecidos, em vez de selecionar automaticamente o idioma com base em sua extensão. Além disso, o valor especial auto indica que o idioma deve ser selecionado automaticamente (o que desativa efetivamente essa opção).
–languages = lista [+ | -]Especifica os idiomas para os quais a geração de tags está ativada, com a lista contendo uma lista de nomes de idiomas separados por vírgulas (sem distinção entre maiúsculas e minúsculas; interno ou definido pelo usuário). Se o primeiro idioma da lista não for precedido por um ‘ + ‘ ou ‘  ‘, a lista atual será limpa antes de adicionar ou remover os idiomas da lista. Até que um ‘  ‘ seja encontrado, cada idioma da lista será adicionado à lista atual. Como ‘ + ‘ ou ‘  ‘ é encontrado na lista, os idiomas a seguir são adicionados ou removidos da lista atual, respectivamente. Assim, torna-se simples substituir a lista atual por uma nova ou adicionar ou remover idiomas da lista atual. A lista real de arquivos para os quais as tags serão geradas depende do mapeamento de extensão de idioma em vigor (consulte a opção –langmap ). Observe que todos os idiomas, incluindo os idiomas definidos pelo usuário, estão ativados, a menos que sejam explicitamente desativados usando esta opção. Os nomes de idiomas incluídos na lista podem ser qualquer idioma interno ou um definido anteriormente com –langdef . O padrão é ” all “, que também é aceito como um argumento válido. Veja a opção –list-languages para obter uma lista completa dos nomes dos idiomas embutidos.
–licenseImprime um resumo da licença do software na saída padrão e sai.
–line-directives [ = yes | não ]Especifica se as diretivas ” #line ” devem ser reconhecidas. Eles estão presentes na saída dos pré-processadores e contêm o número da linha e, possivelmente, o nome do arquivo dos arquivos de origem originais dos quais o arquivo de saída do pré-processador foi gerado. Quando ativada, essa opção fará com que ctags gere entradas de tags marcadas com os nomes dos arquivos e os números de linha dos arquivos originais de origem dos locais, em vez dos locais reais na saída do pré-processador. Os nomes de arquivo reais colocados no arquivo de tag terão os mesmos componentes de caminho principal que o arquivo de saída do pré-processador, pois supõe-se que os arquivos de origem originais estejam localizados em relação ao arquivo de saída do pré-processador (a menos, é claro, que a diretiva #line especifique um caminho absoluto ). Esta opção está desativada por padrão. Nota: Essa opção geralmente é útil apenas quando usada junto com a opção –excmd = number ( -n ). Além disso, pode ser necessário usar a opção –langmap ou –language-force se a extensão do arquivo de saída do pré-processador não for conhecida por ctags .
–links [= sim | não ]Indica se os links simbólicos (se suportados) devem ser seguidos. Quando desativado, os links simbólicos são ignorados. Essa opção está ativada por padrão.
–list-types [= idioma | tudo ]Lista os tipos de marca reconhecidos para o idioma especificado ou para todos os idiomas e sai. Cada tipo de marca registrada no arquivo de marca é representado por um sinalizador de uma letra, que também é usado para filtrar as marcas colocadas na saída através do uso da opção – <LANG> -kinds . Observe que alguns idiomas e / ou tipos de tags podem ser implementados usando expressões regulares e podem não estar disponíveis se o suporte a regex não for compilado em ctags (consulte a opção –regex- <LANG> ). Cada tipo listado é ativado, a menos que seja seguido por ” [off] “.
–list-maps [ = idioma | tudo ]Lista as extensões de arquivo e os padrões de nome de arquivo que associam um nome de arquivo a um idioma para o idioma especificado ou para todos os idiomas e, em seguida, sai. Veja a opção –langmap e Arquivos de origem , acima.
–list-languagesLista os nomes dos idiomas compreendidos por ctags e sai. Esses nomes de idioma não diferenciam maiúsculas de minúsculas e podem ser usados ​​nas opções –language-force , –languages , – <LANG> -kinds e –regex- <LANG> .
–options=fileLeia opções adicionais do arquivo. O arquivo deve conter uma opção por linha. Como um caso especial, se –options = NONE for especificado como a primeira opção na linha de comando, ele desativará a leitura automática de qualquer opção de configuração de um arquivo ou do ambiente (consulte Arquivos ).
–recurse[=yes|no]Recursar nos diretórios encontrados na lista de arquivos fornecidos. Se a lista de arquivos fornecidos estiver vazia e nenhuma lista de arquivos for especificada com a opção -L , o diretório atual (ou seja, ” . “) Será assumido. Links simbólicos são seguidos. Se você não gostar desses comportamentos, especifique explicitamente os arquivos ou envie a saída de find para ctags -L- . Nota: Esta opção não é suportada em todas as plataformas no momento. Está disponível se a saída da opção –help incluir esta opção. Veja também o –exclude para limitar a recursão .
–regex- LANG = / regexp / Replacement / [ kind-spec / ] [ flags ]O par / regexp / replace / define um padrão de substituição de expressão regular , semelhante em estilo aos comandos de substituição sed , com o qual gerar tags a partir de arquivos de origem mapeados para o idioma nomeado, <LANG> , (sem distinção entre maiúsculas e minúsculas; um elemento interno ou idioma definido pelo usuário). A expressão regular, regexp , define uma expressão regular estendida (mais ou menos a usada pelo egrep ), usada para localizar uma única linha de origem contendo uma tag e pode especificar caracteres de tabulação usando \ t . Quando uma linha correspondente é encontrada, uma tag será gerada para o nome definido pela substituição, que geralmente conterá as referências posteriores especiais \ 1 a \ 9 para se referir aos grupos de subexpressão correspondentes no regexp. Os caracteres separadores ‘ / ‘ mostrados no parâmetro da opção podem realmente ser substituídos por qualquer caractere. Observe que o caractere separador usado deve ser escapado com um caractere de barra invertida (‘ \ ‘) sempre que for usado no parâmetro como algo diferente de um separador. A expressão regular definida por esta opção é adicionada à lista atual de expressões regulares para o idioma especificado, a menos que o parâmetro seja omitido. Nesse caso, a lista atual é limpa.

A menos que modificado por sinalizadores, regexp é interpretado como uma expressão regular estendida do Posix . A substituição deve se expandir para todas as linhas correspondentes para uma seqüência de caracteres não vazia, ou uma mensagem de aviso será relatada. Um especificador de tipo opcional para tags que correspondem ao regexp pode seguir a substituição, o que determinará que tipo de tag é relatado no campo de extensão “kind” (consulte Formato do arquivo de tags , abaixo). A forma completa de especificação de tipo está na forma de uma única letra, uma vírgula, um nome (sem espaços), uma vírgula, uma descrição, seguida de um separador, que especifica as formas abreviadas e longas do valor de tipo e sua descrição textual (exibida usando –list-types ). O nome do tipo e / ou a descrição podem ser omitidos. Se kind-spec for omitido, o padrão será ” r, regex “. Por fim, os sinalizadores são um ou mais caracteres de uma letra com o seguinte efeito na interpretação do regexp :

b : O padrão é interpretado como uma expressão regular básica do Posix.

e : O padrão é interpretado como uma expressão regular estendida do Posix (padrão).

i : A expressão regular deve ser aplicada de maneira que não diferencia maiúsculas de minúsculas.

Observe que esta opção está disponível apenas se o ctags foi compilado com suporte para expressões regulares, que depende da sua plataforma. Você pode determinar se o suporte para expressões regulares é compilado examinando a saída da opção –version , que incluirá ” + regex ” na lista de recursos compilados.

Para obter mais informações sobre as expressões regulares usadas pelo ctags , consulte a página de manual do regex ou a documentação do GNU info para o regex (por exemplo, ” info regex “).

–sort[=yes|no|foldcase]Indica se o arquivo de tag deve ser classificado no nome da tag (o padrão é yes ). Observe que o vi original exigia tags classificadas. O valor da dobra especifica a classificação que não diferencia maiúsculas de minúsculas (ou dobras). Pesquisas binárias rápidas de arquivos de tags classificados com dobras de maiúsculas e minúsculas requerem suporte especial de ferramentas que usam arquivos de tags, como as encontradas na biblioteca ctags readtags , ou Vim versão 6.2 ou superior (usando ” set ignorecase “). Esta opção deve aparecer antes do primeiro nome do arquivo. Ignorado no modo etags .
–tag-relative[=yes|no]Indica que os caminhos de arquivo registrados no arquivo de tags devem ser relativos ao diretório que contém o arquivo de tags, e não ao diretório atual, a menos que os arquivos fornecidos na linha de comandos sejam especificados com caminhos absolutos. Esta opção deve aparecer antes do primeiro nome do arquivo. O padrão é yes ao executar no modo etags (consulte a opção -e ), não caso contrário.
–totals[=yes|no]Imprime estatísticas sobre os arquivos de origem lidos e o arquivo de tags gravados durante a chamada atual de ctags . Esta opção está desativada por padrão. Esta opção deve aparecer antes do primeiro nome do arquivo.
–verbose[=yes|no]Ative o modo detalhado . Isso imprime informações sobre o processamento de opções e uma breve mensagem descrevendo quais ações estão sendo executadas para cada arquivo considerado pelas ctags . Normalmente, o ctags não lê argumentos da linha de comando até que as opções sejam lidas nos arquivos de configuração (consulte Arquivos , abaixo) e na variável de ambiente CTAGS . No entanto, se essa opção for o primeiro argumento na linha de comando, ela entrará em vigor antes que qualquer opção seja lida nessas fontes. O padrão é não .
–versãoPrints a version identifier for ctags to standard output, and then exits. This is guaranteed to always contain the string ” Exuberant Ctags “.

Detalhes operacionais

Como ctags considera o nome de cada arquivo, tenta determinar o idioma do arquivo aplicando os três testes a seguir em ordem: se a extensão do arquivo foi mapeada para um idioma, se o nome do arquivo corresponder a um padrão de shell mapeado para um idioma e, finalmente, se o arquivo for executável e sua primeira linha especificar um intérprete usando a especificação “#!” no estilo Unix (se houver suporte na plataforma). Se um idioma foi identificado, o arquivo é aberto e o analisador de idioma apropriado é chamado para operar no arquivo aberto no momento. O analisador analisa o arquivo e adiciona uma entrada ao arquivo de tags para cada objeto de idioma para o qual ele foi gravado. Consulte Tag File Format, abaixo, para obter detalhes sobre essas entradas.

As implementações mais recentes de ctags não impõem requisitos de formatação no código C, assim como as implementações herdadas. As implementações mais antigas de ctags tendiam a depender de certas suposições de formatação para ajudá-lo a resolver dilemas de codificação causados ​​por condicionais do pré-processador.

Em geral, o ctags tenta ser inteligente quanto às diretivas condicionais do pré-processador. Se um condicional do pré-processador for encontrado em uma instrução que define uma tag, ctags segue apenas o primeiro ramo dessa condicional (exceto no caso especial de “#if 0”, caso em que segue apenas o último ramo). A razão para isso é que não buscar apenas uma ramificação pode resultar em sintaxe ambígua, como no exemplo a seguir:

#ifdef TWO_ALTERNATIVES struct {#else union {#endif short a; b longo; }

Os dois ramos não podem ser seguidos, ou as chaves se tornam desequilibradas e as ctags seriam incapazes de entender a sintaxe. Se a aplicação dessa heurística falhar na análise adequada de um arquivo, geralmente devido ao emparelhamento complicado e inconsistente nos condicionais, ctags tentará novamente o arquivo usando uma heurística diferente que não segue seletivamente ramificações condicionais de pré-processador, mas volta a confiar em um chave de fechamento (“}”) na coluna 1 como indicando o fim de um bloco, uma vez que qualquer desequilíbrio de chave resulta de seguir um #if ramo condicional.

O ctags também tentará lidar especialmente com listas de argumentos entre conjuntos de parênteses duplos para aceitar a seguinte construção condicional:

extern void foo __ARGS ((int um, caractere dois));

Qualquer nome imediatamente anterior a “((” será automaticamente ignorado e o nome anterior será usado. As definições de operador do C ++ são tratadas especialmente. Para consistência com todos os tipos de operadores (sobrecarregados e de conversão)), o nome do operador no arquivo de tags sempre será ser precedido pela string “operator” (ou seja, mesmo que a definição real do operador tenha sido gravada como “operator <<“).

Após criar ou anexar ao arquivo de tags, ele é classificado pelo nome da tag, removendo linhas de tags idênticas.

Formato de arquivo de tag

Quando não está sendo executado no modo etags, cada entrada no arquivo de tags consiste em uma linha separada, cada uma parecida com esta no caso mais geral:

tag_name <TAB> nome_do_arquivo <TAB> ex_cmd; “<TAB> campos_de extensão

Os campos e separadores dessas linhas são especificados da seguinte maneira:

nome da tag;
caractere de tabulação única;
nome do arquivo no qual o objeto associado à tag está localizado;
caractere de tabulação única;
Comando EX usado para localizar a tag dentro do arquivo; geralmente um padrão de pesquisa (/ pattern / ou? pattern?) ou número de linha (consulte –excmd). O formato de arquivo de tag 2 (consulte –format) estende esse comando EX sob certas circunstâncias para incluir um conjunto de campos de extensão (descritos abaixo) incorporados em um comentário EX imediatamente anexado ao comando EX, o que o torna compatível com versões anteriores das implementações originais do vi .

Algumas tags especiais são gravadas no arquivo de tags para fins internos. Essas tags são compostas de forma que sempre sejam classificadas na parte superior do arquivo. Portanto, os dois primeiros caracteres dessas tags são usados ​​como um número mágico para detectar um arquivo de tags com o objetivo de determinar se um arquivo de tag válido está sendo substituído e não um arquivo de origem.

Observe que o nome de cada arquivo de origem será gravado no arquivo de tags exatamente como aparece na linha de comando. Portanto, se o caminho que você especificou na linha de comando for relativo ao diretório atual, ele será gravado da mesma maneira no arquivo de tags. Consulte, no entanto, a opção –tag-related para saber como esse comportamento pode ser modificado.

Os campos de extensão são pares de valores-chave separados por tabulação anexados ao final do comando EX como um comentário, conforme descrito acima. Esses pares de valores-chave aparecem na forma geral “chave: valor”. Sua presença nas linhas do arquivo de tags é controlada pela opção –fields. As chaves possíveis e o significado de seus valores são os seguintes:

acesso Indica a visibilidade deste membro da classe, em que o valor é específico para o idioma.
Arquivo Indica que a tag tem visibilidade limitada ao arquivo. Esta chave não tem valor correspondente.
tipo Indica o tipo ou tipo de tag. Seu valor é um dos sinalizadores de uma letra correspondentes descritos nas várias opções <LANG> -kinds acima, ou um nome completo. É permitido (e é, de fato, o padrão) que a parte principal desse campo seja omitida. Os comportamentos opcionais são controlados com a opção –fields.
implementação Quando presente, isso indica uma implementação limitada (abstrata versus concreta) de uma rotina ou classe, em que o valor é específico da linguagem (“virtual” ou “virtual pura” para C ++; “abstrata” para Java).
herda Quando presente, value é uma lista separada por vírgula de classes da qual essa classe é derivada (isto é, herda de).
assinatura Quando presente, valor é uma representação dependente do idioma da assinatura de uma rotina. Uma assinatura de rotina em sua forma completa especifica o tipo de retorno de uma rotina e sua lista formal de argumentos. Atualmente, este campo de extensão é suportado apenas para idiomas baseados em C e não inclui o tipo de retorno.

Além disso, informações sobre o escopo da definição de marca podem estar disponíveis, com a parte da chave igual a algum nome de construção dependente do idioma e seu valor o nome declarado para essa construção no programa. Esta entrada de escopo indica o escopo em que a tag foi encontrada. Por exemplo, uma tag gerada para um membro da estrutura C teria um escopo parecido com “struct: myStruct”.

Como usar com o Vi

O Vi, por padrão, espera um arquivo de tags com o nome “tags” no diretório atual. Depois que o arquivo de tags é criado, os seguintes comandos exercitam o recurso de indexação de tags:

tag vi -t

Inicie vi e posicione o cursor no arquivo e na linha em que “tag” está definido.

: ta tag

Encontre uma etiqueta.

Ctrl-]

Encontre a tag abaixo do cursor.

Ctrl-T

Retorne ao local anterior antes de pular para a tag (não amplamente implementada).

Como usar com o Gnu Emacs

O Emacs, por padrão, espera um arquivo de tag com o nome “TAGS” no diretório atual. Depois que o arquivo de tags é criado, os seguintes comandos exercitam o recurso de indexação de tags:

Mx visit-tags-table <RET> ARQUIVO <RET>

Selecione o arquivo de tag “FILE” para usar.

M-. [TAG] <RET>

Encontre a primeira definição de TAG. A tag padrão é o identificador abaixo do cursor.

M- *

Volte para onde você invocou anteriormente “M-“.

Porra-.

Encontre a próxima definição para a última tag.

Como usar com o Nedit

O NEdit versão 5.1 e posterior pode lidar com o novo formato de arquivo de tag estendido (consulte –format). Para fazer o NEdit usar o arquivo de tags, selecione “Arquivo-> Carregar arquivo de tags”. Para pular para a definição de uma tag, realce a palavra e pressione Ctrl-D. O NEdit 5.1 pode ler vários arquivos de tags de diferentes diretórios. Definir o recurso X nedit.tagFile como o nome de um arquivo de tag instrui o NEdit a carregar automaticamente esse arquivo de tag no momento da inicialização.

Ressalvas

Because ctags is neither a preprocessor nor a compiler, use of preprocessor macros can fool ctags into either missing tags or improperly generating inappropriate tags. Although ctags has been designed to handle certain common cases, this is the single biggest cause of reported problems. In particular, the use of preprocessor constructs which alter the textual syntax of C can fool ctags . You can work around many such problems by using the -I option.

Note that since ctags generates patterns for locating tags (see the –excmd option), it is entirely possible that the wrong line may be found by your editor if there exists another source line that is identical to the line containing the tag. The following example demonstrates this condition:

 int variable;
/* ... */
void foo(variable)
int variable;
 {
    /* ... */
 }

Depending upon what editor you use and where in the code you happen to be, it is possible that the search pattern may locate the local parameter declaration in foo() before it finds the actual global variable definition, since the lines (and therefore their search patterns are identical). This can be avoided by use of the –excmd=n option.

Bugs conhecidos

When parsing a C++ member function definition (eg, ” className::function “), ctags cannot determine whether the scope specifier is a class name or a namespace specifier and always lists it as a class name in the scope portion of the extension fields. Also, if a C++ function is defined outside of the class declaration (the usual case), the access specification (ie public , protected , or private ) and implementation information (eg, virtual , pure virtual ) contained in the function declaration are not known when the tag is generated for the function definition. It will, however be available for prototypes (eg –c++-kinds=+p ).

No qualified tags are generated for language objects inherited into a class.

variáveis ​​ambientais

CTAGSIf this environment variable exists, it will be expected to contain a set of default options that are read when ctags starts, after the configuration files listed in FILES , below, are read, but before any command line options are read. Options appearing on the command line will override options specified in this variable. Only options will be read from this variable. Note that all white space in this variable is considered a separator, making it impossible to pass an option parameter containing an embedded space. If this is a problem, use a configuration file instead.
ETAGSSimilar to the CTAGS variable above, this variable, if found, will be read when etags starts. If this variable is not found, etags will try to use CTAGS instead.
TMPDIREm hosts do tipo Unix, onde mkstemp () está disponível, o valor dessa variável especifica o diretório no qual os arquivos temporários serão colocados . Isso pode ser útil se o tamanho de um arquivo temporário se tornar muito grande para caber na partição que contém o diretório temporário padrão definido no momento da compilação. O ctags cria arquivos temporários apenas se um arquivo de tags do estilo emacs estiver sendo gerado, ou o arquivo de tags estiver sendo enviado para a saída padrão ou o programa foi compilado para usar um algoritmo de classificação interno para classificar os arquivos de tags em vez do utilitário de classificação do sistema operacional. Se o utilitário de classificação do sistema operacional estiver sendo usado, ele também geralmente observará essa variável. Observe que se ctagsé setuid , o valor de TMPDIR será ignorado.

arquivos

  • /ctags.cnf (apenas no MS-DOS e Microsoft Windows )
  • /etc/ctags.conf
  • /usr/local/etc/ctags.conf
  • $ HOME / .ctags
  • $ HOME / ctags.cnf (apenas no MS-DOS, Microsoft Windows)
  • .ctags
  • ctags.cnf (apenas no MS-DOS, Microsoft Windows)

Se algum desses arquivos de configuração existir, espera-se que cada um deles contenha um conjunto de opções padrão lidas na ordem listada quando as ctags forem iniciadas, mas antes que a variável de ambiente CTAGS seja lida ou que qualquer opção de linha de comando seja lida. Isso possibilita a configuração de padrões em todo o site, pessoal ou em nível de projeto. É possível compilar ctags para ler um arquivo de configuração adicional antes de qualquer um dos mostrados acima, o que será indicado se a saída produzida pela opção –version listar o recurso ” custom-conf “. Opções que aparecem no CTAGSvariável de ambiente ou na linha de comando substituirá as opções especificadas nesses arquivos. Somente opções serão lidas nesses arquivos. Observe que os arquivos de opções são lidos no modo orientado a linhas, no qual os espaços são significativos (uma vez que a citação do shell não é possível). Cada linha do arquivo é lida como um parâmetro de linha de comando (como se estivesse entre aspas simples). Portanto, use novas linhas para indicar argumentos de linha de comando separados.

  • tags (o arquivo de tags padrão criado por ctags .)
  • TAGS (o arquivo de tag padrão criado por etags .)

Exemplos

 ctags -R *

Crie um arquivo de tags para cada arquivo de origem no diretório atual e em todos os subdiretórios.

ex – modo editor de linha do editor detexto vi .
lex – Gere programas para executar tarefas lexicais.
vgrind – “Grind”listagens de programas legais .
vi – Editor de texto baseado no modo visual de ex .
yacc – “Mais um compilador-compilador.”

14 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.