Come posso replicare la piegatura del codice di Vim?


28

Codice pieghevole in Emacs

A volte voglio piegare un blocco di testo. In Vim puoi piegare facilmente senza fuzz. Senza aggiungere caratteri speciali come "marcatori" o regex specifici come {{{. Vorrei selezionare una regione e piegarla, senza interferire con la struttura.

Quando ci guardiamo intorno, sembra che ci siano già domande sulla piegatura del codice in Emacs. Qualcuno ha detto che non c'era "nessuna soluzione perfetta". Ad esempio, ho creato una clip di semplice codefolding in Vim:

Vim semplice pieghevole

inserisci qui la descrizione dell'immagine

+ Abbastanza semplice, seleziona una regione e piegala.
+ È persistente. Quando uccidi il buffer / chiudi Vim. E riaprire il file, le pieghe sono ancora lì.
+ Ottieni una barra di evidenziazione, per vedere facilmente cosa è piegato.

Esistono molte altre configurazioni pieghevoli per Vim. Sono contento di Emacs, ma questa è una cosa che mi manca. Altre alternative che ho provato, ad esempio HideShow:

NascondiMostra

inserisci qui la descrizione dell'immagine

L'alternativa del male con hide-show minor mode. L'ho trovato inutilizzabile:

- Non sono in grado di selezionare una regione e piegarla. Si piega su blocchi di codice.

- Non c'è bar o qualcosa del genere, per assisterti è chiuso. Potresti facilmente perderlo.

- Non è persistente. Se riapri il file, le pieghe scompaiono.

C'è un altro pacchetto, piega questo :

Piega questo

inserisci qui la descrizione dell'immagine

- È una bella alternativa. Tuttavia, confonde con il rientro, perché il testo sotto la piega viene posizionato accanto alla piega ... (?).

- È in grado di selezionare solo visivamente la regione e piegarla. Ma rompe l'indendenza, quindi la panoramica viene incasinata. Non molto utile.

- Non esiste un bar o qualcosa del genere, per assisterti è chiuso. Potresti facilmente perderlo.

Qual è il problema?

Vorrei replicare come Vim piega. Ma quando ho cercato in giro, sembra che sia molto difficile farlo in Emacs. Quindi mi chiedo se ci sia qualcosa in emacs o nella sua architettura che rende difficile replicarlo? Quali sono i limiti?


2
Ho ritenuto che la domanda fosse troppo ampia, quindi ho votato per chiudere su tale base. Vorrei raccomandare che il poster originale scelga un paio di librerie che forniscono alcune delle funzionalità ricercate, quindi combinarle / modificarle come desiderato. Se l'OP incontra problemi nell'implementazione / modifica di una particolare funzione , allora pubblica una domanda specifica limitata a quella questione. L'OP può probabilmente ottenere gli effetti visivi desiderati, ma dovrebbe essere pronto a renderlo un progetto in corso su cui lavorare nel tempo.
elenco delle leggi

3
Potresti spiegare quali funzioni di piegatura vuoi? Di norma, non ci si può aspettare che le persone su questo sito sappiano come funziona la piegatura del codice Vim, e comunque dovresti dirci quali funzionalità desideri in modo specifico. Le uniche informazioni che fornisci su ciò che vuoi è un'animazione che mostra solo un esempio, e comunque non ho idea di cosa illustri: non mostrano quali comandi hai usato, perché hai spostato il cursore su questo o quel punto, ecc. Inoltre, in un tipico browser, vengono riprodotti in loop ed è impossibile stabilire quando inizia una ripetizione.
Gilles 'SO- smetti di essere malvagio' il

3
la sospensione dovrebbe essere rimossa da questa domanda. così com'è attualmente è ragionevolmente specifico. non avere una risposta alla domanda non è una buona ragione per chiuderla.
Ista,

2
ar-hide-region-atpt, ar-show-region-atpt da 'thing-at-point-utils.el', github.com/andreas-roehler/thing-at-point-utils - si prega di sbloccare in modo che potrebbe essere una risposta regolare.
Andreas Röhler,

1
La domanda, a quanto ho capito, è fondamentalmente: " Qualcuno: per favore scrivi un'intera libreria per Emacs che fornirà le esatte funzionalità di piegatura del codice che si trovano in Vim. " Vedo da alcuni dei commenti e voti positivi che ci sono abbastanza persone che vorrebbero vederlo diventare realtà. Tuttavia, non vedo come ciò possa ragionevolmente adattarsi alla risposta: la nuova libreria proposta dovrà essere mantenuta, con problemi e correzioni di errori. Anche a me non dispiacerebbe qualcuno che scriva un'intera libreria con nuove fantastiche funzionalità per la piegatura del codice.
elenco delle leggi

Risposte:


16

Prova vimish-fold.

Caratteristiche

  • batterie incluse: attiva la modalità minore, associa un paio di comandi e tutto funzionerà;

  • funziona sulle regioni selezionate;

  • è persistente: quando chiudi il file le tue pieghe non scompaiono;

  • oltre ad essere persistente, si ridimensiona bene, puoi lavorare su centinaia di file con molte pieghe senza effetti negativi;

  • è ovvio quali parti del testo sono piegate;

  • non rompe il rientro o qualcosa del genere;

  • può ripiegare solo le pieghe spiegate (oh, mio);

  • per i fan del avypacchetto: puoi usare avyper piegare il testo con un numero minimo di tasti!

uso

Crea rilegatura per alcune / tutte queste funzioni:

  • vimish-fold - piegatura di base della regione selezionata;

  • vimish-fold-unfold- non è necessario vincolarlo, basta usare C-gquando il punto è posizionato sull'intestazione che rappresenta il testo piegato;

  • vimish-fold-unfold-all - tuttavia ciò può essere utile;

  • vimish-fold-refold - sì, puoi ripiegarlo;

  • vimish-fold-avy- usa avyper piegare il testo!

Puoi attivare vimish-fold-modeselettivamente le modalità in cui desideri avere un piegamento persistente o semplicemente attivarlo ovunque:

(vimish-fold-global-mode 1)

hai qualche suggerimento chiave associato? Quali associazioni usi quando sei in modalità C ++? Modalità C? Modalità Python? Modalità Lisp? Modalità ELisp? Modalità JavaScript?
Reb.Cabin

1
@ Reb.Cabin, questo non è un pacchetto specifico per la modalità, quindi le combinazioni di tasti globali sono la scelta migliore. Sto usando le associazioni di tasti che non coinvolgono accordi di chiavi e la maggior parte delle persone le considererebbe un po 'strane, attualmente ho: menu v fvimish-fold, menu v avimish-fold-avy, menu v uvimish-fold-unfold-all, menu v vvimish-fold-refold. La maggior parte dei miei tasti sono così, questa è la mia configurazione .
Mark Karpov,

Questo si integra con movimenti malvagi e textobjects?
PythonNut

1
Hm ... inizierò a lavorare su un PR.
PythonNut

1
Io, per esempio, trovo il vimish-fold completamente inutilizzabile. Forse è intuitivo per coloro che hanno già familiarità con la piegatura del codice in Vim ... Non lo so. Inoltre, non capisco perché la piegatura in modalità org
funzioni
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.