170 votes

Emacs - Plusieurs colonnes dans un tampon

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

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

1 votes

C-x 3 et :vsplit sont parfaits pour obtenir plusieurs vues séparées du code, mais j'aimerais qu'il passe d'une colonne à l'autre (comme du texte dans un journal).

1 votes

Merci. Je suis tombé amoureux de la visualisation du code en 4-6 colonnes et j'ai essayé de formater tout mon code en 30-40 caractères, et j'aime énormément le résultat - en rendant toutes les lignes courtes, et pas seulement celles qui le sont naturellement, on gaspille beaucoup moins d'espace, et tout l'espace de mon écran est utilisé pour afficher le texte ; de plus, les blocs de code deviennent plus bidimensionnels, ce qui facilite la compréhension visuelle et la surveillance de la structure.

256voto

huaiyuan Points 16570

Voir mode de suivi . Extrait :

Le mode Follow est un mode mineur qui fait défiler deux fenêtres, affichant toutes deux le même tampon, comme une seule grande "fenêtre virtuelle". Pour utiliser le mode Follow, allez dans un cadre avec une seule fenêtre, divisez-le en deux fenêtres côte à côte en utilisant C-x 3, puis tapez M-x follow-mode. Dès lors, vous pouvez modifier le tampon dans l'une ou l'autre des deux fenêtres, ou faire défiler l'une ou l'autre ; l'autre fenêtre la suit. En mode Suivi, si vous déplacez un point à l'extérieur 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 seule grande fenêtre.

3 votes

Puis-je l'utiliser avec plus de deux fenêtres ? Puis-je avoir quatre fenêtres en utilisant ce système ?

0 votes

Je me demande s'il est possible d'éditer deux colonnes d'une même source de manière individuelle, sans les diviser en deux fenêtres. Ce n'est pas le meilleur exemple mais imaginez que j'ai une colonne pour le code script et l'autre pour les commentaires alors si je suis dans la deuxième colonne je veux appuyer sur "enter" et continuer dans la ligne suivante mais dans la deuxième colonne. Est-ce possible avec Emacs ou un autre éditeur de texte ?

1 votes

C'est très utile pour éditer une fonction ou une méthode longue. Je trouve toujours ce mode et ouvre deux tampons et le fait moi-même, merci huaiyuan.

18voto

J'utilise cette fonction pour invoquer follow-mode mais il faudrait l'adapter à 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))

0 votes

Plus 1 pour avoir souligné (balance-Windows) seul ! Je suppose que vous pourriez faire en sorte qu'il se divise un nombre paramétrique de fois et rendre la fonction interactive. De plus, le réglage scroll-margin a 0 aura un sens dans follow-mode .

17voto

bheeshmar Points 1589

Le plugin "Multipager" pour Vim peut faire cela avec les splits VIM pour les personnes qui veulent obtenir ce comportement dans Vim.

Obtenez-le sur la page du Dr Chip : http://mysite.verizon.net/astronaut/vim/index.html#MPAGE

Docs : http://mysite.verizon.net/astronaut/vim/doc/mpage.txt.html

1 votes

Mais une question portait sur Emacs, pas sur Vim.

2voto

inkedmn Points 12655

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

Documentation ici

3 votes

Emacs peut aussi le faire, comme mentionné dans la question, mais ce n'est pas ce qui est demandé.

1 votes

Combinez cela avec :scrollbind et vous y êtes.

0 votes

@Kragen -- La méthode pour faire cela est : 1. diviser la fenêtre verticalement, de façon à ce qu'un seul tampon soit visible dans deux fenêtres 2. faire défiler dans la deuxième fenêtre de façon à ce 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. lancer la commande :set scrollbind dans chacune des fenêtres. Maintenant, les fenêtres vont défiler ensemble comme vous le souhaitez. (Note : scrollopt doit contenir l'option 'ver').

-1voto

Brian Postow Points 3765

Un rapide coup d'œil sur le wiki d'emacs ne montre pas un mode comme celui que vous décrivez. Cependant, il ne devrait pas être trop difficile d'en écrire un... Il suffit de diviser la fenêtre avec C-x 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 aille immédiatement à l'autre fenêtre en haut ?

Hmm, peut-être que ce n'est pas si facile. Mais ça devrait quand même être faisable...

1 votes

...et donc Elisp est ajouté à la liste des choses que je dois apprendre :) Merci beaucoup Brian ;)

0 votes

De toute évidence, quelqu'un l'a déjà fait, mais oui, elisp est un outil extraordinaire !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X