Efetivamente usando o anel da marca

29

Eu usei a marca para selecionar regiões de um buffer. Por exemplo, eu sei que a sequência C-<space> C-s foopode ser usada para selecionar todo o texto entre o ponto atual e o ponto após uma pesquisa foo.

Descobri recentemente a existência do anel da marca, para que eu possa C-<space> C-<space>deixar uma marca, mover o ponto no buffer e depois C-u C-<space>pular para trás.

Existem sugestões, guias ou dicas para navegar efetivamente usando o anel de marca?

Patrick Steele
fonte
2
Obrigado por fazer a pergunta. Um pensamento que me ocorre é criar uma ligação mais rápida para "adicionar uma marca", por exemplo (global-set-key (kbd "s-m") '(lambda () (interactive) (push-mark))).
1811 Joe Corneli

Respostas:

22

Helm tem uma interface para navegar ambos os mark-anéis locais e globais: helm-all-mark-rings.

Consulte o mini-guia para obter uma breve descrição e uma captura de tela.

E se você preferir Ivy / Swiper / Counsel , consulte counsel-mark-ring.

Davor Cubranic
fonte
Impressionante. Uma coisa que poderia melhorar esta é uma ação para remover a marca do anel de marca ...
Joe Corneli
12

Quando você define set-mark-command-repeat-popcomo tvia

(setq set-mark-command-repeat-pop t)

você pode continuar pressionando C-SPCapós a primeira chamada de C-u C-SPCpara pular para locais anteriores armazenados no anel de marcação.

itsjeyd
fonte
10

Acho mais fácil usar registros para marcar locais: C-x r <space>e depois uma letra para marcar C-x r je uma carta para voltar. Consigo manter várias marcas, muito úteis ao alternar entre vários buffers

Alain
fonte
2
Eu sempre me pego fazendo uma pausa para decidir a melhor carta para atribuir o meu registo para ...
nispio
@nispio Há algum tempo, eu implementei a extensão [email protected]: atykhonov / iregister.el.git Uma das idéias era: permitir pular a decisão de qual registro usar. Pode ser que a extensão não seja útil para você, mas você pode emprestar a idéia de que seu script personalizado poderia usar qualquer registro gratuito e, em seguida, permitirá navegar pelos registros usados ​​e restaurar.
Andriy Tykhonov
9

C-x C-xpara exchange-mark-and-pointtem uso semelhante a C-u C-space. Permite saltar entre um ponto e a última marca. É um pouco estranho para pular transient-mark-mode, pois ativa a marca e seleciona a região.

dgtized
fonte
C-x C-xcom o modo de marca transitória é excelente para selecionar a última coisa que você selecionou (útil no modo iedit) ou arrancou.
Rune Kaagaard
8

Além das outras dicas que você chegou aqui, pensei em mencionar que C-sdefine a marca para você, portanto não há necessidade de fazê-lo explicitamente. Além disso, muitos comandos que "movem um caminho potencialmente longo" ( beginning-of-buffere end-of-bufferpor exemplo) também definem a marca por onde você começou. Juntamente com as outras maneiras de trabalhar com a marca (pop, ponto de troca e marca, etc.), é uma maneira bastante poderosa de trabalhar com um buffer, depois de entender como ele funciona. Observe também que, se você colocar o texto em um buffer, aponte e marque ao redor o texto arrancado.

Mathias Dahl
fonte
5

(Sua pergunta é bastante aberta, portanto, pode ser encerrada por ser principalmente baseada em opiniões.)

O que eu uso: Sincelos multi-comando icicle-goto-marker (vinculado a C-- C-SPC) para contornar as marcas em qualquer buffer ( mark-ring) e icicle-goto-global-marker( C-- C-x C-SPC) para contornar as marcas globais ( global-mark-ring).

As linhas de texto onde os marcadores estão localizados são usadas como candidatos à conclusão. Você pode digitar algum texto (por exemplo, substring, regexp) para restringir os candidatos às linhas correspondentes. Você pode percorrer as linhas correspondentes, visitando as que desejar. Se você também usa a biblioteca crosshairs.el, a posição do marcador que você visita é destacada temporariamente com retículo, para que você possa ver rapidamente onde ele está.

Aqui está parte da sequência de documentos para icicle-goto-marker:

Go to a marker in this buffer, choosing it by the line that includes it.
If `crosshairs.el' is loaded, then the target position is highlighted.

By default, candidates are sorted in marker order, that is, with
respect to their buffer positions.  Use `C-M-,' or `C-,' to change the
sort order.

During completion you can use these keys:

`C-RET'   - Goto marker named by current completion candidate
`C-down'  - Goto marker named by next completion candidate
`C-up'    - Goto marker named by previous completion candidate
`C-next'  - Goto marker named by next apropos-completion candidate
`C-prior' - Goto marker named by previous apropos-completion candidate
`C-end'   - Goto marker named by next prefix-completion candidate
`C-home'  - Goto marker named by previous prefix-completion candidate
`<S-delete>' - Delete marker named by current completion candidate

Use `mouse-2', `RET', or `S-RET' to choose a candidate as the final
destination, or `C-g' to quit.
Desenhou
fonte