Salva / restaura a posição do cursor ao fechar / abrir

1

Quando abro uma dobra, seja uma criada manualmente ou uma criada automaticamente com base na sintaxe, meu cursor permanece na linha superior da dobra. Em vez disso, gostaria que saltasse para a posição em que estava dentro da dobra antes que a dobra fosse fechada.

Suponho que eu poderia remapear zc e za para criar uma marca na posição atual do cursor como uma espécie de PreFoldClose hook, e então eu poderia remapear zo e za para mover o cursor para disse mark como uma espécie de PostFoldOpen hook.

Mas eu espero que possa haver uma opção que simplesmente ligue esse recurso para mim. O que vocês pensam?

Bônus: como você persiste marcas de arquivos em cargas / descargas de buffer? As marcas são incluídas pelo comando mkview ?

    
por courtyardz 15.10.2018 / 01:41

1 resposta

1

Se você fechar uma dobra de dentro dela com zc e, em seguida (sem se mover), abri-la novamente com zo , a posição do cursor permanecerá na dobra. Isso porque o número da linha atual permanece como estava antes de fechar a dobra, mesmo que essa linha esteja oculta na dobra.

No entanto, quando você se move, o Vim precisa atualizar a posição do cursor para algo visível. Para movimentos verticais, isso significa tornar a primeira linha dobrada na linha atual; todas as outras linhas estão escondidas dentro da dobra, e você teria que abrir a dobra para ir até lá.

Se você quiser mudar isso, sua abordagem sugerida com o uso de uma marca parece razoável. No entanto, isso cobriria apenas a revisão da dobra última (ou um máximo de 26 dobras, limitado pelo número de marcas locais de buffer disponíveis). A coisa boa sobre as marcas é que elas se adaptam automaticamente às mudanças nos números das linhas; isto é, as edições acima da dobra não invalidariam a informação de posição. Se você quisesse armazenar qualquer número de dobras (excedendo o número de marcas), você teria o problema de que uma dobra só pode ser identificada pelo intervalo atual de linhas, e elas estão sujeitas a alterações durante as edições.

TL; DR: Vá em frente e experimente sua ideia, mas esteja ciente de que ela está limitada à última dobra e não pode ser generalizada para cobrir todas as dobras.

Resposta de bônus: As marcas de arquivo (maiúsculas) são armazenadas no arquivo viminfo , controlado por :help viminfo-f e :help viminfo-' . :mkview não considera marcas.

    
por 15.10.2018 / 12:55

Tags