Я хотел бы открыть файл foo.bar
дважды (или более) в emacs, чтобы я мог редактировать две его части одновременно. Является ли это возможным? Наверное, лучший вопрос, как это сделать? Есть ли способ открыть каждый экземпляр в своем собственном буфере / фрейме?
3 ответа
Вы можете открыть один и тот же буфер в нескольких окнах (которые могут быть распределены по разным кадрам), но это не очень удобно. Каждое окно имеет свою точку, но все они имеют общую метку, режим файла, сужение и другие характеристики, потому что кроме точки почти все характеристики связаны с буфером. Кроме того, если вам случится посетить другой буфер в одном окне, вы потеряете свое место в файле.
Вы можете создать косвенный буфер, который имеет свою собственную точку, метку, режимы и т.д., Но тот же контент, что и исходный буфер (и сохраняет записи любого буфера в один и тот же файл). Чтобы создать второй буфер, который является клоном текущего буфера, запустите M-x clone-indirect-buffer RET
. Чтобы открыть этот второй буфер в другом окне, вы можете набрать C-x 4 c
.
Режим разделенного экрана: где Ctrl+X означает, нажмите и удерживайте клавишу Ctrl и введите X. Затем введите число, следующее.
Ctrl+X 2 (горизонтальное разделение)
или же
Ctrl+X 3 (вертикальное разделение)
Затем вы можете прокрутить их независимо в том же файле или открыть другой буфер, если хотите в одном из них.
Чтобы вернуться к одному виду просмотра
Ctrl+X 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)
)
)
)
)