27

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

3 ответа3

34

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

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

8

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

Ctrl+X 2 (горизонтальное разделение)

или же

Ctrl+X 3 (вертикальное разделение)

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

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

Ctrl+X 1

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

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)
                   )
                 )
               )
            )

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .