Esto responde a su pregunta general, pero no particularmente al caso de uso que menciona (mover partes de código).
Emacs ahora tiene lo que llama una región no contigua , que es el tipo de selección que está preguntando. Vanilla Emacs no proporciona ninguna forma especial de crear una región no contigua, excepto si es un rectángulo . Pero las Zonas de la biblioteca sí.
Library Zones le permite definir múltiples zonas en su búfer. Una lista de zonas es una región no contigua . También puede considerarlo como múltiples regiones, dependiendo de cómo quiera utilizarlo. Puede tener múltiples listas de zonas definidas en cualquier momento, cada una asignada a una variable de zonas diferente, y puede cambiar entre ellas.
Si también usa la biblioteca Bookmark + , puede guardar listas de zonas de forma persistente y restaurarlas en sesiones posteriores de Emacs. Bookmark + también le permite asignar etiquetas arbitrarias a un marcador. Esto significa que puede etiquetar una lista de zonas.
Las zonas en una lista de zonas dada generalmente están en el mismo búfer, pero no es necesario que estén. En esto, una lista de zonas es más general que una región no contigua. También es más general porque cada zona puede contener información adicional, además de los límites de la zona, y puede tener un identificador.
Hay varias formas de crear una zona. Una de las más fáciles de usar C-x n a
es que define una zona de la región activa y la agrega al conjunto de zonas actual. ( C-x n n
( narrow-to-region
) también hace esto, además de reducir).
Estas son algunas de las cosas que puede hacer con un conjunto (lista) de zonas:
- Clasifícalos.
- Unir (fusionar) zonas adyacentes o superpuestas (lo que incluye ordenarlas).
- Entrecruzarlos.
- Limite el búfer a una zona en la lista. Ciclo entre estrechamientos. Ver Estrechamiento múltiple .
- Seleccione una zona en la lista como la región activa. Ciclo entre regiones.
- Búscalos (se unen automáticamente primero). Para esto necesitas la biblioteca Isearch + .
- Consulta-reemplazar sobre ellos.
- Resaltar y resaltarlos. (Para esto necesita biblioteca Highlight o library
facemenu+.el
.
Consulte también Narrow Indirect , que le permite crear buffers indirectos que son clones de un buffer determinado y que se reducen a diferentes partes del mismo.