Como posso replicar a dobragem de código do Vim?

28

Dobragem de código no Emacs

Às vezes, quero dobrar um bloco de texto. No Vim, você tem dobragem fácil, sem penugem. Sem adicionar caracteres especiais como "marcadores" ou regex específico, como {{{. Gostaria de selecionar uma região e dobrá-la, sem mexer com a estrutura.

Ao olhar em volta, parece que já havia perguntas sobre a dobragem de código no Emacs. Alguém disse que "não havia solução perfeita". Por exemplo, criei um clipe de dobragem de código simples no Vim:

Vim dobrável

insira a descrição da imagem aqui

+ Bastante simples, selecione uma região e dobre-a.
+ É persistente. Quando você mata o buffer / fecha o Vim. E reabra o arquivo, as dobras ainda estão lá.
+ Você obtém uma barra de destaque para ver facilmente o que está dobrado.

Existem muitas outras configurações dobráveis ​​para o Vim. Estou feliz com o Emacs, mas é uma coisa que sinto falta. Outras alternativas que eu tentei, por exemplo, HideShow:

HideShow

insira a descrição da imagem aqui

Alternativa do mal com hide-show minor mode. Achei inutilizável:

- Não consigo selecionar uma região e dobrá-la. Dobra em blocos de código.

- Não há bar ou algo do tipo, para atendê-lo, está dobrado. Você pode facilmente perder isso.

- Não é persistente. Se você reabrir o arquivo, as dobras desapareceram.

Há outro pacote, dobre este :

Dobre isso

insira a descrição da imagem aqui

- É uma alternativa bonita. No entanto, ele mexe com o recuo, porque o texto sob a dobra é colocado próximo à dobra ... (?).

- É capaz de selecionar visualmente a região e dobrá-la. Mas isso acaba com a situação, então a visão geral fica confusa. Não é muito útil.

- Não existe uma barra higlihgting ou algo assim, para atendê-lo é dobrado. Você pode facilmente perder isso.

Qual é o problema?

Gostaria de replicar como o Vim faz fold. Mas quando eu procurei, parece que é muito difícil fazer isso no Emacs. Então, eu me pergunto se há algo no emacs ou em sua arquitetura que dificulta a replicação disso? Quais são os limites?

ReneFroger
fonte
2
Eu senti que a pergunta era muito ampla, então votei para fechar com base nisso. Eu recomendaria que o pôster original escolha algumas bibliotecas que fornecem alguns dos recursos procurados e os combine / modifique conforme desejado. Se o OP tiver problemas ao implementar / modificar um recurso específico , publique uma pergunta específica limitada a esse problema. O OP provavelmente pode alcançar os efeitos visuais desejados, mas deve estar preparado para torná-lo um projeto em andamento a ser trabalhado ao longo do tempo.
lawlist
3
Você poderia explicar quais recursos de dobra você deseja? Como regra, você não pode esperar que as pessoas neste site saibam como o dobramento de código do Vim funciona e, de qualquer forma, você deve nos dizer quais recursos deseja especificamente. A única informação que você fornece sobre o que você quer é uma animação que mostre apenas um exemplo e, de qualquer forma, não tenho idéia do que ilustra: eles não mostram quais comandos você usou, por que você moveu o cursor para este ou aquele local, etc. Além disso, em um navegador típico, eles tocam em loop e é impossível saber quando uma repetição começa.
Gilles 'SO- stop be evil' (
3
a retenção deve ser removida desta pergunta. atualmente, é razoavelmente específico. não ter uma resposta para a pergunta não é uma boa razão para fechá-la.
Ista
2
ar-hide-region-atpt, ar-show-region-atpt de 'thing-at-point-utils.el', github.com/andreas-roehler/thing-at-point-utils - desbloqueie para que pode ser uma resposta regular.
Andreas Röhler
1
A questão, como eu a entendo, é basicamente: " Alguém: por favor, escreva uma biblioteca inteira para o Emacs que forneça os recursos exatos de dobragem de código encontrados no Vim. " Vejo em alguns comentários e votos positivos que existem suficientes pessoas que gostariam de ver isso se tornar realidade. No entanto, não vejo como isso poderia se encaixar razoavelmente na resposta - a nova biblioteca proposta precisará ser mantida, com problemas e correções. Eu também não me importaria de alguém escrever uma biblioteca inteira com novos recursos interessantes para dobrar códigos.
lawlist

Respostas:

16

Experimente vimish-fold.

Recursos

  • pilhas incluídas: ativar o modo secundário, vincular alguns comandos e tudo funcionará;

  • funciona nas regiões que você seleciona;

  • é persistente: quando você fecha o arquivo, suas dobras não desaparecem;

  • além de persistente, é dimensionável, você pode trabalhar em centenas de arquivos com muitas dobras sem efeitos adversos;

  • é óbvio que partes do texto são dobradas;

  • não quebra o recuo ou algo assim;

  • pode redobrar apenas dobras desdobradas (oh, que coisa);

  • para os fãs do avypacote: você pode avydobrar o texto com um número mínimo de pressionamentos de tecla!

Uso

Crie uma ligação para algumas / todas estas funções:

  • vimish-fold - dobragem básica da região selecionada;

  • vimish-fold-unfold- você realmente não precisa vincular isso, use apenas C-gquando point for colocado no cabeçalho que representa o texto dobrado;

  • vimish-fold-unfold-all - no entanto, isso pode ser útil;

  • vimish-fold-refold - sim, você pode dobrá-lo para trás;

  • vimish-fold-avy- use avypara dobrar seu texto!

Você pode ativar vimish-fold-modeseletivamente os modos em que deseja ter dobras persistentes ou simplesmente ativá-lo em qualquer lugar:

(vimish-fold-global-mode 1)
Mark Karpov
fonte
você tem alguma sugestão de combinação de teclas? Quais ligações você usa quando está no modo C ++? Modo C? Modo Python? Modo Lisp? Modo ELisp? Modo JavaScript?
precisa
1
@ Reb.Cabin, este não é um pacote específico de modo, portanto, as associações de teclas globais são a melhor opção. Estou usando teclas de atalho que não envolvem acordes de teclas e a maioria das pessoas as consideraria um pouco estranhas, atualmente eu tenho: menu v fvimish-fold, menu v avimish-fold-avy, menu v uvimish-fold-unfold-all, menu v vvimish-fold-refold. A maioria dos meus atalhos de teclado são assim, esta é a minha configuração .
22415 Mark Karpov #
Isso se integra a movimentos malignos e objetos de texto?
precisa saber é o seguinte
1
Hum ... eu vou começar a trabalhar em um PR.
precisa saber é o seguinte
1
Eu, por exemplo, considero as dobras de vômito completamente inutilizáveis. Talvez seja intuitivo para aqueles que já estão familiarizados com a dobragem de código no vim ... eu não sei. Além disso, eu não entendo por que dobrar em org-mode funciona tão bem, mas Emacs ainda não tem um bom código-folding ...
KJo