Eu gostaria de aumentar uma seleção sem mover o ponto (o cursor) de sua localização. Sei que sempre posso usar C-u C-spc
para ir para o local anterior, mas gostaria de evitar isso.
Mais especificamente, eu gostaria de fazer as duas operações:
- Selecione todo o texto no buffer
- Adicione gradualmente linhas / parágrafos subsequentes à seleção
enquanto mantém o cursor onde está.
O Emacs tem alguma função interativa para isso? Eles estão vinculados a algum atalho de teclado?
C-u C-spc
.Respostas:
Há uma resposta separada para cada um dos pontos listados:
A ligação padrão do emacs C-x hselecionará todo o buffer, independentemente de onde o cursor estiver.
O pacote de região de expansão ajudará a alcançar o segundo objetivo de expandir gradualmente a seleção.
expand-region
também selecionará todo o buffer à medida que você continuar expandindo a região. Dê uma olhada no leia-me no github para obter mais informações. Este pacote está disponível no MELPA.Aqui está uma breve introdução a este pacote no seu github:
Gostaria de acrescentar que a modificação da seleção de região em ambos os casos ainda moverá o cursor.
fonte
C-x h
move o cursor: para o final do buffer e depois para o início do buffer. Você precisaC-u C-spc
duas vezes para voltar para onde estava.Se a região crescer, o cursor mudará de posição. Isso ocorre porque o cursor está sempre em uma extremidade da região.
Se você selecionar todo o texto do buffer (
C-x h
e depois usarC-x C-x
para trocar o ponto e a marca, para que o cursor esteja no final do texto) e, em seguida, digitar mais um pouco de texto, terá conseguido o que deseja: a região foi estendido para incluir o texto digitado. (Isso pressupõe que você não tenhadelete-selection-mode
ativado.)A região também foi desativada automaticamente, para que o texto da região não seja mais realçado. Para reativar a região, faça
C-x C-x
(que você pode repetir, se quiser manter o cursor no final do buffer.fonte
Como mencionado, o
expand-region
pacote é ótimo, mas também acho que vale a pena mencionareasy-kill
. Ele é cobrado como uma gota de substituição,kill-ring-save
que transforma aM-w
"cópia" normal em um comando de cópia dinâmica que também atua como um prefixo para salvar várias coisas. Por exemplo,M-w
copiava a região ativa, o URL, o email ou a linha atual (em ordem deeasy-kill-try-things
), mas seguido de um "d"M-w d
copiava com força o desfecho atual.Também existe um método de expandir / reduzir a seleção atual, algo como
expand-region
, assim como um comando chamadoeasy-mark
para marcar regiões sem alterar seu ponto atual.fonte
Quando você copia algo, pode adicionar texto à seleção mais tarde com o uso de
C-M-w
:C-M-w
(append-next-kill
) e copie o que deseja (M-w
).fonte
Como indicado em outras respostas:
C-xh selecionará o buffer inteiro;
(mark-whole-buffer)
Se você deseja aumentar sua seleção, a maneira mais fácil seria usar os
mark-*
comandos.Como um exemplo de chave:
C-M-SPC
(mark-sexp)
marcará o sexp no ponto. Se você repetir o comando, ele adicionará o seguinte sexp à seleção. O cursor permanecerá na posição atual ou moverá para o início do objeto (parágrafo / sexp) para garantir que ele esteja totalmente marcado.fonte
(mark-whole-buffer)
para <kbd> Cmd-a </kbd> no OSX para manter alguma semelhança com a funcionalidade OSX típica.Se você estiver bem em usar o mouse, poderá usar a seleção secundária . Pressione Meta, clique e arraste o botão esquerdo do mouse (
M-drag-mouse-1
). Isso não muda o ponto, desde que você esteja copiando apenas o texto visível na tela. Você pode copiarM-mouse-3
e selecionar a seleção secundáriaM-mouse-2
.Além da seleção secundária, você precisará mover o cursor para selecionar texto arbitrário, porque o cursor é uma extremidade da seleção (a outra é a marca).
Se você deseja trabalhar em um buffer sem afetar o ponto, é possível abrir o buffer em uma segunda janela (
C-x 2
ouC-x 3
). Cada janela tem seu próprio ponto. Quando terminar de selecionar e editar, feche a janela (C-x 0
) e volte para a outra.Para obter mais flexibilidade, você pode clonar o buffer atual. Executar
M-x clone-indirect-buffer
ouC-x 4 c
também criar uma nova janela mostrando esse buffer. O clone tem o mesmo texto que o original, mas tem sua própria marca e ponto.Se você já matou algum texto, pode acrescentar mais texto digitando
C-M-w
(append-next-kill
) e, em seguida, usando um comando kill. Por exemplo,C-M-w C-k
anexa a cauda da linha atual ao texto que já está na frente do anel de exclusão e exclui o texto copiado.C-M-w M-w
anexa a seleção ao texto na frente do anel de morte (ao contrário deM-w
que envia o texto selecionado como uma nova entrada no anel de morte).fonte