Estou tentando reunir uma caixa de ferramentas de comandos / consultas do Vim, no modo de comando ou pesquisa, para navegar em uma base de código sem usar Ctags ou outras ferramentas externas. As tags são ótimas, mas o suporte pode variar dependendo do ambiente de desenvolvimento em que você está preso. Gostaria apenas de confiar no conhecimento do Vim.
9
gd
. Isso leva o cursor para a declaração local da variável sob o cursor.Respostas:
"Incluir pesquisa" é uma dessas ferramentas:
Relacionado a "incluir pesquisa", "pesquisa por definição" também é interessante:
Ambas as ferramentas dependem de uma variedade de opções que podem ou não ser definidas pelos plugins do tipo de arquivo.
Veja
:help include-search
.Você também pode usar
gd
egD
como versões leves de[D
e]D
.Veja
:help gd
.No buffer atual, o comando abaixo listará todas as definições de funções e seu número de linha:
Veja
:help :g
.:grep
e:vimgrep
também são úteis, mesmo porque seu resultado é alimentado na lista quickfix que pode ser navegado com:cn
,:cp
... e exibido na janela quickfix muito útil.Ver
:help :grep
,:help :vimgrep
e:help quickfix
.Falando de lista quickfix / janela, eu escrevi essa função (com base no trabalho dos outros) para exibir os resultados de
[I
,]I
,:ilist
,[D
,]D
e:dlist
na lista quickfix / janela. YMMV é claro.Embora não seja estritamente uma ferramenta de navegação, acho a janela de visualização muito útil para examinar a assinatura da função com a qual estou trabalhando.
Veja
:help preview-window
.Dito isto…
O Vim não sabe nada sobre o seu código além de alguns padrões regex que podem ou não se encaixar no seu estilo de codificação ou o que seja. Isso significa que a navegação de código é melhor realizada com a ajuda de ferramentas externas como ctags, cscope ou GNU GLOBAL.
fonte
Existem várias maneiras de navegar pelo código (incluído no Vim e externo), eu ainda os descubro. O que eu uso no trabalho diário é:
gf
-commandCtrl+O
,Ctrl+I
- retroceder ou avançar no "histórico" da navegaçãog;
- pula para o último local editado no arquivo'[some_letter]
comando, se a letra for maiúscula, a marca será alcançável a partir de qualquer arquivo (buffer).fonte