Como copiar retângulo morto para o anel de morte


11

Freqüentemente extraio um retângulo de texto de um buffer, mas depois descubro que quero puxar o texto como se não fosse um retângulo. Existe uma maneira de adicionar o retângulo morto atual ao anel de morte?

O Manual do GNU Emacs tem o seguinte a dizer:

"Matar" um retângulo não está matando no sentido usual; o retângulo não é armazenado no anel de morte, mas em um local especial que registra apenas o retângulo mais recente morto. Isso ocorre porque puxar um retângulo é tão diferente do puxar texto linear que comandos de puxar diferentes precisam ser usados. Arranque não está definido para retângulos.

No entanto, posso basicamente obter o comportamento que quero com

  • M-> vá para o final do buffer
  • C-x r y retângulo puxado
  • C-x C-x ponto e marca de troca (seleciona linhas recém-arrancadas)
  • C-w matar a seleção para o anel de morte

Existe uma maneira melhor de transformar um retângulo morto em uma entrada do anel de morte?


A solução ligado não é o que você pediu, mas ele puxa retângulos como você quer: emacs.stackexchange.com/a/46352/15749
jue

Respostas:


6

Se eu entendi sua pergunta, você está procurando algo assim:

(defun youngfrog/copy-rectangle-to-kill-ring (start end)
  "Saves a rectangle to the normal kill ring. Not suitable for yank-rectangle."
  (interactive "r")
  (let ((lines (extract-rectangle start end)))
    (with-temp-buffer
      (while lines ;; insert-rectangle, but without the unneeded stuff
        ;; (most importantly no push-mark)
        (insert-for-yank (car lines))
        (insert "\n")
        (setq lines (cdr lines)))
      (kill-ring-save (point-min) (point-max)))))

Cortesia de ErgoEmacs


3

Não sei o que há de especial em ter o retângulo no anel de morte, mas se você atualizar para o Emacs-24.4, poderá fazer: C-x SPC .... M-wselecionar um retângulo e colocá-lo no anel de morte. Depois disso, C-yvocê puxará o retângulo (da mesma forma que o C-x r yfaz).


Há duas coisas no ringue que são "especiais". O mais importante (para mim) é a maneira como os itens do ringue são arrancados. Simplificando, o puxão desloca o texto existente para baixo em vez de deslocá-lo para a direita. O uso do anel de morte também tem o benefício colateral de manter um histórico de texto morto. Parece que 24.4 pode fornecer o segundo benefício, mas não o primeiro.
Nispio

Ah, de fato, nesse caso, o novo comportamento de 24.4 melhora a parte com a qual você não se importa.
Stefan

1

Fiquei inicialmente irritado com a falta de uma solução interna para esse problema, depois percebi que havia uma solução interna: kill-rectangle.

Digamos que você tenha um texto como

AAA BBBBBBBBB
AAA BBB
AAA BBBBBBB

Mas queira a parte 'B' do texto em outro lugar, como entre estas linhas C e D:

CCCCC
CCC
DDDD
DD

Se você copiar o retângulo B ( C-x r M-w) e depois colocar o ponto no primeiro 'D', depois puxe o retângulo de volta ( C-x r y), você terminará com

CCCCC
CCC
BBBBBBBBBDDDD
BBB      DD
BBBBBBB  

onde você realmente queria

CCCCC
CCC
BBBBBBBBB
BBB
BBBBBBB
DDDD
DD

Pode parecer natural copiar o retângulo de 'B's e puxá-los para o novo local, mas uma solução melhor é simplesmente copiar as linhas' A e 'B' e colocá-las na sua totalidade entre 'C' e ' D 'linhas.

Em seguida, marque o retângulo que contém os 'A's e use kill-rectangle( C-x r k) para terminar com o resultado desejado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.