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

Exemplo:. I pretende remover qualquer elemento em A, tal como o MIN_LEN, de A e B através da remoção quer o seu elemento em A ou 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

?
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top