Edytuj jeden plik w dwóch różnych buforach w emacsie

28

Chciałbym otworzyć plik foo.bardwa razy (lub więcej) w emacsie, aby móc jednocześnie edytować dwie różne części. Czy to możliwe? Prawdopodobnie lepszym pytaniem jest, jak to zrobić? Czy istnieje sposób otwarcia każdej instancji we własnym buforze / ramce?

Dror
źródło
Możesz wyświetlić ten sam bufor w różnych oknach. Czy to nie jest rozwiązanie tego problemu?
Tom

Odpowiedzi:

35

Możesz otworzyć ten sam bufor w więcej niż jednym oknie (które można rozdzielić między różne ramki), ale nie jest to zbyt wygodne. Każde okno ma swój punkt, ale wszystkie mają wspólny znak, tryb pliku, zwężenie i inne cechy, ponieważ poza punktem prawie wszystkie cechy są powiązane z buforem. Ponadto, jeśli zdarzy ci się odwiedzić inny bufor w jednym oknie, stracisz swoje miejsce w pliku.

Możesz utworzyć bufor pośredni, który ma swój własny punkt, znak, tryby i tak dalej, ale taką samą zawartość jak oryginalny bufor (i zapisywanie jednego z buforów zapisuje w tym samym pliku). Aby utworzyć drugi bufor, który jest klonem bieżącego bufora, uruchom M-x clone-indirect-buffer RET. Aby otworzyć ten drugi bufor w innym oknie, możesz wpisać C-x 4 c.

Gilles „SO- przestań być zły”
źródło
3
Aby wyjaśnić: C-x 4 cdziała clone-indirect-buffer-other-window, więc byłoby to użyte zamiast clone-indirect-buffer, nie wykonując tego polecenia. Jednak w moim systemie oba te polecenia wydają się robić to samo.
SabreWolfy,
Chciałbym wymyślić, jak to zapamiętać: - /
pedz
@pedz C-x 4jest prefiksem dla systemu Windows, cjest dla klonowania . Jeśli chcesz, możesz zdefiniować inne powiązania. C-x cnie jest używany w domyślnej konfiguracji, możesz go użyć, jeśli nie boisz się C-x C-czamiast tego przypadkowo uderzyć . Definiuję C-x 5 cklonowanie w nowej ramce w moim pliku init.
Gilles „SO- przestań być zły”
8

Tryb podzielonego ekranu: gdzie ctrl+ xoznacza naciśnij i przytrzymaj klawisz Ctrl i wpisz x. Następnie wpisz następujący numer.

ctrl+ x2 (podział poziomy)

lub

ctrl+ x3 (podział pionowy)

Następnie możesz przewijać je niezależnie w tym samym pliku lub otworzyć inny bufor, jeśli chcesz w jednym z nich.

Aby powrócić do jednego typu widoku

ctrl+ x1

Jeśli chcesz, możesz podzielić każdy ekran (sekcję) tyle razy, ile potrzeba. Wybierz najpierw ekran, który chcesz podzielić, a następnie wykonaj na nim podział poziomy lub pionowy.

Matt H.
źródło
Yikes! Czy nie należy dołączać nawigacji między ramkami za pomocą klawiatury? C-x obiegnie other-windowi przechodzi przez widoczne „okna” w każdej „ramce”. (Korzystanie z konfiguracji emacsa, w której okna menedżera okien nazywane są ramkami, a oddzielne panele w nich nazywane są oknami (wiem, wiem, ale nie jestem za to odpowiedzialny).)
dmckee 21.09.11
Zwykle używam myszy.
Matt H
1

Emacs jest tendencyjny do paneli (okien), a nie ramek. Często pożądane jest otwarcie tego samego bufora w innej ramce, a nie tylko innego okna w tej samej ramce. Ale C-x 5 cdomyślnie nie jest związany. Ten kod definiuje brakującą clone-indirect-buffer-other-framefunkcję:

(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
źródło