Depois de gerar um arquivo de tags com exuberant-ctags
eu posso pular de uma chamada de função para sua declaração com a <C-]>
qual é bastante conveniente.
Minha pergunta é como fazê-lo de outra maneira? Quando meu cursor está na definição de uma função, como posso ir para as linhas em que a função é chamada?
Quando olho para o arquivo gerado por ctags, vejo apenas informações relacionadas à localização da definição e não das chamadas, isso significa que não posso fazer isso, que o Vim é uma solução inteligente ou que preciso usar algo mais do que exuberant-ctags
?
Respostas:
Você não pode pular para chamadas de função com
ctags
. Para C / C ++ e Java existecscope
, e ele se integra perfeitamente ao Vim (consulte:help cscope
). Para outros idiomas, você poderá encontrar uma ferramenta que gere / exportecscope
bancos de dados compatíveis (fihscope
para Haskell estarscope
Ruby, Go e JavaScript). Você também pode usarcscope
com bancos de dados globais GNU , apontandocscopeprg
paragtags-cscope
.Em uma nota lateral: se você não se incomoda com o uso ocasional do Engrish ,;) provavelmente também deseja usar tags universais em vez de
exuberant-ctags
. O último não é atualizado há anos. O primeiro é um garfo mantido ativamente.fonte
cscope
próprio @ edi9999 suporta C / C ++, Lex e Yacc. O suporte para Java é marginalmente útil. Você pode obter suporte para PHP e JavaScript (à moda antiga) do GNUglobal
, através dogtags-cscope
utilitário. E, como eu disse acima, existem outros indexadores que podem exportarcscope
bancos de dados compatíveis.Você não pode fazer isso com ctags.
Tente uma alternativa mais robusta, como cscope (que até possui sua própria seção de ajuda :)
:help cscope
ou global .fonte
cscope
ele não suporta PHP nem JavaScript. No entanto, você pode indexar arquivos PHP e JavaScript com o GNUglobal
e executargtags-cscope
para usar ogtags
arquivo resultantecscope
.cscope
as fontes de dados em vez de especular com base em experiências rápidas.cscope
possui um analisador C bastante relaxado. É tudo o que tem e tudo o que faz. Com esse analisador, ele "suporta" muitos idiomas, para valores adequados de "suporte". As construções são reconhecidas desde que pareçam mais ou menos com C. É por isso que as classes Java e as construções PHP mais recentes não são reconhecidas. Compare fi com o starscope , que na verdade permite adicionar novos idiomas.Você pode usar o comando grep do Vim para pesquisar todos os arquivos em seu projeto:
Vamos colocar isso em um keybind:
Acho esta pesquisa de uma chave em todo o projeto inestimável quando estou explorando uma grande base de código desconhecida.
\<
e\>
são sequências regexp que indicam o início e o fim de uma palavra, para que você não obtenha correspondências parciais. (O-w
opção para grep pode ser outra maneira de conseguir isso.)No entanto, essa é uma pesquisa não inteligente , para que possa produzir falsos positivos se a mesma palavra aparecer em contextos não relacionados.
Na verdade, eu uso minha própria versão modificada do plug-in grep.vim . Isso é um pouco mais amigável de usar:
src/ lib/
vez de.
) e lembra as alterações.\b
deve ser usado em vez de\<
e\>
.Eu o configuro e excluo alguns arquivos padrão como este .
Para acesso rápido, crio dois atalhos de teclado . F3permite editar a linha de comando, F4usa a linha de comando configurada anteriormente sem nenhum pressionamento de tecla extra. O mecanismo é muito feio e pode usar alguma limpeza, mas me serviu bem.
fonte