VIM: bijeção entre elementos VIM taglist e trechos de código?
Pergunta
Minha taglist em um código C:
macro
|| MIN_LEN
|| MAX_ITERATIONS
|| - typedef
||
celular || source_cell
|| - variável
|| len_given
elementos taglist (domínio):
A = {MIN_LEN, MAX_ITERATIONS, cell, source_cell, len_given}
trechos de código (codomain):
B = {"code_MIN_LEN", "code_MAX_ITERATIONS", ..., "code_len_given"}
Objectivo:. ter bijection entre os conjuntos A e B
Pergunta: Existe uma maneira de quarantee uma bijeção entre A e B, de modo que uma mudança seja em A ou em B resulta em uma mudança na outra set
?Solução
duvido muito que você pode fazer isso. O plug-in taglist usos CTags para recolher os símbolos no seu código e exibi-los em uma divisão lateral. A divisão lateral, contém informações somente leitura (se você tentar trabalhar com essa janela, vim lhe diz que modificável é off para esse buffer).
O que você quer alcançar implicaria análise bastante complexa do código-fonte que você está modificando. Mesmo uma tarefa simples como renomeação automática (supondo que você modificar uma entrada de nome da função no buffer taglist e todas as instâncias em sua fonte são atualizados) requer análise bastante complexo, que está além dos recursos CTags ou a própria taglist. Excluindo e manter tudo em sincronia com uma relação bijective é ainda mais complexa. Suponha que você tenha uma linha printf onde você usa uma macro que você deseja remover. O que deve acontecer com essa linha? deve toda a linha desaparecer, ou apenas o macro (nesse caso, a linha provavelmente será sintaticamente incorreto.
taglist é um bom plug-in para navegar o seu código, mas é inadequado para refatoração automática (que é o que você quer alcançar).
Edit: como para a complexidade computacional, bem, o pior cenário é que você tem que explorar todo o documento a cada toque de tecla, à procura de nova ocorrência de rótulos que possam ser integrados, portanto, neste sentido, você poderia dizer que é O (n) para cada batida de tecla. Isto é um exagero curso e o pior método para implementá-lo. Eu não estou ciente da complexidade computacional do destaque de sintaxe no vim, (o que seria útil para extrair as tags, bem como, através tokenization adequada), mas eu teria estimá-lo muito baixo, e muito limitado na quantidade de dados analisados ??(você são susceptíveis de ter grandes construções para analisar para extrair o token e compreender seu contexto). Em qualquer caso, não é assim que funciona taglist. Taglist corre ctags em cada invocação vim, não analisar o documento ao vivo, enquanto você digita. no entanto, isso é feito por Eclipse, Xcode e KDevelop por exemplo, que também fornecem ferramentas para refatoração automática ou semi-automática, e pode eventualmente integrar Vim como um editor. Se você precisar desses recursos, você está definitivamente usando a ferramenta errada.