Modifier un fichier dans deux tampons différents dans emacs

28

Je voudrais ouvrir le fichier foo.bardeux fois (ou plus) dans emacs, donc je peux en éditer deux parties différentes simultanément. C'est possible? La meilleure question est probablement, comment faire? Existe-t-il un moyen d'ouvrir chaque instance dans son propre tampon / cadre?

Dror
la source
Vous pouvez afficher le même tampon dans différentes fenêtres. N'est-ce pas une solution à ce problème?
Tom

Réponses:

35

Vous pouvez ouvrir le même tampon dans plus d'une fenêtre (qui peut être répartie entre différentes images), mais ce n'est pas très pratique. Chaque fenêtre a son propre point, mais ils partagent tous la marque, le mode de fichier, le rétrécissement et d'autres caractéristiques, car à part le point, presque toutes les caractéristiques sont liées au tampon. De plus, si vous visitez un autre tampon dans une fenêtre, vous perdrez votre place dans le fichier.

Vous pouvez créer un tampon indirect qui a son propre point, sa marque, ses modes, etc., mais le même contenu que le tampon d'origine (et l'enregistrement de l'un ou l'autre tampon écrit dans le même fichier). Pour créer un deuxième tampon qui est un clone du tampon actuel, exécutez M-x clone-indirect-buffer RET. Pour ouvrir ce deuxième tampon dans une fenêtre différente, vous pouvez taper C-x 4 c.

Gilles 'SO- arrête d'être méchant'
la source
3
Pour clarifier: C-x 4 cs'exécute clone-indirect-buffer-other-window, donc ce serait utilisé à la place de clone-indirect-buffer, ne pas suivre cette commande. Cependant, sur mon système, ces deux commandes semblent faire la même chose.
SabreWolfy
J'aimerais pouvoir comprendre comment m'en souvenir: - /
pedz
@pedz C-x 4est le préfixe pour Windows, cest pour clone . Vous pouvez définir d'autres liaisons si vous préférez. C-x cn'est pas utilisé dans la configuration par défaut, vous pouvez l'utiliser si vous n'avez pas peur de frapper accidentellement à la C-x C-cplace. Je définis C-x 5 cpour cloner dans un nouveau cadre dans mon fichier init.
Gilles 'SO- arrête d'être méchant'
8

Mode écran partagé: où ctrl+ xsignifie maintenir la touche ctrl enfoncée et taper un x. Tapez ensuite le numéro suivant.

ctrl+ x2 (division horizontale)

ou

ctrl+ x3 (séparation verticale)

Ensuite, vous pouvez les faire défiler indépendamment sur le même fichier ou ouvrir un autre tampon si vous le souhaitez dans l'un d'eux.

Pour revenir à un seul type de vue

ctrl+ x1

Si vous le souhaitez, vous pouvez diviser chaque écran (section) autant de fois que nécessaire. Sélectionnez d'abord l'écran que vous souhaitez fractionner, puis effectuez une division horizontale ou verticale dessus.

Matt H
la source
Oui! Ne devriez-vous pas inclure la navigation au clavier entre les images? C-x oparcourt other-windowet parcourt les "fenêtres" visibles dans chaque "cadre". (En utilisant la configuration emacs où les fenêtres du gestionnaire de fenêtres sont appelées cadres et les panneaux séparés à l'intérieur sont appelés fenêtres (je sais, je sais, mais je n'en suis pas responsable).)
dmckee
J'ai tendance à utiliser la souris.
Matt H
1

Emacs est biaisé vers les volets (fenêtres), pas les cadres. Il est souvent souhaitable d'ouvrir le même tampon dans un autre cadre, pas seulement une autre fenêtre dans le même cadre. Mais C-x 5 cn'est pas lié par défaut. Ce code définit la clone-indirect-buffer-other-framefonction manquante :

(global-set-key [?\C-x ?5 ?c]
             '(lambda(newname display-flag)
               "Like `clone-indirect-buffer-other-window' but display in another frame."
               (interactive
                (progn
                  (if (get major-mode 'no-clone-indirect)
                      (error "Cannot indirectly clone a buffer in %s mode" mode-name))
                  (list (if current-prefix-arg
                            (read-buffer "Name of indirect buffer: " (current-buffer))) t)))
               (save-window-excursion
                 (let ((newbuf (clone-indirect-buffer newname display-flag)))
                   (switch-to-buffer-other-frame newbuf)
                   )
                 )
               )
            )
Andreas Spindler
la source