Navegando em projetos de código sem usar comandos externos

9

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.

user1332148
fonte
4
Talvez você deva dizer "ferramentas externas" em vez de "ctags", porque minha primeira sugestão seria cscope.
Muru
11
Uma coisa que eu uso é comando gd. Isso leva o cursor para a declaração local da variável sob o cursor.
nitishch
@ muru Eu não quero usar nenhuma ferramenta externa. O que estou tentando aprender são técnicas para navegar com eficiência em uma base de código usando apenas os comandos do Vim. Eu sei que isso pode ser feito, mas obviamente requer um conhecimento mais profundo do Vim do que eu. Possivelmente não é uma boa pergunta de SE, pois é muito aberta, mas não sei mais para onde procurar.
precisa saber é o seguinte

Respostas:

11

"Incluir pesquisa" é uma dessas ferramentas:

[I and ]I      " search current buffer and included files for
               " the word under the cursor, skipping comments
:ilist foo     " same as above but for 'foo'
:ilist /foo    " same as above but for a word containing 'foo'

Relacionado a "incluir pesquisa", "pesquisa por definição" também é interessante:

[D and ]D      " search current buffer and included files for
               " the definition of the symbol under the cursor
:dlist foo     " same as above but for definition of 'foo'
:dlist /foo    " same as above but for a definition containing 'foo'

:dlist /       " list all definitions from the current buffer
               " and included files

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 gde gDcomo versões leves de [De ]D.

Veja :help gd.


No buffer atual, o comando abaixo listará todas as definições de funções e seu número de linha:

:g/func/#

Veja :help :g.


:grepe :vimgreptambé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 :vimgrepe :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, ]De :dlistna 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.

romainl
fonte
5

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 é:

  • Texto de greping nos arquivos do projeto e navegação na janela do quickfix (eu uso o silver searcher para greping).
  • Usando plugins relacionados à linguagem, eu sei que existem javascript, ruby, go, que permitem saltar entre os módulos do programa (no plugin javascript é gf-command
  • Ctrl+O, Ctrl+I- retroceder ou avançar no "histórico" da navegação
  • g; - pula para o último local editado no arquivo
  • Usando marcas para colocar "marcadores" em locais específicos. Você pode colocar a marca com o '[some_letter]comando, se a letra for maiúscula, a marca será alcançável a partir de qualquer arquivo (buffer).
Alexander Myshov
fonte