Selecionando texto sem mover o cursor

8

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-spcpara 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?

Amelio Vazquez-Reina
fonte
Você sempre pode voltar ao local do ponto anterior com C-u C-spc.
Malabarba
1
você pode me dizer por favor, qual poderia ser o interesse de selecionar texto sem mover o cursor?
Nsukami _

Respostas:

12

Há uma resposta separada para cada um dos pontos listados:

  1. A ligação padrão do emacs C-x hselecionará todo o buffer, independentemente de onde o cursor estiver.

  2. O pacote de região de expansão ajudará a alcançar o segundo objetivo de expandir gradualmente a seleção. expand-regiontambé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:

Expandir região aumenta a região selecionada por unidades semânticas. Continue pressionando a tecla até selecionar o que você deseja.

Um exemplo:

 (setq alphabet-start "abc def") 

Com o cursor em c, ele inicia marcando a palavra inteira abc, depois expande para o conteúdo das aspas abc def, depois para a citação inteira "abc def" e depois para o conteúdo do sexp setq alphabet-start "abc def "e, finalmente, para todo o sexp.

Gostaria de acrescentar que a modificação da seleção de região em ambos os casos ainda moverá o cursor.

Kaushal Modi
fonte
+1, mas observe que C-x hmove o cursor: para o final do buffer e depois para o início do buffer. Você precisa C-u C-spcduas vezes para voltar para onde estava.
ShreevatsaR
9

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 he depois usar C-x C-xpara 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 tenha delete-selection-modeativado.)

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.

Desenhou
fonte
4

Como mencionado, o expand-regionpacote é ótimo, mas também acho que vale a pena mencionar easy-kill. Ele é cobrado como uma gota de substituição, kill-ring-saveque transforma a M-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-wcopiava a região ativa, o URL, o email ou a linha atual (em ordem de easy-kill-try-things), mas seguido de um "d" M-w dcopiava 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 chamado easy-markpara marcar regiões sem alterar seu ponto atual.

waymondo
fonte
1

Quando você copia algo, pode adicionar texto à seleção mais tarde com o uso de C-M-w:

  • copiar uma linha / região
  • faça outra coisa
  • você deseja anexar sthg ao texto copiado anteriormente: digite C-M-w( append-next-kill) e copie o que deseja ( M-w).
Ehvince
fonte
1

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.

Jonathan Leech-Pepin
fonte
O prelúdio é mapeado (mark-whole-buffer)para <kbd> Cmd-a </kbd> no OSX para manter alguma semelhança com a funcionalidade OSX típica.
Aaron Lee
1

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 copiar M-mouse-3e selecionar a seleção secundária M-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 2ouC-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-bufferou C-x 4 ctambé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-kanexa 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-wanexa a seleção ao texto na frente do anel de morte (ao contrário de M-wque envia o texto selecionado como uma nova entrada no anel de morte).

Gilles 'SO- parar de ser mau'
fonte