pages/sphinx/emacs29/doc/build/CapConSecciones/13_MatarMoverTxt.html
tanomarcelo f6ada49344 magit; sphinx GNU/Emacs 29.1
Confirmación (commit) tanomarcelo-git
2024-02-15 22:33:49 -03:00

102 KiB
Raw Blame History

<html class="writer-html5" lang="es" data-content_root="../"> <head> </head>
GNU/Emacs 29.1
Traducción Revisón: 1.17
GNU/Emacs 29.1

13 Matar y Mover Texto

En Emacs, matar significa borrar texto y copiarlo en el anillo de muertes. Desplazar significa traer texto del anillo de destrucción de vuelta al buffer. (Algunas aplicaciones utilizan los términos «cortar» y «pegar» para operaciones similares). El anillo de muertes se llama así porque se puede visualizar como un conjunto de bloques de texto dispuestos en un anillo, al que se puede acceder en orden cíclico. Véase El Anillo de Muertes.

Los comandos kill y yanking son la forma más común de mover o copiar texto dentro de Emacs. Es muy versátil, porque hay comandos para matar muchos tipos diferentes de unidades sintácticas.

13.1 Borrar y Matar

La mayoría de las órdenes que borran texto del búfer lo guardan en el anillo de muertes (ver El Anillo de Muertes). Se conocen como comandos kill, y sus nombres normalmente contienen la palabra kill (por ejemplo, kill-line). El kill ring almacena varios kills recientes, no sólo el último, por lo que matar es una operación muy segura: no tiene que preocuparse mucho por perder texto que haya matado previamente. El anillo de muertes es compartido por todos los buffers, por lo que el texto que es matado en un buffer puede ser arrastrado a otro buffer.

Cuando se usa Ctrl-/ (C-/, undo, deshacer) para deshacer un comando de eliminación (ver Deshacer), el texto eliminado vuelve al búfer, pero no se elimina del anillo de muertes.

En las pantallas gráficas, al matar el texto también se copia en el portapapeles del sistema. Ver Operaciones de «Cortar y Pegar» en Pantallas Gráficas.

Los comandos que borran el texto pero no lo guardan en el anillo de destrucción se conocen como comandos de borrado; sus nombres suelen contener la palabra delete (borrar). Entre ellos se incluyen Ctrl-d (C-d, delete-char) y DEL (DEL, delete-backward-char), que borran sólo un carácter cada vez, y los comandos que borran sólo espacios o nuevas líneas. Los comandos que pueden borrar cantidades significativas de datos no triviales generalmente realizan una operación de borrado.

También puede utilizar el ratón para matar y tirar. Vea Operaciones de «Cortar y Pegar» en Pantallas Gráficas.

13.1.1 Borrado

Borrar significa borrar texto y no guardarlo en el anillo de muertes. En su mayor parte, los comandos de Emacs que borran texto son los que borran sólo un carácter o sólo espacios en blanco.

DEL
BACKSPACE

Borra el carácter anterior, o el texto de la región si está activa (delete-backward-char).

Delete

Borra el siguiente carácter, o el texto de la región si está activa (delete-forward-char).

Ctrl-d (C-d)

Borra el siguiente carácter (delete-char).

Alt-\ (M-\)

Borra los espacios y tabuladores alrededor del punto (delete-horizontal-point).

Alt-SPACE (M-SPC)

Borra los espacios y tabuladores alrededor del punto, dejando un solo espacio (just-one-space).

Ctrl-x Ctrl-o (C-x C-o)

Borra las líneas en blanco alrededor de la línea actual (delete-blank-lines).

Alt-^ (M-^)

Une dos líneas eliminando la nueva línea intermedia, junto con cualquier sangría que la siga (delete-indentation).

Ya hemos descrito los comandos básicos de borrado DEL (delete-backward-char), delete (delete-forward-char) y C-d (delete-char). Véase Borrar Texto. Con un argumento numérico, borran el número especificado de caracteres. Si el argumento numérico se omite o es uno, DEL y delete borran todo el texto de la región si está activa (véase Operar en la Región).

Los otros comandos de borrado son los que borran sólo caracteres de espacio en blanco: espacios, tabuladores y nuevas líneas. M-\ (delete-horizontal-space, borrar-espacio-horizontal) borra todos los espacios y caracteres de tabulación antes y después del punto. Con un argumento de prefijo, sólo borra los espacios y tabuladores antes del punto.

just-one-space (sólo-un-espacio) hace lo mismo pero deja un único espacio antes del punto, independientemente del número de espacios que existieran previamente (incluso si antes no había ninguno). Con un argumento numérico n, deja n espacios antes del punto si n es positivo; si n es negativo, borra las nuevas líneas además de los espacios y tabuladores, dejando -n espacios antes del punto.

El comando cycle-spacing (M-SPC) actúa como una versión más flexible de just-one-space. Realiza diferentes acciones de limpieza de espacio definidas por cycle-spacing-actions, de forma cíclica, si se llama repetidamente en sucesión.

C-x C-o (delete-blank-lines, borrar-líneas-en-blanco) borra todas las líneas en blanco después de la línea actual. Si la línea actual está en blanco, borra también todas las líneas en blanco anteriores a la línea actual (dejando una línea en blanco, la línea actual). En una sola línea en blanco, borra esa línea.

M-^ (delete-indentation, eliminar-indentación) une la línea actual y la línea anterior, suprimiendo una nueva línea y todos los espacios circundantes, dejando normalmente un solo espacio. Véase M-^.

El comando delete-duplicate-lines (borrar-línas-duplicadas) busca en la región líneas idénticas, y elimina todas menos una copia de cada una. Normalmente mantiene la primera instancia de cada línea repetida, pero con un argumento de prefijo Ctrl-u (C-u) mantiene la última. Con un argumento de prefijo Ctrl-u Ctrl-u (C-u C-u), sólo busca líneas idénticas adyacentes. Este es un modo de operación más eficiente, útil cuando las líneas ya han sido ordenadas. Con un argumento de prefijo Ctrl-u Ctrl-u Ctrl-u (C-u C-u C-u), conserva las líneas en blanco repetidas.

13.1.2 Matar por Líneas

Ctrl-k (C-k)

Mata el resto de la línea, o una o más líneas (kill-line).

Ctrl-Shift-BACKSPACE (C-S-backspace)

Mata toda una línea a la vez (kill-whole-line).

El comando kill más sencillo es C-k (kill-line). Si se usa al final de una línea, elimina el carácter de nueva línea con el que termina la línea, fusionando la línea siguiente con la actual (de este modo, se elimina por completo una línea en blanco). De lo contrario, C-k elimina todo el texto desde el punto hasta el final de la línea; si el punto estaba originalmente al principio de la línea, la deja en blanco.

Los espacios y tabuladores al final de la línea se ignoran al decidir qué caso se aplica. Siempre que el punto esté después del último carácter de la línea que no sea un espacio en blanco, puede estar seguro de que C-k eliminará la nueva línea. Para eliminar toda una línea que no esté en blanco, vaya al principio y escriba C-k dos veces.

En este contexto, «línea» significa una línea de texto lógica, no una línea de pantalla (ver Líneas de Continuación).

Cuando a C-k se le da un argumento positivo n, elimina n líneas y las nuevas líneas que las siguen (el texto en la línea actual antes del punto no se elimina). Con un argumento negativo -n, elimina n líneas anteriores a la línea actual, junto con el texto de la línea actual anterior al punto. C-k con un argumento cero elimina el texto anterior al punto en la línea actual.

Si la variable kill-whole-line es distinta de nil, C-k al principio de una línea elimina toda la línea, incluida la nueva línea siguiente. Esta variable es normalmente nula.

C-S-backspace (kill-whole-line) elimina una línea completa incluyendo su nueva línea, independientemente de la posición del punto dentro de la línea. Tenga en cuenta que muchos terminales de texto le impedirán escribir la secuencia de teclas C-S-backspace.

13.1.3 Otros Comandos de Muerte

Ctrl-w (C-w)

Mata la región (kill-region).

Alt-w (M-w)

Copia la región dentro del anillo de muertes (kill-ring-save).

Alt-d (M-d)

Mata la siguiente palara (kill-word).

Alt-BACKSPACE (M-Del)

Mata una palabra hacia atrás (backward-kill-word).

Ctrl-x BACKSPACE (C-x DEL)

Mata hasta el principio de la frase (backward-kill-sentence). Vea Sentencias.

Alt-k (M-k)

Mata al final de la frase (kill-sentence).

Ctrl-Alt-k (C-M-k)

Mata la siguiente expresión equilibrada (kill-sexp). Véase Expresiones con Paréntesis Equilibrados.

Alt-z caracter (M-z caracter)

Mata hasta la siguiente aparición de caracter (zap-to-char).

Alt-x zap-up-to-char caracter (M-x zap-up-to-char caracter)

Mata hasta, pero sin incluir, la siguiente aparición de caracter.

Uno de los comandos de eliminación más usados es C-w (kill-region), que elimina el texto de la región (véase La Marca y la Región). Del mismo modo, M-w (kill-ring-save) copia el texto de la región en el anillo de muertes sin eliminarlo del búfer. Si la marca está inactiva cuando teclea Ctrl-w (C-w) o Alt-w (M-w), el comando actúa sobre el texto entre el punto y donde puso la marca por última vez (ver Operar Sobre la Región).

Emacs también proporciona comandos para matar unidades sintácticas específicas: palabras, con M-DEL y M-d (vea Palabras); expresiones compuestas, con C-M-k (vea Expresiones con paréntesis balanceados); y frases, con C-x DEL y M-k (vea Frases).

El comando M-z (zap-to-char) combina matar con buscar: lee un carácter y mata desde el punto hasta (e incluyendo) la siguiente aparición de ese carácter en el buffer. Un argumento numérico actúa como contador de repeticiones; un argumento negativo significa buscar hacia atrás y matar el texto anterior al punto. Se mantiene un historial de los caracteres usados anteriormente, al que se puede acceder mediante las teclas Alt-p / Alt-n (M-p/M-n). Esto es útil sobre todo si el carácter que se va a utilizar tiene que introducirse mediante un método de entrada complicado. Un comando similar zap-up-to-char mata desde el punto hasta, pero sin incluir, la siguiente aparición de un carácter, con un argumento numérico que actúa como contador de repeticiones.

13.1.4 Opciones de Matado

Algunos buffers especializados contienen texto de sólo lectura, que no puede ser modificado y por lo tanto no puede ser eliminado. Los comandos kill funcionan de forma especial en un buffer de sólo lectura: se mueven sobre el texto y lo copian al anillo kill, sin borrarlo realmente del buffer. Normalmente, también pitan y muestran un mensaje de error cuando esto ocurre. Pero si establece la variable kill-read-only-ok a un valor no nulo, sólo imprimen un mensaje en el área de eco para explicar por qué el texto no ha sido borrado.

Antes de guardar el kill en el anillo kill, puedes transformar la cadena usando kill-transform-function. Se llama con la cadena a matar, y debería devolver la cadena que quiere que se guarde. También puede devolver nil, en cuyo caso la cadena no se guardará en el anillo de destrucción. Por ejemplo, si nunca quiere guardar una cadena con espacio en blanco puro en el anillo de muerte, puede decir:

(setq kill-transform-function
   (lambda (string)
     (and (not (string-blank-p string))
          string)))

Si cambia la variable kill-do-not-save-duplicates a un valor no nulo, las muertes subsiguientes idénticas producen una única entrada de kill-ring, sin duplicación.

13.2 Tirar de un Texto

yanking significa reinsertar un texto previamente eliminado. La forma habitual de mover o copiar un texto es eliminarlo y arrastrarlo a otro lugar.

Ctrl-y (C-y)

Tira (jala) en el punto de la última muerte en el búfer (yank).

Alt-y (M-y)

Puede sustituir el texto que acaba de eliminar por un lote anterior de texto eliminado (yank-pop), o permitir seleccionar de la lista de lotes de texto eliminados anteriormente. Véase Retirar Textos Eliminados Anteriormente.

Ctrl-Alt-w (C-M-w)

Hace que la siguiente orden, si es una orden de destrucción, se añada a la destrucción anterior (append-next-kill). Véase Añadir Muertes.

El comando básico de yanking es C-y (yank). Inserta la muerte más reciente, dejando el cursor al final del texto insertado. También coloca la marca al principio del texto insertado, sin activar la marca; esto le permite saltar fácilmente a esa posición, si lo desea, con Ctrl-u Ctrl-SPACE (C-u C-SPC) (véase El Anillo de Marcas).

Con un argumento de prefijo simple (C-u C-y), el comando deja el cursor delante del texto insertado y activa la marca al final. El uso de cualquier otro argumento prefijo especifica una marca anterior; por ejemplo, Ctrl-u 4 Ctrl-y (C-u 4 C-y) reinserta la cuarta marca más reciente. Véase Eliminación de Muertes Anteriores.

En las pantallas gráficas y en las pantallas con modo texto, C-y comprueba primero si otra aplicación ha colocado algún texto en el portapapeles del sistema más recientemente que la última vez que Emacs lo mató. Si es así, inserta el texto del portapapeles en su lugar. Así, Emacs trata efectivamente las operaciones de «cortar» o «copiar» del portapapeles realizadas en otras aplicaciones como muertes de Emacs, excepto que no se registran en el anillo de muertes. Ver Operaciones «Cortar y Pegar» en Pantallas Gráficas, para más detalles.

13.2.1 Anillo de Muerte

El kill ring (anillo de muertes) es una lista de bloques de texto que han sido eliminados previamente. Sólo hay un kill ring, compartido por todos los buffers, por lo que puede matar texto en un buffer y arrancarlo en otro buffer. Esta es la forma habitual de mover texto de un búfer a otro. (Hay otros métodos: por ejemplo, puede almacenar el texto en un registro; vea Registros. Vea Acumulando Texto, para algunas otras formas de mover texto).

El número máximo de entradas en el kill ring se controla mediante la variable kill-ring-max. Por defecto es 120. Si hace un nuevo kill (si mata texto) cuando se ha alcanzado este límite, Emacs hace espacio borrando la entrada más antigua en el kill ring (en el anillo de muertes).

El contenido actual del anillo de destrucción se almacena en una variable llamada kill-ring; puede ver el contenido completo del anillo de destrucción con Ctrl-h v kill-ring (C-h v kill-ring).

13.2.2 Borrar Muertes Anteriores

Como se explica en Yanking, puede usar un argumento numérico a C-y para sacar texto que ya no es la muerte más reciente. Esto es útil si recuerda qué entrada del anillo de muertes quiere. Si no, puede usar el comando M-y (yank-pop) para recorrer las posibilidades o seleccionar uno de las muertes anteriores.

Si el comando anterior era un comando yank, M-y toma el texto que fue yankado (que fue empujado al anillo de muertes) y lo reemplaza con el texto de un kill (de una muerte) anterior. Así, para recuperar el texto de la penúltima muerte, primero use C-y para arrancar la última muerte, y luego use M-y para reemplazarlo con la muerte anterior. Esto sólo funciona después de un C-y u otro M-y. (Si M-y se invoca después de algún otro comando, funciona de forma diferente, ver más abajo).

Puede entender el modo de funcionamiento de M-y en términos de un puntero al último tirón (lo último que se ha llevado al anillo de muertes) que apunta a una entrada en el dicho anillo. Cada vez que se mata, el puntero del último tirón se mueve a la entrada recién hecha en la parte delantera del anillo. C-y elimina la entrada a la que apunta el puntero del último tirón. M-y después de un C-y u otro M-y mueve el puntero del último yank (tirón) a la entrada anterior, y el texto en el buffer cambia para coincidir. Suficientes comandos M-y uno tras otro pueden mover el puntero a cualquier entrada en el anillo, por lo que puede obtener cualquier entrada en el buffer. Finalmente, el puntero llega al final del anillo; el siguiente M-y vuelve a la primera entrada.

M-y mueve el puntero de la última entrada en el anillo, pero no cambia el orden de las entradas en él, que siempre va desde la muerte más reciente al principio hasta la más antigua que aún se recuerde.

Cuando se utiliza después de C-y o M-y, M-y puede recibir un argumento numérico, que le indica cuántas entradas debe avanzar el puntero del último yank. Un argumento negativo mueve el puntero hacia el frente del anillo; desde el frente del anillo, se mueve alrededor de la última entrada y continúa hacia adelante desde allí.

Una vez que el texto que está buscando es traído al buffer, puede dejar de hacer comandos M-y y el último texto jalado permanecerá allí. Es sólo una copia de la entrada del anillo de matar, por lo que editarlo en el buffer no cambia lo que hay en el anillo. Mientras no se realice una nueva muerte, el puntero de la última permanece en el mismo lugar en el anillo de muerte, por lo que repetir C-y arrancará (jalará, tirará) otra copia de la misma muerte anterior.

Cuando se llama a C-y con un argumento numérico, también se establece el puntero del último tirón a la entrada que se tira.

También puede invocar M-y después de un comando que no sea un comando yank. En ese caso, M-y le pregunta en el minibuffer por uno de las muertes anteriores. Puede usar los comandos de historial del minibuffer (ver Historial del Minibuffer) para navegar o buscar entre las entradas del anillo de muertes hasta que encuentre la que desea reinsertar. O puede usar los comandos de completado (ver Comandos de Completado) para completar una entrada de la lista de entradas del anillo de muerte o hacer aparecer el buffer Completions (Completado) con las entradas candidatas entre las que puede elegir. Después de seleccionar la entrada del anillo de muerte, puede editarla opcionalmente en el minibuffer. Por último, escriba RETURN (RET) para salir del minibuffer e insertar el texto del anillo de muerte seleccionado. Como en el caso de M-y después de otro comando yank, el puntero del último yank (tirón) queda apuntando al texto que acaba de extraer o jalar, ya sea uno de las muertes anteriores o una entrada del anillo de muerte que editó antes de insertarlo. (En este último caso, la entrada editada se añade al principio del kill-ring). Así que aquí, también, tecleando C-y sacará otra copia del texto que acaba de insertar.

Cuando se invoca con un argumento de prefijo simple Ctrl-u Alt-y (C-u M-y) después de un comando que no es un comando yank, M-y deja el cursor delante del texto insertado, y pone la marca al final, como hace C-y.

13.2.3 Añadir Muertes

Normalmente, cada orden de destrucción introduce una nueva entrada en el anillo de muertes. Sin embargo, dos o más órdenes de matar seguidas combinan su texto en una sola entrada, de forma que una sola Ctrl-y (C-y) arranca todo el texto como una unidad, tal y como estaba antes de ser matado.

Por lo tanto, si quiere matar el texto como una unidad, no es necesario que lo mate todo de una sola vez; puede seguir matando línea tras línea, o palabra tras palabra, hasta que lo haya matado todo, y aún podrá recuperarlo todo de una sola vez.

Los comandos que matan hacia delante desde un punto añaden texto al final del texto matado anteriormente. Los comandos que matan hacia atrás desde el punto añaden texto al principio. De esta forma, cualquier secuencia de comandos de eliminación hacia delante y hacia atrás pone todo el texto eliminado en una sola entrada sin reordenar. Los argumentos numéricos no rompen la secuencia de eliminación. Por ejemplo, supongamos que el buffer contiene este texto:

Esta es una línea de texto de ejemplo.

con el punto mostrado por . Si escribe Alt-d Alt-BACKSPACE Alt-d Alt-BACKSPACE (M-d M-DEL M-d M-DEL), matando alternativamente hacia adelante y hacia atrás, terminará con una línea de ejemplo como una entrada en el anillo de matar, y Esto es texto. en el buffer. (Observe el doble espacio entre es y texto, que puede limpiar con Alt-SPACE (M-SPC) o Alt-q (M-q)).

Otra forma de matar el mismo texto es retroceder dos palabras con Alt-b Alt-b (M-b M-b), y luego matar las cuatro palabras hacia adelante con Ctrl-u Alt-d (C-u M-d). Esto produce exactamente los mismos resultados en el buffer y en el kill ring. Alt-f Alt-f Ctrl-u Alt-BACKSPACE (M-f M-f C-u M-DEL) mata el mismo texto, yendo todo hacia atrás; una vez más, el resultado es el mismo. El texto en la entrada del kill ring siempre tiene el mismo orden que tenía en el buffer antes de que lo matara.

Si una orden de matar está separada de la última orden de matar por otras órdenes (no sólo argumentos numéricos), inicia una nueva entrada en el anillo de muertes. Pero puede forzarla a combinarse con el último texto matado, tecleando justo antes Ctrl-Alt-w (C-M-w, append-next-kill). C-M-w le dice al comando que le sigue, si es un comando de eliminación, que trate la eliminación como parte de la secuencia de eliminaciones anteriores. Como de costumbre, la orden de matar se añade al texto matado anteriormente si la orden mata hacia delante, y se antepone si la orden mata hacia atrás. De este modo, puede matar varios trozos de texto separados y acumularlos para volver a arrancarlos en un solo lugar.

Un comando de matar que sigue a M-w (kill-ring-save) no se añade al texto que M-w copió en el anillo de muertes.

13.3 Operaciones de «cortar y pegar» en Entornos Gráficos de Escritorio

En la mayoría de los entornos gráficos de escritorio, puede transferir datos (normalmente texto) entre diferentes aplicaciones utilizando una función del sistema llamada portapapeles. En X, existen otras dos facilidades similares: la selección primaria y la selección secundaria. Cuando Emacs se ejecuta en una pantalla gráfica, sus comandos kill y yank se integran con estas facilidades, de modo que puedes transferir texto fácilmente entre Emacs y otras aplicaciones gráficas.

Por defecto, Emacs usa UTF-8 como sistema de codificación para las transferencias de texto entre programas. Si encuentra que el texto pegado no es lo que esperaba, puede especificar otro sistema de codificación tecleando Ctrl-x RETURN x (C-x RET x) o Ctrl-x RETURN X (C-x RET X). También puede solicitar un tipo de datos diferente personalizando x-select-request-type. Véase Sistemas de Codificación para la Comunicación entre Procesos.

13.3.1 Utilizar el Portapapeles

El portapapeles es la herramienta que la mayoría de las aplicaciones gráficas utilizan para «cortar y pegar». Cuando el portapapeles existe, los comandos kill y yank de Emacs hacen uso de él.

Cuando mata algún texto con un comando como C-w (kill-region), o lo copia al anillo de la muerte con un comando como M-w (kill-ring-save), ese texto también se pone en el portapapeles.

Cuando un comando kill de Emacs pone texto en el portapapeles, normalmente se pierde el contenido del portapapeles existente. Opcionalmente, Emacs puede guardar el contenido existente del portapapeles en el kill ring (anillo de muertes), evitando que pierda los datos anteriores del portapapeles. Si save-interprogram-paste-before-kill se ha establecido en un número, entonces los datos se copian si son más pequeños (en caracteres) que este número. Si esta variable tiene cualquier otro valor que no sea nulo, los datos se copian siempre, con el riesgo de un alto consumo de memoria si los datos resultan ser grandes.

Los comandos Yank, como C-y (yank), también usan el portapapeles. Si otra aplicación «posee» el portapapeles, es decir, si cortó o copió texto allí más recientemente que su último comando de eliminación en Emacs, entonces lo elimina del portapapeles en lugar del anillo de muertes.

Normalmente, girar el anillo de muertes con M-y (yank-pop) no altera el portapapeles. Sin embargo, si cambia yank-pop-change-selection a t, entonces M-y guarda el nuevo yank en el portapapeles.

Para evitar que los comandos kill y yank accedan al portapapeles, cambie la variable select-enable-clipboard a nil.

Los programas pueden poner en el portapapeles otras cosas además de texto plano. Por ejemplo, un navegador web normalmente le permitirá elegir «Copiar imagen» en las imágenes, y esta imagen se pondrá en el portapapeles. En plataformas capaces, Emacs puede extraer estos objetos con el comando yank-media, pero sólo en modos que lo soporten (ver Tirando de Medios en el Manual de Referencia de Emacs Lisp).

Muchos entornos de escritorio X soportan una característica llamada gestor del portapapeles. Si sale de Emacs mientras es el actual «propietario» de los datos del portapapeles, y hay un gestor de portapapeles en ejecución, Emacs transfiere los datos del portapapeles al gestor de portapapeles para que no se pierdan. En algunas circunstancias, esto puede causar un retraso al salir del Editor; si desea evitar que Emacs transfiera datos al gestor del portapapeles, cambie la variable x-select-enable-clipboard-manager a nil.

Dado que las cadenas que contienen bytes NUL suelen truncarse al pasarlas por el portapapeles, Emacs sustituye dichos caracteres por «0» antes de transferirlos al portapapeles del sistema.

Antes de Emacs 24, los comandos kill y yank usaban la selección primaria (ver Cortar y Pegar con Otras Aplicaciones de Ventana), no el portapapeles. Si prefiere este comportamiento, cambie select-enable-clipboard a nil, select-enable-primary a t, y mouse-drag-copy-region a t. En este caso, puede usar los siguientes comandos para actuar explícitamente sobre el portapapeles: clipboard-kill-region mata la región y la guarda en el portapapeles; clipboard-kill-ring-save copia la región al anillo de muertes y la guarda en el portapapeles; y clipboard-yank tira del contenido del portapapeles en el punto.

13.3.2 Cortar y Pegar con Otras Aplicaciones de Ventana

Bajo el Sistema X Window, PGTK y Haiku, existe una selección primaria que contiene el último tramo de texto seleccionado en una aplicación X (normalmente arrastrando el ratón). Normalmente, este texto puede insertarse en otras aplicaciones X mediante 2 clics del ratón. La selección primaria está separada del portapapeles. Su contenido es más frágil; se sobrescribe cada vez que se selecciona texto con el ratón, mientras que el portapapeles sólo se sobrescribe mediante comandos explícitos de cortar o copiar.

En X, siempre que la región esté activa (véase La Marca y la Región), el texto de la región se guarda en la selección primaria. Esto se aplica independientemente de si la región se hizo arrastrando o haciendo clic con el ratón (véase Comandos del Ratón para Editar), o mediante comandos del teclado (por ejemplo, escribiendo Ctrl-SPACE (C-SPC) y moviendo el punto; véase Establecer la Marca).

Si cambia la variable select-active-regions a only, Emacs guarda sólo las regiones temporalmente activas en la selección primaria, es decir, aquellas hechas con el ratón o con shift selection (ver Selección mediante shift). Si cambia select-active-regions a nil, Emacs evita guardar regiones activas en la selección primaria por completo.

Para insertar la selección primaria en un buffer de Emacs, haga clic con mouse-2 (mouse-yank-primary) donde quiera insertarla. Vea Comandos del Ratón para Editar. También puede usar el comando yank normal de Emacs (C-y) para insertar este texto si select-enable-primary está activado (vea Usando el Portapapeles).

Por defecto, Emacs mantiene la región activa incluso después de que se seleccione texto en otro programa; esto es contrario al comportamiento típico de X. Para hacer que Emacs desactive la región después de que otro programa coloque datos en la selección primaria, active el modo menor global lost-selection-mode.

MS-Windows no proporciona selección primaria, pero Emacs la emula dentro de una única sesión de Emacs almacenando internamente el texto seleccionado. Por lo tanto, todas las características y comandos relacionados con la selección primaria funcionan en Windows como lo hacen en X, para cortar y pegar dentro de la misma sesión, pero no entre sesiones de Emacs o con otras aplicaciones.

13.3.3 Selección Secundaria

Además de la selección primaria, el Sistema X Window proporciona una segunda facilidad similar conocida como selección secundaria. Hoy en día, pocas aplicaciones X hacen uso de la selección secundaria, pero puede acceder a ella usando los siguientes comandos de Emacs:

Establezca la selección secundaria, con un extremo en el lugar donde presiona el botón, y el otro extremo en el lugar donde lo suelta (mouse-set-secondary). El texto seleccionado se resalta, usando la cara de selección secundaria, a medida que lo arrastra. La ventana se desplaza automáticamente si arrastra el ratón fuera de la parte superior o inferior de la ventana, igual que mouse-set-region (ver Comandos del Ratón para Editar).

Este comando no altera el anillo de muertes.

Alt-arrastrar-ratón1 (M-arrastrar-ratón-1)

Establece la selección secundaria, con un extremo en el lugar donde se pulsa el botón, y el otro extremo en el lugar donde se suelta (mouse-set-secondary). El texto seleccionado se resalta, usando la cara de selección secundaria, a medida que lo arrastra. La ventana se desplaza automáticamente si arrastra el ratón fuera de la parte superior o inferior de la ventana, igual que mouse-set-region (ver Comandos del Ratón para Editar).

Este comando no altera el anillo de muertes.

Alt-ratón-1 (M-ratón-1)

Establece un extremo para la selección secundaria (mouse-start-secondary); use M-ratón-3 para establecer el otro extremo y completar la selección. Este comando cancela cualquier selección secundaria existente, cuando inicia una nueva.

Alt-ratón-3 (M-ratón-3)

Coloca la selección secundaria (mouse-secondary-save-then-kill), con un extremo en la posición en la que pulsó M-ratón-3, y el otro en la posición especificada previamente con M-ratón-1. Esto también pone el texto seleccionado en el anillo de muertes. Un segundo M-ratón-3 en el mismo lugar mata el texto seleccionado por la selección secundaria que se acaba de hacer.

Alt-ratón-2 (M-ratón-2)

Inserta la selección secundaria donde has hecho clic, colocando el punto al final del texto arrancado (mouse-yank-secondary).

El doble o triple clic de M-ratón-1 opera sobre palabras y líneas, de forma similar a M-ratón-1.

Si mouse-yank-at-point es distinto de cero, M-mouse-2 hace clic en el punto. Entonces no importa exactamente dónde haga clic, o incluso en cuál de las ventanas del marco haga clic. Ver Comandos del Ratón para Editar. Esta opción de usuario también afecta a la búsqueda interactiva: si no es nula, al pulsar con el ratón en cualquier parte del marco se añadirá el texto a la cadena de búsqueda.

13.4 Acumular Texto

Normalmente copiamos o movemos texto matándolo y tirando de él, pero hay otros métodos convenientes para copiar un bloque de texto en muchos lugares, o para copiar muchos bloques de texto dispersos en un solo lugar. Aquí describimos los comandos para acumular trozos de texto dispersos en un buffer o en un fichero.

Alt-x append-to-buffer (M-x append-to-buffer)

Añade una región al contenido de un búfer especificado.

Alt-x preprend-to-buffer (M-x preprend-to-buffer)

Antepone una región al contenido de un búfer especificado.

Alt-x copy-to-buffer (M-x copy-to-buffer)

Copia la región en un búfer especificado, borrando el contenido antiguo de ese búfer.

Alt-x insert-buffer (M-x insert-buffer)

Inserta el contenido de un búfer especificado en el búfer actual en un punto.

Alt-x append-to-file (M-x append-to-file)

Añade una región al contenido de un archivo especificado, al final.

Para acumular texto en un búfer, utilice M-x append-to-buffer. Esto lee un nombre de búfer y luego inserta una copia de la región en el búfer especificado. Si especifica un búfer inexistente, append-to-buffer crea el búfer. El texto se inserta en cualquier punto de ese búfer. Si ha estado utilizando el búfer para editar, el texto copiado se inserta en el centro del texto del búfer, comenzando donde se encuentre el punto en ese momento.

El punto de ese búfer queda al final del texto copiado, de modo que los usos sucesivos de anexar al búfer acumulan el texto en el búfer especificado en el mismo orden en que fueron copiados. Estrictamente hablando, append-to-buffer no siempre añade texto al que ya está en el búfer; sólo lo añade si el punto de ese búfer está al final. Sin embargo, si append-to-buffer es el único comando que usa para alterar un buffer, entonces el punto siempre está al final.

M-x prepend-to-buffer es igual que append-to-buffer excepto en que el punto en el otro buffer se deja antes del texto copiado, de modo que los usos sucesivos de este comando añaden texto en orden inverso. M-x copy-to-buffer es similar, excepto en que cualquier texto existente en el otro buffer se borra, por lo que el buffer queda conteniendo sólo el texto recién copiado en él.

El comando Ctrl-x x i (C-x x i, insertar-buffer) se puede usar para recuperar el texto acumulado en otro buffer. Este comando pide el nombre de un búfer e inserta una copia de todo el texto de ese búfer en el búfer actual en el punto, dejando el punto al principio del texto insertado. También añade la posición del final del texto insertado al anillo de marca, sin activar la marca. Para más información sobre los buffers, véase Utilización de Búferes Múltiples.

En lugar de acumular texto en un búfer, puede añadir texto directamente a un archivo con M-x append-to-file. Esto solicita un nombre de archivo y añade el texto de la región al final del archivo especificado. El archivo se modifica inmediatamente en el disco.

Debería usar append-to-file sólo con ficheros que no estén siendo visitados en Emacs. Usarlo en un fichero que está editando en Emacs cambiaría el fichero a espaldas de Emacs, lo que puede llevar a perder parte de su edición.

Otra forma de mover texto es almacenarlo en un registro. Ver Registros.

13.5 Rectángulos

Los comandos de rectángulo operan sobre áreas rectangulares del texto: todos los caracteres entre un cierto par de columnas, en un cierto rango de líneas. Emacs tiene comandos para matar y tirar de rectángulos, vaciarlos, rellenarlos con espacios en blanco o texto, o borrarlos. Los comandos de rectángulo son útiles con texto en formatos de varias columnas, y para cambiar el texto dentro o fuera de tales formatos.

Para especificar un rectángulo para un comando, ponga la marca en una esquina y apunte a la esquina opuesta. El rectángulo así especificado se denomina región rectangular (region-rectangle). Si el punto y la marca están en la misma columna, el rectángulo regional estará vacío. Si están en la misma línea, la región rectángular tiene una línea de altura.

La región rectangular se controla del mismo modo que la región. Pero recuerde que una combinación dada de valores de punto y marca puede interpretarse como una región o como un rectángulo, dependiendo del comando que los utilice.

Una región rectangular también puede marcarse con el ratón: haga clic y arrastre C-Mouse-1 desde una esquina del rectángulo a la opuesta.

Ctrl-x rk (C-x r k)

Mata el texto del rectángulo-región, guardando su contenido como el último rectángulo matado (kill-rectangle).

Ctrl-x r Alt-w (C-x r M-w)

Guarda el texto del rectángulo-región como el último rectángulo matado (copy-rectangle-as-kill).

Ctrl-x rd (C-x r d)

Borra el texto de la región-rectángulo (delete-rectangle).

Ctrl-x r y (C-x r y)

Tira del último rectángulo matado con su esquina superior izquierda en el punto (yank-rectangle).

Ctrl-x r o (C-x r o)

Inserta un espacio en blanco para rellenar el espacio del rectángulo-región (open-rectangle). Esto empuja el contenido anterior del rectángulo de región hacia la derecha.

Ctrl-x rN (C-x r N)

Inserta números de línea a lo largo del borde izquierdo del rectángulo-región (rectangle-number-lines). Esto empuja el contenido anterior del rectángulo-región hacia la derecha.

Ctrl-x rc (C-x r c)

Borra el rectángulo-región sustituyendo todo su contenido por espacios (clear-rectangle).

Alt-x delete-whitespace-rectangle (M-x delete-whitespace-rectangle)

Elimina los espacios en blanco de cada una de las líneas del rectángulo especificado, empezando por la columna del borde izquierdo del rectángulo.

Ctrl-x r t cadena RETURN (C-x r t cadena RET)

Sustituye el contenido del rectángulo por una cadena en cada línea (string-rectangle).

Alt-x string-insert-rectangle RETURN cadena RETURN
(M-x string-insert-rectangle RET cadena RET)

Inserta una cadena en cada línea del rectángulo.

Ctrl-x SPACE (C-x SPC)

Activa el modo de marca de rectángulo (rectangle-mark-mode). Cuando este modo está activo, el rectángulo de la región se resalta y se puede encoger/agrandar, y los comandos estándar kill y yank operan sobre él.

Las operaciones con rectángulos se dividen en dos clases: comandos para borrar o insertar rectángulos, y comandos para hacer rectángulos en blanco.

Hay dos formas de borrar el texto de un rectángulo: C-x r d (delete-rectangle) para borrar el texto completamente, o C-x r k (kill-rectangle) para eliminar el texto y guardarlo como el último rectángulo eliminado. En ambos casos, borrar la región rectangular (región-rectángulo) es como borrar el texto especificado en cada línea del rectángulo; si hay algún texto siguiente en la línea, se mueve hacia atrás para rellenar el hueco.

Matar un rectángulo no es matar en el sentido habitual; el rectángulo no se almacena en el anillo de muertes, sino en un lugar especial que sólo registra el rectángulo matado más reciente. Esto se debe a que «yankear» un rectángulo (tirar o jalar de un rectángulo) es tan diferente de «yankear» un texto lineal que hay que utilizar diferentes comandos de «yankear». El «yank-popping» no está definido para los rectángulos.

Ctrl-x r Alt-w (C-x r M-w, copy-rectangle-as-kill) es el equivalente de M-w para rectángulos: registra el rectángulo como el último rectángulo eliminado, sin borrar el texto del búfer.

Para borrar el último rectángulo eliminado, escriba Ctrl-x ry (C-x r y, yank-rectangle). La primera línea del rectángulo se inserta en el punto, la segunda línea del rectángulo se inserta en la misma posición horizontal una línea verticalmente por debajo, y así sucesivamente. El número de líneas afectadas viene determinado por la altura del rectángulo guardado.

Por ejemplo, puede convertir dos listas de una columna en una lista de dos columnas matando una de las listas de una columna como un rectángulo y, a continuación, desplazándola al lado de la otra lista.

También puede copiar rectángulos dentro y fuera de registros con Ctrl-x rrr (C-x r r r) y Ctrl-x rir (C-x r i r). Consulte Guardar Rectángulos en Registros.

Hay dos comandos que puede usar para hacer rectángulos en blanco: Ctrl-x rc (C-x r c, clear-rectangle) borra el texto existente en el rectángulo-región, y Ctrl-x ro (C-x r o, open-rectangle) inserta un rectángulo en blanco.

M-x delete-whitespace-rectangle elimina los espacios en blanco horizontales a partir de una columna determinada. Esto se aplica a cada una de las líneas del rectángulo, y la columna viene especificada por el borde izquierdo del rectángulo. El borde derecho del rectángulo no afecta a este comando.

El comando Ctrl-x rN (C-x r N, rectangle-number-lines) inserta números de línea a lo largo del borde izquierdo del rectángulo-región. Normalmente, la numeración comienza a partir de 1 (para la primera línea del rectángulo). Con un argumento prefijo, el comando pide un número a partir del cual empezar, y una cadena de formato con la que imprimir los números (ver Formato de Cadenas en el Manual de Referencia de Emacs Lisp).

El comando Ctrl-x r t (C-x r t, string-rectangle) reemplaza el contenido de una región-rectángulo con una cadena en cada línea. No es necesario que la anchura de la cadena sea la misma que la del rectángulo. Si la anchura de la cadena es menor, el texto después del rectángulo se desplaza a la izquierda; si la cadena es mayor que el rectángulo, el texto después del rectángulo se desplaza a la derecha.

El comando M-x string-insert-rectangle es similar a string-rectangle, pero inserta la cadena en cada línea, desplazando el texto original a la derecha.

El comando Ctrl-x SPACE (C-x SPC, rectangle-mark-mode) alterna si se resalta la región-rectángulo o la región estándar (activando primero la región si es necesario). Cuando este modo está activado, los comandos que redimensionan la región (C-f, C-n, etc.) lo hacen de forma rectangular, y matar y desplazar operan sobre el rectángulo. Véase Matar y Mover Texto. El modo persiste sólo mientras la región está activa.

El rectángulo de la región sólo funciona cuando la marca está activa. En particular, cuando el modo Marca transitoria está desactivado (véase Desactivar el Modo Marca Transitoria), además de teclear Ctrl-x SPACE deberá activar la marca.

A diferencia de la región estándar, la región-rectángulo puede tener sus esquinas extendidas más allá del final del búfer, o dentro de tramos de espacio en blanco en los que normalmente no puede entrar el punto, como en medio de un carácter TAB.

Cuando la región está activa (véase La Marca y la Región) y en modo región rectangular (rectangle-mark-mode), C-x C-x ejecuta el comando rectangle-exchange-point-and-mark, que realiza un ciclo entre las cuatro esquinas del rectángulo-región. Esto resulta útil si desea modificar las dimensiones de dicha región antes de invocar una operación sobre el texto marcado.

13.6 Enlaces CUA

El comando M-x cua-mode configura las combinaciones de teclas que son compatibles con el sistema de Acceso Común de Usuario (CUA) usado en muchas otras aplicaciones.

Cuando el modo CUA está activado, las teclas Ctrl-x (C-x), Ctrl-c (C-c), Ctrl-v (C-v) y Ctrl-z (C-z) invocan comandos que cortan (kill), copian, pegan (yank) y deshacen (undo) respectivamente. Las teclas Ctrl-x (C-x) y Ctrl-c (C-c) ejecutan cortar y copiar sólo si la región está activa. De lo contrario, siguen actuando como teclas de prefijo, de modo que los comandos estándar de Emacs como Ctrl-x Ctrl-c (C-x C-c) siguen funcionando. Tenga en cuenta que esto significa que la variable mark-even-if-inactive no tiene efecto para C-x y C-c (vea Operando en la Región).

Para introducir un comando Emacs como Ctrl-x Ctrl-f (C-x C-f) mientras la marca está activa, use uno de los siguientes métodos: mantenga pulsada la tecla Mayúscula (Shift) junto con la tecla del prefijo, por ejemplo, Shift-Ctrl-x Ctrl-f (S-C-x C-f), o teclee rápidamente la tecla del prefijo dos veces, por ejemplo, Ctrl-x Ctrl-x Ctrl-f (C-x C-x C-f).

Para desactivar la anulación de la vinculación estándar de Emacs por el modo CUA, manteniendo las otras características del modo CUA descritas a continuación, establezca la variable cua-enable-cua-keys a nil.

El modo CUA activa por defecto el modo Borrar-Selección (Delete-Selection mode) (véase Comandos del Ratón para Editar), de forma que el texto escrito sustituye a la región activa. Para utilizar CUA sin este comportamiento, establezca la variable cua-delete-selection en nil.

El modo CUA proporciona soporte mejorado para rectángulos con resaltado de rectángulo visible. Utilice Ctrl-RETURN (C-RET) para iniciar un rectángulo, extenderlo utilizando los comandos de movimiento, y cortarlo o copiarlo utilizando C-x o C-c. RET mueve el cursor a la siguiente esquina (en el sentido de las agujas del reloj) del rectángulo, para que pueda ampliarlo fácilmente en cualquier dirección. El texto normal que escriba se inserta a la izquierda o a la derecha de cada línea del rectángulo (en el mismo lado que el cursor).

Puede utilizar este soporte de rectángulo sin activar CUA llamando al comando cua-rectangle-mark-mode. También existe el comando estándar rectangle-mark-mode, véase Rectángulos.

Con CUA puede copiar fácilmente texto y rectángulos dentro y fuera de los registros proporcionando un prefijo numérico de un dígito a los comandos kill, copy y yank, por ejemplo, Ctrl-1 Ctrl-c (C-1 C-c) copia la región en el registro 1, y Ctrl-2 Ctrl-v (C-2 C-v) yanks el contenido del registro 2.

El modo CUA también dispone de una función de marca global que permite mover y copiar texto fácilmente entre buffers. Utilice Ctrl-Shift-SPACE (C-S-SPC) para activar o desactivar la marca global. Cuando dicha marca está activada, todo el texto que mate o copie se inserta automáticamente en ella, y el texto que escriba se inserta en esta (en la marca global) en lugar de en la posición actual.

Por ejemplo, para copiar palabras de varios búferes en una lista de palabras de un búfer determinado, establezca la marca global en el búfer de destino, luego navegue hasta cada una de las palabras que desee en la lista, márquela (por ejemplo, con Shift-Alt-f (S-M-f)), cópiela en la lista con (C-c) o Alt-w (M-w), e inserte una nueva línea después de la palabra en la lista de destino pulsando RET.


© Derechos de autor 2023, Tano.

Compilado con Sphinx usando un tema proporcionado por Read the Docs.
</html>