Emacs - Più colonne un buffer


165

Sto cercando di modificare un codice assembly che tende a essere formattato in elenchi lunghi ma sottili. Mi piacerebbe poter usare alcuni acri di spazio orizzontale che ho e vedere più codice sullo schermo contemporaneamente. Esiste un metodo per fare in modo che Emacs (o davvero un altro editor) mi mostri più colonne che puntano tutte allo stesso buffer?

Cx 3 (emacs) e: vsplit (vim) sono fantastici per più viste separate nel codice, ma mi piacerebbe che scorresse da una colonna all'altra (come il testo in un giornale).


1
Cx 3 e: vsplit sono fantastici per più viste separate nel codice, ma mi piacerebbe che scorresse da una colonna all'altra (come il testo di un giornale)
user119857

1
Grazie! Mi sono innamorata della visualizzazione del codice di 4-6 colonne che ho provato a formattare tutto il mio codice su 30-40 caratteri, e sto amando il risultato estremamente - rendendo tutte le linee brevi, non solo quelle naturalmente brevi, molto meno spazio è sprecato e tutto il mio spazio sullo schermo viene utilizzato per visualizzare il testo; inoltre, i blocchi di codice diventano più bidimensionali, facilitando la comprensione visiva e la supervisione strutturale.
Erik Kaplun,

Risposte:


248

Vedi follow-mode . Estratto:

La modalità follow è una modalità minore che consente a due finestre, entrambe con lo stesso buffer, di scorrere come un'unica "finestra virtuale" alta. Per utilizzare la modalità Segui, vai a un frame con una sola finestra, suddividilo in due finestre affiancate usando Cx 3, quindi digita Mx follow-mode. Da quel momento in poi, è possibile modificare il buffer in una delle due finestre o scorrere una delle due; l'altra finestra lo segue. In modalità Segui, se si sposta il punto all'esterno della parte visibile in una finestra e nella parte visibile nell'altra finestra, questa seleziona l'altra finestra, trattando di nuovo i due come se fossero parti di una grande finestra.

3
Posso usarlo con più di due finestre? Posso avere quattro finestre usando questo?
Yktula,

Mi chiedo se sia possibile modificare due colonne della stessa fonte in modo individuale, non diviso in due finestre. Questo non è il miglior esempio, ma immagina di avere una colonna per il codice dello script e l'altra per i commenti, quindi se sono nella seconda colonna voglio premere "Invio" e continuare nella riga successiva ma nella seconda colonna. È possibile con Emacs o altri editor di testo?
sw.

È molto utile per modificare la funzione o il metodo long long. trovo sempre questa modalità e apro due buffer e lo faccio da solo, grazie huaiyuan
Yuan He

17

Uso questa funzione per invocare follow-mode, anche se avrebbe bisogno di personalizzazione per una dimensione dello schermo diversa:

;;; I want a key to open the current buffer all over the screen.
(defun all-over-the-screen ()
  (interactive)
  (delete-other-windows)
  (split-window-horizontally)
  (split-window-horizontally)
  (balance-windows)
  (follow-mode t))

Più 1 per indicare (finestre di equilibrio) da solo! Immagino che potresti farlo dividere un numero parametrico di volte e rendere interattiva la funzione. Inoltre, l'impostazione scroll-marginsu 0avrà senso follow-mode.
Erik Kaplun,


2

Vim può farlo usando :vsplit- e puoi avere lo stesso buffer aperto in più "finestre" (che sono in realtà sezioni all'interno di una singola "finestra").

Documentazione qui


3
Anche emacs può farlo, come menzionato nella domanda, ma non è quello che viene chiesto.
justinhj,

1
Uniscilo a quello :scrollbinde sei lì.
bastibe,

@Kragen - Il metodo per farlo è: 1. dividere la finestra verticalmente, quindi il buffer singolo è visibile in due finestre 2. scorrere nella seconda finestra in modo che la prima riga nella seconda finestra arrivi dopo l'ultima riga nella prima finestra, 3. emettere il comando :set scrollbindin ciascuna delle finestre. Ora le finestre scorreranno insieme come desiderato. (Nota: lo scrollopt deve contenere l'opzione 'ver'.)
Herbert Sitz,

Hmm, fa un po 'di lavoro. Freddo! Grazie! Qualcuno dovrebbe scrivere uno script vim per farlo automaticamente.
Kragen Javier Sitaker,

-1

Una rapida occhiata alla wiki di emacs non mostra una modalità come la descrivi. Tuttavia, non dovrebbe essere troppo difficile scriverne uno ... Devi solo dividere la finestra con Cx 3 e spostare il testo nell'altra finestra in basso, e ogni volta che sposti il ​​testo, fai lo stesso nell'altra finestra. ..

Potrebbero verificarsi dei problemi quando arrivi in ​​fondo al buffer, vuoi che il cursore si sposti immediatamente sull'altra finestra in alto?

Hmm, forse non è così facile. Ma dovrebbe essere comunque fattibile ...


1
... e così Elisp viene aggiunto all'elenco cose-che-ho-bisogno-di-imparare :)
Mille

Evidentemente, qualcuno l'ha già fatto, ma sì, elisp è uno strumento fantastico!
Brian Postow,

-5

questo è il comportamento predefinito di emacs quando si divide la finestra (Cx 3 per divisione verticale) si ottengono due colonne che hanno entrambe il buffer corrente aperto


1
Ma in quel caso, non è in modalità follow. La modalità follow assicurerà che ciascun buffer sia posizionato nella "pagina successiva" in modo da poter leggere il buffer spostando gli occhi anziché spostare il punto.
jrockway,

-7

Usa divisione verticale con Cx 3. In questo modo il buffer corrente verrà diviso in due colonne che è possibile alternare con Cx o.


2
Questo non scorre automaticamente da una colonna all'altra.
kmarsh
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.