Como você gerencia grandes projetos (centenas de arquivos) usando apenas VIM?
Eu pessoalmente começo a ter problemas em qualquer projeto maior do que pequeno.
- existe alguma maneira de 'ir para o arquivo' rapidamente, de preferência completando o nome?
- mesmo para 'ir para definição de classe', quando está em outro arquivo
Eu meio que conheço todos os fundamentos do VIM, então não tenho problemas em usá-lo para escrever scripts ou editar rapidamente algum código-fonte. Mas fica muito confuso para mim quando tenho que navegar entre os arquivos.
NERDTree
Respostas:
O VIM tem excelente suporte para tags . Depois de criar um arquivo de tags para seu projeto, você pode pular para uma definição ou declaração de um método, classe, etc., incluindo pular entre arquivos, tudo dentro da mesma sessão de edição.
Tentar
Para gerar um arquivo de tags para C / C ++, vá para o prompt do shell (presumo que seu sistema seja * nix / Cygwin) e digite
ou
fonte
:help cscope
para obter informações. Há uma boa lista de recursos na introdução (em "Ele foi projetado para responder a perguntas como").Gosto de soluções simples, minha maneira favorita de navegar no momento é:
adicionar à
~/.vimrc.local
Em seguida, digite isso no editor para encontrar o arquivo em qualquer lugar no diretório de trabalho atual (pwd)
Você pode usar o preenchimento com tabulação nos nomes dos arquivos para encontrar várias opções também, tornando este TextMate convertido muito feliz.
fonte
vim .
antes de executar o comando: /Eu uso uma combinação de NERDTree (barra lateral do diretório), FuzzyFinder Textmate (ir para o arquivo como CMD + T do TextMate) e Sessões (: sessões h) para me ajudar a lidar com grandes projetos.
Eu sugeriria o uso de algum plugin auxiliar de sessões. Eu mencionaria o que uso, mas ainda não estou satisfeito com isso. Apenas Google "sessões vim".
Uma coisa a se notar ao fazer o FuzzyFinder Textmate funcionar é que ele depende de uma versão antiga do plugin FuzzyFinder, especificamente v2.16. Qualquer coisa acima e você obterá erros. Mas definitivamente vale a pena. Embora não tenha complementação de nome, sua pesquisa é inteligente, portanto, se eu pesquisar por
fro/time/actionsphp
ele, o arquivo será exibidoapps/(fro)ntend/modules/(time)_tracking/actions/(actions).class.(php)
(parênteses indicam o que está correspondendo). Isso torna muito fácil selecionar arquivos que são exclusivos apenas pelo nome da pasta.fonte
Bem como os ctags inestimáveis e os vários comandos associados. Eu também não poderia viver sem o plugin do projeto , que permite que você tenha os arquivos de interesse associados a um projeto em um painel separado. Não me lembro quanto da minha configuração foi personalizada, mas se quiser abrir um arquivo de origem chamado Debug.c, clico em:
Eu frequentemente faço:
Com esta sequência relativamente curta, posso abrir qualquer arquivo e seu cabeçalho em uma divisão vertical. Visto que a janela do plugin do projeto é apenas um arquivo de texto, a conclusão é obtida usando o recurso de pesquisa do Vim.
fonte
A partir do Vim 7.3, o
:find
comando possui preenchimento de tabulação de nomes de arquivo.Então, se você definir a sua
'path'
opção para conter o seu projeto inteiro (provavelmente usando o**
wildcard para permitir subdiretórios recursivamente à procura), então você pode usar o:find
,:sfind
,:tabfind
, etc. comandos com conclusão para chegar a qualquer arquivo no seu projeto. Isso também permite pular para arquivos diretamente comgf
amigos e se o nome do arquivo estiver no seu texto, por exemplo, em uma diretiva de inclusão.Com esse método, nenhuma ferramenta externa ou plug-in são necessários para navegar para arquivos específicos. No entanto, pode não ser tão rápido ou fácil de usar e não aborda a necessidade de pular para as definições. Para definições, eu uso ctags como outras respostas sugerem.
fonte
Se você estiver usando ctags como outros usuários recomendaram, certifique-se de olhar o plugin taglist .
Certifique-se de reservar um tempo para ler a documentação e aprender as atalhos de teclado. Aqui estão alguns para você começar (na janela TList):
fonte
Ctags exuberantes.
Use Ctrl-] para pular para a tag sob o cursor.
fonte
Eu uso FindFile . Se você abrir o vim na raiz do seu projeto e executar
:FC .
o plugin, ele armazenará em cache todos os nomes de arquivos abaixo do seu cwd. Você pode então fazer:FF
para abrir um menu de conclusão e digitar o nome do arquivo que deseja (ou melhor, as primeiras letras).fonte
FC .
em seu diretório raiz, então:FF
entre, comece a digitar o nome do arquivo que você deseja e pronto. Estou tentando descobrir como lançar em novas guias ainda ..:FC .
para armazenar arquivos em cache naquele diretório.:FT
ou:FindTabNew
gist.github.com/1104884Abrindo a
vim
partir da raiz de seu arquivo de origem e estendendo apath
opção para incluir todos os subdiretórios nele.Por exemplo,
set path+=/usr/include/c++/**
para cabeçalhos C ++ eset path+=**
para seu diretório de origem.Isso, então, abre uma infinidade de possibilidades a seguir.
1) Abrir arquivo por nome ou partes dele
Você pode usar o preenchimento automático e a expansão de curinga com
:find
confiabilidade. Você digita o nome, ele localizará o nome. Isso funciona independentemente do idioma. Tenho certeza de que você vai gostar.2) Navegando para arquivos sob cliente:
se você quiser ir para um caminho de arquivo como
#include "project/path/classA.h
.Ctrl- 6- para voltar à última posição do cursor após
gf
ougF
3) Pesquisa de API e navegação para o local da API
[i
ou[I
pode ser usado para pesquisar sua assinatura de função para a palavra sob o cursor sem sair do seu espaço de trabalho.[<Tab>
para realmente ir para a declaração. Use Ctrl- 6para voltar ao último local.Sem estender
path
, você pode começar a navegar pelos arquivos por:Ex
comando e navegar e abrir seu arquivo. Eu prefiroNerdTree
a isso, no entanto.fonte
Embora eu espere que alguém aponte uma solução melhor para que eu possa aprender algo, NERDTree tem sido bom para mim para obter arquivos específicos com completação de nome, desde que eu tenha a árvore expandida. O comando quando preciso acessar um arquivo é algo como:
, d / foo.pyo (onde foo.py é um nome de arquivo)
, d para abrir a árvore, / para entrar no modo de pesquisa, o nome (ou nome parcial, ou regex, ou qualquer outro) do arquivo, e então o para abrir.
Claro que você pode ter que apertar 'n' algumas vezes se você não digitou o suficiente do nome do arquivo ou se houver duplicatas.
Eu admito que parece meio que um hack usando o NERDTree como este, embora ele tenha chegado tão longe na minha memória muscular que eu nem penso nisso.
É claro que eu uso ctags também, mas eles só são úteis quando você tem uma função perto do cursor e precisa obter sua definição em outro arquivo ou algo assim. Muitas vezes eu digo "OK, eu preciso trabalhar no recurso x agora" e preciso navegar para outro arquivo sem nenhuma referência próxima que ctags realmente ajudem.
fonte
Estou usando dois plug-ins meus:
<c-w><m-down>
por padrão. Você pode querer verificar o conhecido plugin de lista de tags.Ambos requerem minha biblioteca viml lh-vim-lib.
fonte
Experimente SourceCodeObedinece . Este eu desenvolvi para lidar com o projeto de arquivos fonte C ++ 1Gb.
Eu o uso em par com 0scan .
Esses dois plug-ins envolvem as ferramentas de navegação mais populares do Vim: ctags e cscope .
fonte