Isso responde à sua pergunta geral, mas não particularmente ao caso de uso mencionado (movendo bits de código).
O Emacs agora tem o que chama de região não contígua , que é o tipo de seleção que você está perguntando. O Vanilla Emacs não fornece nenhuma maneira especial de criar uma região não contígua, exceto se for um retângulo . Mas a biblioteca Zones sim.
As zonas da biblioteca permitem definir várias zonas no seu buffer. Uma lista de zonas é uma região não contígua . Você também pode pensar nele como várias regiões, dependendo de como deseja utilizá-lo. Você pode ter várias listas de zonas definidas a qualquer momento, cada uma atribuída a uma variável de zonas diferentes, e pode alternar entre elas.
Se você também usar a biblioteca Bookmark + , poderá salvar as listas de zonas persistentemente e restaurá-las nas sessões posteriores do Emacs. O Marcador + também permite atribuir tags arbitrárias a um marcador. Isso significa que você pode marcar uma lista de zonas.
As zonas em uma determinada lista de zonas geralmente estão no mesmo buffer, mas não precisam estar. Nesse caso, uma lista de zonas é mais geral que uma região não contígua. Também é mais geral, pois cada zona pode conter informações adicionais, além dos limites da zona, e pode ter um identificador.
Existem várias maneiras de criar uma zona. Um dos mais fáceis é usar C-x n a
: define uma zona da região ativa e a adiciona ao conjunto de zonas atual. ( C-x n n
( narrow-to-region
) também faz isso, além de restringir.)
Estas são algumas das ações que você pode fazer com um conjunto (lista) de zonas:
- Classifique-os.
- Unir (unir) zonas adjacentes ou sobrepostas (o que inclui a classificação).
- Intersectá-los.
- Limite o buffer a uma zona da lista. Ciclo entre estreitamentos. Consulte Várias restrições .
- Selecione uma zona na lista como a região ativa. Ciclo entre regiões.
- Pesquise-os (eles são automaticamente unidos primeiro). Para isso, você precisa da biblioteca Isearch + .
- Substitua a consulta sobre eles.
- Destaque e não destaque. (Para isso, você precisa da biblioteca Highlight ou library
facemenu+.el
.
Consulte também Narrow Indirect , que permite criar buffers indiretos que são clones de um determinado buffer e que são limitados a diferentes partes dele.