Como agir em retângulos além do final da linha?

16

Aqui está o que a documentação do Vim tem a dizer sobre isso:

A edição virtual significa que o cursor pode ser posicionado onde não há um caracter real. Isso pode estar na metade de uma guia ou além do final da linha. Útil para selecionar um retângulo no modo Visual e editar uma tabela.

Eu preferiria ver isso implementado como um modo menor ou como uma configuração incorporada.

babá
fonte
Deseja isso para selecionar um retângulo? Se for esse o caso, é o padrão na versão de desenvolvimento atual.
Malabarba 17/11
Não, estou pensando mais em puxar / substituir retângulos. Eu uso o modo de marca de retângulo e, embora seja um recurso interessante, não é o que estou procurando.
Nanny
De fato, para puxar / substituir retângulos, seria um companheiro natural da funcionalidade existente no modo de marca de retângulo. Não tenho certeza qual deve ser a interface do usuário.
27514 Stefan
Obrigado pela resposta, Stefan. Esse recurso seria mais útil ao lidar com retângulos, portanto, talvez no modo de marca de retângulo um comando possa alternar para um tipo de edição virtual. No momento, no modo de marca de retângulo, o ponto parece estar em um modo de edição virtual: ele pode passar do final de uma linha com C-f. Mas quando você puxa um retângulo depois de fazer isso, o retângulo aparece na marca e não no ponto. Se aparecesse no momento, isso resolveria esse problema.
Nanny

Respostas:

10

A extend-rectangle-to-endfunção no rectangle-utilspacote é o que você deseja. Está ligado melpa.

Ele insere espaços para fazer com que a seleção atual do retângulo seja estendida para cobrir a linha mais longa da região.

Para obter esse comportamento, eu tenho isso no meu init.el. C-x r enão está vinculado a mais nada no vanilla emacs

(require 'rectangle-utils)
(global-set-key (kbd "C-x r e") 'extend-rectangle-to-end)
Squidly
fonte
1
Para esclarecer, com este pacote, você seleciona a região e, em seguida, faz ou M-x extend-rectangle-to-enddepois C-x r M-wou C-x r k.
precisa
18

Outra resposta: use M-x picture-mode. Você pode matar ou copiar retângulos no meio de caracteres de tabulação etc., enviá-los para registros, etc.

Desenhou
fonte
3
Uma vantagem do uso desse método é que você pode controlar exatamente a largura que deseja que sua seleção de retângulo seja. Se eu tenho a linha 1 com 30 caracteres e a linha 2 com 5 caracteres, posso escolher o retângulo com 15 caracteres de largura e 2 linhas de altura; não é possível fazer isso com extend-rectangle-to-enda seleção de retângulo com isso sempre será 30x2.
precisa
1
picture-modeé velho e pouco conhecido. Entre outros recursos pouco conhecidos, possui: sair ( C-c C-c) remove o espaço em branco à direita.
Tirou
1
Isso é brilhante, Drew! Pergunta: há alguma razão para não aconselhar rectangle-minor-modea "embrulhar" picture-mode? (conselhos, já que não vejo nenhum gancho na fonte de rectangle-minor-mode).
rasmus
1
Aqui está o meu conselho, aliás. Ele não tira o espaço em branco, pois é meio desnecessário aqui:(defun rectangle-mark-mode-wrapped-in-picture-mode (orig-fun &rest args) (if rectangle-mark-mode (picture-mode) (and (eq major-mode 'picture-mode) (picture-mode-exit t)))) (advice-add 'rectangle-mark-mode :around #'rectangle-mark-mode-wrapped-in-picture-mode)
rasmus