Edite um arquivo em dois buffers diferentes no emacs

27

Eu gostaria de abrir o arquivo foo.bar duas vezes (ou mais) no emacs, para que eu possa editar duas partes diferentes simultaneamente. É possível? Provavelmente a melhor pergunta é como fazer isso? Existe uma maneira de abrir cada instância em seu próprio buffer / frame?

    
por Dror 21.09.2011 / 13:52

3 respostas

34

Você pode abrir o mesmo buffer em mais de uma janela (que pode ser distribuída entre diferentes quadros), mas não é muito conveniente. Cada janela tem seu próprio ponto, mas todas elas 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 acontecer de você visitar outro buffer em uma janela, você perderá seu lugar no arquivo.

Você pode fazer um buffer indireto que tem seu próprio ponto, marca, modos e assim por diante, mas o mesmo conteúdo que o buffer original (e salvando qualquer buffer escreve no mesmo arquivo). Para criar um segundo buffer que seja 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 .

    
por 22.09.2011 / 01:18
8

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

ctrl + x 2 (divisão horizontal)

ou

ctrl + x 3 (divisão vertical)

Então você pode rolar eles independentemente no mesmo arquivo ou abrir outro buffer se você quiser em um deles.

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

ctrl + x 1

Se desejar, você pode dividir cada tela (seção) quantas vezes forem necessárias. Selecione a tela que você deseja dividir primeiro e, em seguida, execute uma divisão horizontal ou vertical.

    
por 21.09.2011 / 13:56
1

O Emacs é tendencioso para painéis (janelas), não para 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 não está vinculado por padrão. Este código define a função clone-indirect-buffer-other-frame 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)
                   )
                 )
               )
            )
    
por 06.02.2013 / 22:01