Редактировать один файл в двух разных буферах в Emacs

28

Я хотел бы открыть файл foo.barдважды (или более) в Emacs, чтобы я мог редактировать две разные его части одновременно. Является ли это возможным? Наверное, лучший вопрос, как это сделать? Есть ли способ открыть каждый экземпляр в своем собственном буфере / фрейме?

Дрор
источник
Вы можете отобразить один и тот же буфер в разных окнах. Разве это не решение этой проблемы?
Том

Ответы:

35

Вы можете открыть один и тот же буфер в нескольких окнах (которые могут быть распределены по разным кадрам), но это не очень удобно. Каждое окно имеет свою точку, но все они имеют общую метку, режим файла, сужение и другие характеристики, потому что, кроме точки, почти все характеристики связаны с буфером. Кроме того, если вам случится посетить другой буфер в одном окне, вы потеряете свое место в файле.

Вы можете создать косвенный буфер, который имеет свою собственную точку, метку, режимы и т. Д., Но тот же контент, что и исходный буфер (и сохраняет запись в любой буфер в один и тот же файл). Чтобы создать второй буфер, который является клоном текущего буфера, запустите M-x clone-indirect-buffer RET. Чтобы открыть этот второй буфер в другом окне, вы можете напечатать C-x 4 c.

Жиль "ТАК - перестань быть злым"
источник
3
Чтобы уточнить: C-x 4 cработает clone-indirect-buffer-other-window, так что это будет использоваться вместо clone-indirect-buffer, а не после этой команды. Однако в моей системе обе эти команды выполняют одно и то же.
SabreWolfy
Я хотел бы выяснить, как запомнить это: - /
pedz
@pedz C-x 4- это префикс для Windows, cдля клона . Вы можете определить другие привязки, если хотите. C-x cне используется в конфигурации по умолчанию, вы можете использовать это, если вы не боитесь случайного удара C-x C-cвместо этого. Я определяю, C-x 5 cчтобы клонировать в новом кадре в моем файле инициализации.
Жиль "ТАК - перестань быть злым"
8

Режим разделенного экрана: где ctrl+ xозначает, нажмите и удерживайте клавишу Ctrl и введите x. Затем введите число, следующее.

ctrl+ x2 (горизонтальное разделение)

или

ctrl+ x3 (вертикальное разделение)

Затем вы можете прокрутить их независимо в том же файле или открыть другой буфер, если хотите в одном из них.

Чтобы вернуться к одному типу представления

ctrl+ x1

При желании вы можете разделить каждый экран (раздел) столько раз, сколько требуется. Сначала выберите экран, который вы хотите разделить, а затем выполните горизонтальное или вертикальное разделение на нем.

Мэтт Н
источник
Хлоп! Разве вы не должны включать навигацию по клавиатуре между кадрами? C-x oработает other-windowи циклически просматривает видимые «окна» в каждом «кадре». (Используя конфигурацию emacs, где окна оконного менеджера называются фреймами, а отдельные панели внутри них называются окнами (я знаю, я знаю, но я за это не отвечаю).)
dmckee
Я склонен использовать мышь.
Мэтт H
1

Emacs склонен к панелям (окнам), а не к фреймам. Часто желательно открыть один и тот же буфер в другом кадре, а не просто в другом окне в том же кадре. Но C-x 5 cпо умолчанию не связан. Этот код определяет отсутствующую clone-indirect-buffer-other-frameфункцию:

(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)
                   )
                 )
               )
            )
Андреас Шпиндлер
источник