Edite um arquivo em dois buffers diferentes no emacs

28

Gostaria de abrir o arquivo foo.barduas vezes (ou mais) no emacs, para que eu possa editar duas partes diferentes simultaneamente. É possível? Provavelmente, a melhor pergunta é: como fazê-lo? Existe uma maneira de abrir cada instância em seu próprio buffer / quadro?

Dror
fonte
Você pode exibir o mesmo buffer em janelas diferentes. Não é uma solução para este problema?
Tom

Respostas:

35

Você pode abrir o mesmo buffer em mais de uma janela (que pode ser dividida em quadros diferentes), mas não é muito conveniente. Cada janela tem seu próprio ponto, mas todos compartilham a marca, o modo de arquivo, o estreitamento e outras características, porque, além do ponto, praticamente todas as características estão ligadas ao buffer. Além disso, se você visitar outro buffer em uma janela, perderá seu lugar no arquivo.

Você pode criar um buffer indireto com seu próprio ponto, marca, modos e assim por diante, mas com o mesmo conteúdo que o buffer original (e salvar as gravações no buffer para o mesmo arquivo). Para criar um segundo buffer que é um clone do buffer atual, execute M-x clone-indirect-buffer RET. Para abrir esse segundo buffer em uma janela diferente, você pode digitar C-x 4 c.

Gilles 'SO- parar de ser mau'
fonte
3
Para esclarecer: C-x 4 cexecuta clone-indirect-buffer-other-window, portanto, isso seria usado em vez de clone-indirect-buffer, não seguindo esse comando. No entanto, no meu sistema, esses dois comandos parecem fazer a mesma coisa.
SabreWolfy
Eu gostaria de descobrir como lembrar isso: - /
pedz
@pedz C-x 4é o prefixo para windows, cé para clone . Você pode definir outras ligações, se preferir. C-x cnão é usado na configuração padrão, você pode usá-lo se não tiver medo de bater acidentalmente C-x C-c. Eu defino C-x 5 cclonar em um novo quadro no meu arquivo init.
Gilles 'SO- stop be evil'
8

Modo de tela dividida: onde ctrl+ xsignifica pressionar e segurar a tecla ctrl e digite um x. Em seguida, digite o número a seguir.

ctrl+ x2 (divisão horizontal)

ou

ctrl+ x3 (divisão vertical)

Em seguida, você pode rolar eles de forma independente no mesmo arquivo ou abrir outro buffer, se desejar em um deles.

Para retornar a um único tipo de visualização

ctrl+ x1

Se desejar, você pode dividir cada tela (seção) quantas vezes for necessário. Selecione a tela que deseja dividir primeiro e depois faça uma divisão horizontal ou vertical nela.

Matt H
fonte
Caramba! Você não deve incluir a navegação do teclado entre os quadros? C-x ocorre other-windowe percorre as "janelas" visíveis em cada "quadro". (Usando a configuração emacs onde as janelas gerenciador de janelas são chamados quadros, e os painéis separados dentro deles são chamados de janelas (eu sei, eu sei, mas eu não sou responsável por isso).)
dmckee
Eu costumo usar o mouse.
Matt H
1

O Emacs é tendencioso para painéis (janelas), não quadros. Muitas vezes, é desejável abrir o mesmo buffer em outro quadro, não apenas em outra janela no mesmo quadro. Mas C-x 5 cé ilimitado por padrão. Este código define a clone-indirect-buffer-other-framefunção ausente :

(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
fonte