Emacs - Plusieurs colonnes un tampon

165

J'essaie de modifier un code d'assemblage qui a tendance à être formaté en listes longues mais minces. J'aimerais pouvoir utiliser une partie des acres d'espace horizontal dont je dispose et voir plus de code à l'écran en même temps. Existe-t-il une méthode pour obtenir Emacs (ou même un autre éditeur) pour me montrer plusieurs colonnes pointant toutes vers le même tampon?

Cx 3 (emacs) et: vsplit (vim) sont parfaits pour plusieurs vues séparées dans le code, mais j'aimerais qu'il circule d'une colonne à l'autre (comme du texte dans un journal).

user119857
la source
1
Cx 3 et: vsplit sont parfaits pour plusieurs vues séparées dans le code, mais j'aimerais qu'il circule d'une colonne à l'autre (comme du texte dans un journal)
user119857
1
Merci! Je suis tombé amoureux de la visualisation de code de 4 à 6 colonnes que j'ai essayé de formater tout mon code en 30 à 40 caractères, et j'aime beaucoup le résultat - en rendant toutes les lignes courtes, pas seulement les lignes naturellement courtes, beaucoup moins d'espace est gaspillé, et tout mon espace d'écran est utilisé pour afficher du texte; De plus, les blocs de code deviennent plus bidimensionnels, facilitant la compréhension visuelle et la surveillance structurelle.
Erik Kaplun

Réponses:

248

Voir mode de suivi . Extrait:

Le mode Follow est un mode mineur qui permet à deux fenêtres, toutes deux affichant le même tampon, de défiler comme une seule grande «fenêtre virtuelle». Pour utiliser le mode Follow, accédez à un cadre avec une seule fenêtre, divisez-le en deux fenêtres côte à côte à l'aide de Cx 3, puis tapez Mx follow-mode. À partir de là, vous pouvez éditer le tampon dans l'une des deux fenêtres ou faire défiler l'une ou l'autre; l'autre fenêtre le suit. En mode Suivre, si vous déplacez le point en dehors de la partie visible dans une fenêtre et dans la partie visible dans l'autre fenêtre, cela sélectionne l'autre fenêtre - encore une fois, en traitant les deux comme si elles faisaient partie d'une grande fenêtre.
huaiyuan
la source
3
Puis-je l'utiliser avec plus de deux fenêtres? Puis-je avoir quatre fenêtres en utilisant ceci?
Yktula
Je me demande s'il est possible d'éditer deux colonnes d'une même source de manière individuelle, non divisée en deux fenêtres. Ce n'est pas le meilleur exemple, mais imaginez que j'ai une colonne pour le code du script et l'autre pour les commentaires, si je suis dans la deuxième colonne, je veux appuyer sur "Entrée" et continuer dans la ligne suivante mais dans la deuxième colonne. Est-ce possible avec Emacs ou un autre éditeur de texte?
sw.
Il est très utile de modifier une fonction ou une méthode longue et longue. Je trouve toujours ce mode et j'ouvre deux tampons et je le fais moi-même, merci huaiyuan
Yuan He
17

J'utilise cette fonction pour invoquer follow-mode, bien qu'elle nécessite une personnalisation pour une taille d'écran différente:

;;; 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))
Kragen Javier Sitaker
la source
Plus 1 pour signaler (balance-windows) seul! Je suppose que vous pouvez le diviser un nombre de fois paramétrique et rendre la fonction interactive. En outre, définir scroll-marginsur 0aura du sens dans follow-mode.
Erik Kaplun
2

Vim peut le faire en utilisant :vsplit- et vous pouvez ouvrir le même tampon dans plusieurs "fenêtres" (qui sont en fait des sections dans une seule "fenêtre").

Documentation ici

Brettkelly
la source
3
emacs peut le faire aussi, comme mentionné dans la question, mais ce n'est pas ce qui est demandé.
justinhj
1
Combinez cela avec :scrollbind, et vous êtes là.
bastibe le
@Kragen - La méthode pour ce faire est la suivante: 1. diviser la fenêtre verticalement, de sorte qu'un seul tampon soit visible dans deux fenêtres 2. faire défiler la deuxième fenêtre de sorte que la première ligne de la deuxième fenêtre vienne après la dernière ligne de la première fenêtre, 3. émettez la commande :set scrollbinddans chacune des fenêtres. Maintenant, les fenêtres défileront ensemble comme vous le souhaitez. (Remarque: scrollopt doit contenir l'option 'ver'.)
Herbert Sitz
Hmm, ça fonctionne en quelque sorte. Cool! Merci! Quelqu'un devrait écrire un script vim pour le faire automatiquement.
Kragen Javier Sitaker
-1

Un rapide coup d'œil au wiki emacs ne montre pas un mode comme vous le décrivez. Cependant, il ne devrait pas être trop difficile d'en écrire une ... Il vous suffit de diviser la fenêtre avec Cx 3 et de déplacer le texte dans l'autre fenêtre vers le bas, et chaque fois que vous déplacez le texte, faites de même dans l'autre fenêtre. ..

Des problèmes peuvent survenir lorsque vous arrivez au bas de la mémoire tampon, voulez-vous que le curseur passe immédiatement à l'autre fenêtre en haut?

Hmm, ce n'est peut-être pas si simple. Mais cela devrait toujours être faisable ...

Brian Postow
la source
1
... et donc Elisp est ajouté à la liste des choses que j'ai besoin d'apprendre :) Merci beaucoup Brian;)
user119857
Évidemment, quelqu'un l'a déjà fait, mais oui, elisp est un outil incroyable!
Brian Postow
-5

c'est le comportement par défaut d'emacs lors de la division de la fenêtre (Cx 3 pour la division verticale) vous obtenez deux colonnes qui ont toutes deux le tampon courant ouvert

seconde
la source
1
Mais dans ce cas, ce n'est pas en mode de suivi. Le mode Follow s'assurera que chaque tampon sera positionné à la "page suivante" afin que vous puissiez lire le tampon en déplaçant vos yeux plutôt qu'en déplaçant le point.
jrockway
-7

Utilisez la division verticale avec Cx 3. Cela divisera le tampon actuel en deux colonnes que vous pouvez basculer entre avec Cx o.

Nathaniel Flath
la source
2
Cela ne passe pas automatiquement d'une colonne à une autre.
kmarsh