Emacs - Várias colunas, um buffer

165

Estou tentando editar algum código de montagem que tende a ser formatado em listagens longas, mas finas. Eu gostaria de poder usar alguns dos acres de espaço horizontal que tenho e ver mais código na tela ao mesmo tempo. Existe um método para fazer o Emacs (ou mesmo outro editor) me mostrar várias colunas, todas apontando para o mesmo buffer?

Cx 3 (emacs) e: vsplit (vim) são ótimos para várias visualizações separadas no código, mas eu gostaria que ele fluísse de uma coluna para a outra (como texto em um jornal).

user119857
fonte
1
Cx 3 e: vsplit são grandes para várias vistas separadas no código, mas eu gostaria que ela flua de uma coluna para o outro (como texto em um jornal)
user119857
1
Obrigado! Eu me apaixonei pela visualização de código de 4 a 6 colunas que tentei formatar todo o meu código para 30-40 caracteres, e estou adorando o resultado extremamente - tornando todas as linhas curtas, não apenas as naturalmente curtas, muito menos espaço é desperdiçado, e todo o meu espaço na tela é usado para exibir texto; Além disso, os blocos de código se tornam mais bidimensionais, facilitando a compreensão visual e a supervisão estrutural.
Erik Kaplun

Respostas:

248

Veja o modo de acompanhamento . Excerto:

O modo Follow é um modo menor que cria duas janelas, ambas mostrando o mesmo buffer, rolando como uma única “janela virtual” alta. Para usar o modo Follow, vá para um quadro com apenas uma janela, divida-o em duas janelas lado a lado usando Cx 3 e digite Mx follow-mode. A partir de então, você pode editar o buffer em uma das duas janelas ou rolar em uma delas; a outra janela segue. No modo Seguir, se você mover o ponto para fora da parte visível em uma janela e para a parte visível na outra janela, isso seleciona a outra janela - novamente, tratando as duas como se fossem partes de uma janela grande.
huaiyuan
fonte
3
Posso usar isso com mais de duas janelas? Posso ter quatro janelas usando isso?
Yktula
Gostaria de saber se é possível editar duas colunas da mesma fonte de maneira individual, não divididas em duas janelas. Este não é o melhor exemplo, mas imagine que eu tenha uma coluna para o código do script e a outra para comentários; se eu estiver na segunda coluna, quero pressionar "enter" e continuar na próxima linha, mas na segunda coluna. Isso é possível com o Emacs ou outro editor de texto?
sw.
É muito útil editar uma função ou método longo e longo. i sempre encontrar este modo e tampão dois abertos e fazer isso por mim, graças Huaiyuan
Yuan Ele
17

Eu uso essa função para chamar follow-mode, embora seja necessário personalização para um tamanho de tela diferente:

;;; I want a key to open the current buffer all over the screen.
(defun all-over-the-screen ()
  (interactive)
  (delete-other-windows)
  (split-window-horizontally)
  (split-window-horizontally)
  (balance-windows)
  (follow-mode t))
Kragen Javier Sitaker
fonte
Mais 1 para apontar (janelas de balanço) sozinho! Acho que você pode dividir um número paramétrico de vezes e tornar a função interativa. Além disso, definir scroll-marginpara 0fará sentido follow-mode.
Erik Kaplun
2

O Vim pode fazer isso usando :vsplit- e você pode ter o mesmo buffer aberto em várias "janelas" (que na verdade são seções em uma única "janela").

Documentação aqui

brettkelly
fonte
3
O emacs também pode fazer isso, como mencionado na pergunta, mas não é isso que está sendo solicitado.
Justinhj 15/06/2009
1
Combine isso com :scrollbind, e você está lá.
bastibe 24/07
@Kragen - O método para fazer isso é: 1. dividir a janela verticalmente, para que o buffer único seja visível em duas janelas 2. role na segunda janela para que a primeira linha na segunda janela venha após a última linha na primeira janela, 3. comando de emissão :set scrollbindem cada uma das janelas. Agora as janelas rolam juntas, conforme desejado. (Nota: o scrollopt deve conter a opção 'ver').
Herbert Sitz
Hmm, isso meio que funciona. Legal! Obrigado! Alguém deve escrever um script vim para fazer isso automaticamente.
Kragen Javier Sitaker
-1

Uma rápida olhada no wiki do emacs não mostra um modo como você descreve. No entanto, não deve ser muito difícil escrever uma ... Você só precisa dividir a janela com Cx 3 e mover o texto da outra janela para baixo, e sempre que mover o texto, faça o mesmo na outra janela. ..

Podem ocorrer problemas quando você chegar ao fundo do buffer. Deseja que o cursor vá imediatamente para a outra janela no topo?

Hmm, talvez não seja assim tão fácil. Mas ainda deve ser factível ...

Brian Postow
fonte
1
... e assim Elisp é adicionado ao coisas-I-necessidade de aprender-list :) Muito obrigado Brian;)
user119857
Evidentemente, alguém já fez isso, mas sim, o elisp é uma ferramenta incrível!
9789 Brian Postow
-5

este é o comportamento padrão do emacs ao dividir a janela (Cx 3 para divisão vertical), você obtém duas colunas em que o buffer atual está aberto

segundo
fonte
1
Mas, nesse caso, não está no modo de acompanhamento. O modo de acompanhamento garantirá que cada buffer seja posicionado na "página seguinte" para que você possa ler o buffer movendo os olhos, em vez de mover o ponto.
Jrockway
-7

Use divisão vertical com Cx 3. Isso dividirá o buffer atual em duas colunas que você pode alternar com Cx o.

Nathaniel Flath
fonte
2
Isso não flui automaticamente de uma coluna para outra.
22410 kmarsh