Qual é a utilidade do `ponto de troca e marca '?

16

O exchange-point-and-markcomando está vinculado C-x C-x, mas não consigo pensar em nenhum caso de uso que o torne merecedor de uma ligação tão proeminente.

Como posso usar o exchange-point-and-markpara melhorar minha técnica de edição?

Matthew Piziak
fonte

Respostas:

19

Há dois casos em que posso pensar: reativar a região e ajustar o tamanho da região.

Costumo usar essa ligação para reativar a região depois de executar algum comando que a desativa ou fazer algo que define a marca e o ponto de movimento sem ativar a região.

Por exemplo, faça um Cs e procure algo adiante. Pressione RET para sair da pesquisa e, em seguida, Cx Cx para marcar tudo de onde você iniciou a pesquisa.

Outro exemplo que faço muito quando quero incluir alguns exemplos de elisp em uma resposta do StackExchange:

  1. Marque o código que eu quero copiar.
  2. Pressione Cu Cx TAB para recuar o código em 4 espaços. Dessa forma, ele será renderizado como código aqui no site. Esta etapa desativa a região.
  3. Pressione Cx Cx para reativar a região e depois Mw para copiá-lo na área de transferência para que eu possa colá-lo na minha resposta do StackExchange.

O outro caso é quando você está marcando uma região e deseja estendê-la / diminuí-la. Nesse caso, é conveniente poder pular para o "outro extremo" da região, movê-lo e depois pular para trás. Se a região já estiver ativa, pressionar Cx Cx a deixará ativa, permitindo que você mova uma das extremidades.

glucas
fonte
17

Pergunte ao Emacs: C-h r i exchange-point-and-mark RETou melhor C-h r i C-x C-x RET. Isso leva você às informações mostradas abaixo.

Isto é o que o manual do Emacs, nó Setting Mark, diz em resposta à sua pergunta:

C-x C-xé útil quando você está satisfeito com a posição do ponto, mas deseja mover a outra extremidade da região (onde está a marca) . Se você usar C-x C-xuma segunda vez, se necessário, coloca a marca na nova posição com o ponto de volta na sua posição original. Normalmente, se a marca estiver inativa, esse comando primeiro reativa a marca onde foi definida pela última vez, para garantir que a região fique destacada. No entanto, se você chamá-lo com um argumento de prefixo, ele deixa a marca inativa e a região sem destaque; você pode usar isso para pular para a marca de maneira semelhante a C-u C-<SPC>.

E é isso que diz sobre isso no nó Marca de Transiente Desativado :

Desativar [ transient-mark-mode] alterna o Emacs para um modo alternativo de operação:

  • Definir a marca, com comandos como C-<SPC>ou C-x C-x, não destaca a região. Portanto, você não pode saber olhando onde a marca está localizada; você tem que se lembrar.

    A solução usual para esse problema é definir a marca e usá-la em breve, antes de esquecer onde está. Você também pode verificar onde está a marca usandoC-x C-x , que troca as posições do ponto e da marca - consulte Definir marca .

Enquanto o modo Transient Mark estiver desativado, você pode ativá-lo temporariamente usando C-<SPC> C-<SPC>ou C-u C-x C-x.

e:

C-u C-x C-x Troque ponto e marca, ative a marca e ative o modo Transient Mark temporariamente, até que a marca seja desativada em seguida. (Este é o C-x C-xcomando exchange-point-and-mark,, com um argumento de prefixo.)

Desenhou
fonte
8

Eu uso isso quando perdi uma seleção devido a alguma operação que a removeu e quero restaurar a seleção. Um desses cenários seria:

  1. Selecione retângulo.
  2. Mate isso.
  3. Desfazer matando o retângulo.
  4. C-x C-x para restaurar a seleção no retângulo.

Isso acontece quando eu quero fazer um backup ad hoc de uma área selecionada e experimentar a cópia, como, por exemplo, eu quero fazer alguma busca e substituição, mas não consigo pensar em uma maneira de fazer isso. de uma maneira que não destrua algum texto que deveria permanecer, então eu o reverteria mais tarde da cópia.

wvxvw
fonte
8

As outras respostas focam na utilidade de C-x C-xquando transient-mark-modeestá ativo. Mas C-x C-xé anterior transient-mark-modee é útil independentemente disso.

O principal papel de C-x C-xé trocar ponto e marca. Isso é útil quando você está editando dois pontos em um único buffer e, por algum motivo, não deseja dividir a janela atual. Faça alguma edição, ajuste a marca, vá para algum outro ponto do buffer, faça alguma edição C-x C-x, faça alguma edição no local anterior C-x C-x, faça mais algumas edições, nauseam. (Se você não planeja voltar ao segundo ponto, C-u C-SPCpode ser mais intuitivo. Procure o anel de marca no manual do Emacs.)

Quando transient-mark-modeestá desativado, C-x C-xtem outro objetivo importante: permite descobrir onde a região está. C-x C-x, rápido vislumbre no ponto, C-x C-xnovamente.

(E caso você esteja se perguntando - sim, alguns de nós ainda preferem usar o Emacs com transient-mark-modepessoas desabilitadas.)

jch
fonte