pages/archivos-gendoc/17_cc-mode.html

101 KiB
Raw Permalink Blame History

<html lang="es"> <head> </head>
cc-mode

cc-mode

CC Mode es un modo de GNU Emacs para editar archivos que contengan código C, C++, Objective-C, Java, CORBA IDL (y las variantes PSDL y CIDL), Pike y AWK. Proporciona sangría basada en la sintaxis, bloqueo de fuentes y dispone de varios comandos útiles y algunos modos menores para facilitar la edición. No proporciona herramientas para buscar y navegar entre funciones, clases, etc.; para eso hay otros paquetes.

Este manual es para CC Mode en GNU/Emacs.

Copyright © 19952022 Free Software Foundation, Inc.

Se concede permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, Versión 1.3 o cualquier versión posterior publicada por la Free Software Foundation; sin Secciones Invariantes, con los Textos de Cubierta Delantera siendo "Un Manual GNU", y con los Textos de Cubierta Trasera como en (a) más abajo. Se incluye una copia de la licencia en la sección titulada "GNU Free Documentation License".

Importante

(a) El texto de contraportada de la FSF es: "Usted tiene la libertad de copiar y modificar este manual GNU".


  •  »
  •  Introducción

Introducción

Bienvenido a CC Mode, un modo de GNU Emacs para editar archivos que contengan código C, C++, Objective-C, Java, CORBA IDL (y las variantes CORBA PSDL y CIDL), Pike1 y AWK. Esta encarnación del modo desciende de c-mode.el (también llamado "Boring Old C Mode" o BOCM :-), c++-mode.el versión 2, que Barry Warsaw había estado manteniendo desde 1992, y awk-mode.el, un modo olvidado durante mucho tiempo en la base de (X)Emacs.

Nota

1 Lenguaje de secuencias de comandos similar a C que tiene sus raíces en el lenguaje LPC usado en algunos motores de MUD.

A finales de 1997, Martin Stjernholm se unió a Barry en el equipo de mantenedores de CC Mode, e implementó el soporte de Pike. En 2000 Martin pasó a ser el único mantenedor. En 2001 Alan Mackenzie se unió al equipo, implementando el soporte AWK en la versión 5.30. CC Mode no contenía originalmente el soporte de bloqueo de fuentes para sus idiomas; eso se añadió en la versión 5.30.

Este manual describe la versión 5.35 de CC Mode.

El Modo CC soporta la edición de archivos C, C++, Objective-C, Java, el Lenguaje de Definición de Interfaz de CORBA, Pike y AWK. De este modo, puede configurar fácilmente un bloqueo de fuentes y estilos de codificación coherentes para usarlos en la edición de todos estos lenguajes, aunque AWK aún no está tan uniformemente integrado como los demás lenguajes.

Tenga en cuenta que el nombre de este paquete es "CC Mode", pero no hay un punto de entrada cc-mode de nivel superior. Todas las variables, comandos y funciones de CC Mode llevan el prefijo c-thing, y se proporcionan puntos de entrada c-mode, c++-mode, objc-mode, java-mode, idl-mode, pike-mode y awk-mode. Este paquete pretende sustituir a c-mode.el, c++-mode.el y awk-mode.el.

Un agradecimiento especial a Krishna Padmasola por su trabajo en la conversión del archivo README original al formato Texinfo. También me gustaría dar las gracias a todas las víctimas de CC Mode que ayudaron enormemente durante las primeras fases beta del desarrollo de CC Mode.


  •  »
  •  Visión general del manual

Visión general del manual

El manual comienza con varios capítulos introductorios (incluido éste).

La siguiente parte del manual describe el uso diario del Modo CC (en contraste con cómo personalizarlo).

  • El capítulo "Comandos" describe en detalle cómo usar (casi) todas las funciones del modo CC. Hay extensas referencias cruzadas desde aquí a las secciones correspondientes más adelante en el manual que le dicen cómo personalizar estas características.
  • "Bloqueo de fuentes" describe cómo se aplica el "resaltado de sintaxis" a los buffers. Se trata principalmente de información de fondo y puede omitirse en una primera lectura.

La siguiente parte del manual describe cómo personalizar el modo CC. Normalmente, se ofrece una visión general de un tema a nivel de capítulo y, a continuación, las secciones y subsecciones describen el material cada vez con más detalle.

  • El capítulo "Conceptos básicos de configuración" le explica cómo escribir personalizaciones: en ganchos (hooks), en estilos, en ambos o en ninguno, según sus necesidades. Describe el sistema de estilos de CC Mode y enumera los estilos estándar que CC Mode suministra.
  • Los siguientes capítulos describen en detalle cómo personalizar las distintas características de CC Mode.
  • Finalmente, hay un fragmento .emacs de ejemplo, que podría ayudarlo a crear su propia personalización.

El manual termina con "esto y aquello", cosas que no encajan limpiamente en ninguno de los apartados anteriores.

  • Dos capítulos tratan sobre el rendimiento del modo CC y los errores y limitaciones conocidos.
  • Las FAQ contienen una lista de problemas y preguntas comunes.
  • Los dos capítulos siguientes explican cómo ponerse en contacto con el proyecto CC Mode: tanto para actualizar CC Mode como para enviar informes de errores.

Por último, están los índices habituales.


  •  »
  •  Comenzando

Comenzando

Si tiene esta versión de CC Mode con Emacs o XEmacs, debería funcionar bien nada más sacarlo de la caja. Tenga en cuenta, sin embargo, que puede que no tenga la última versión de CC Mode y quiera actualizar su copia (ver más abajo).

Probablemente deberías empezar por hojear todo el capítulo de Comandos (ver Comandos) para tener una visión general de las capacidades de CC Mode.

Después de probar algunos comandos, puede que no le gusten algunos aspectos de la configuración por defecto del Modo CC. A continuación le indicamos cómo cambiar algunos de los ajustes que los recién llegados al Modo CC desean cambiar con más frecuencia:

c-basic-ofset
Esta variable Lisp contiene un número entero, el número de columnas que CC Mode indenta el código anidado. Para establecer este valor a 6, personalice c-basic-offset o póngalo en su archivo .emacs:
(setq c-basic-offset 6)
	
El estilo (indentación)
La "forma" básica de la sangría creada por el Modo CC-por defecto, es el estilo gnu (excepto para los buffers de Java y AWK). Puede encontrar una lista de los estilos disponibles y sus descripciones en Estilos incorporados. Una especificación completa del sistema de estilos de CC Mode, incluyendo cómo crear su propio estilo, puede encontrarse en el capítulo Estilos. Para establecer su propio estilo en GNU/Linux, personalice c-default-style o ponga esto en su archivo .emacs:
(setq c-default-style '((java-mode . "java")
                        (awk-mode . "awk")
                        (other . "linux")))
	
Normalmente, cuando escribe caracteres de "puntuación" como ; o {, el modo CC vuelve a centrar instantáneamente la línea actual. Esto puede ser desconcertante hasta que se acostumbre. Para desactivar la sangría eléctrica en la memoria intermedia actual, escriba Ctrl-c Ctrl-l (C-c C-l) Escriba lo mismo para volver a activarla. Para tener la sangría eléctrica desactivada por defecto, ponga lo siguiente en su archivo .emacs2:

Importante

2 No existe ninguna posibilidad de "personalización fácil" para realizar este cambio.

(setq-default c-electric-flag nil)
	
Los detalles de éste y otros "Modos menores" similares aparecen en la sección Modos menores.
Hacer que la tecla RET añada sangría a la nueva línea
La vinculación estándar de Emacs para RETURN (RET) sólo añade una nueva línea. Si quiere que también añada la nueva línea, vuelva a enlazar la tecla. Tenga en cuenta que la acción de volver a enlazar fallaría si el mapa de teclado correspondiente aún no existiera, por lo que necesitamos retrasar la acción hasta que se haya cargado el modo CC. Ponga el siguiente código en su archivo .emacs:
(defun my-make-CR-do-indent ()
  (define-key c-mode-base-map "\C-m" 'c-context-line-break))
(add-hook 'c-initialization-hook 'my-make-CR-do-indent)
	
Este ejemplo demuestra el uso de una herramienta muy potente del Modo CC (y de Emacs): el gancho (hook). El uso de los hooks de CC Mode se describe en Hooks.

Todos estos ajustes deben realizarse en su archivo .emacs antes de que se cargue cualquier búfer del modo CC, en particular, antes de cualquier llamada a desktop-read.

A medida que vaya conociendo mejor el modo, es posible que desee llevar a cabo cambios más ambiciosos en la configuración. Para ello, debería empezar a leer el capítulo Aspectos básicos de la configuración.

Si está actualizando una instalación existente del Modo CC, consulte el archivo README para conocer los detalles de la instalación. En particular, si va a editar ficheros AWK, README describe cómo configurar su (X)Emacs para que CC Mode sustituya al obsoleto awk-mode.el que puede haber sido suministrado con su (X)Emacs. CC Mode puede no funcionar con versiones antiguas de Emacs o XEmacs. Consulte las notas de la versión de CC Mode en http://cc-mode.sourceforge.net para obtener la información más reciente sobre la versión de Emacs y la compatibilidad de paquetes (consulte Cómo obtener la última versión de CC Mode).

Comando: c-version
Puede averiguar qué versión de CC Mode está usando visitando un archivo C e introduciendo Alt-x c-version RETURN (M-x c-version RET). Debería ver este mensaje en el área de eco:
Using CC Mode version 5.XX
donde XX es el número de versión menor.

  •  »
  •  Comandos

Comandos

Este capítulo especifica todos los comandos del Modo CC, y por lo tanto contiene casi todo lo que necesita saber para usar el Modo CC (en contraste con su configuración). Comandos aquí significa tanto secuencias de teclas de control como teclas eléctricas, siendo éstas caracteres como ; que, además de insertarse en el buffer, también hacen otras cosas.

Puede que quiera revisar Mover por Paréntesis en el Manual de GNU Emacs, que describe comandos para moverse por estructuras de llaves y paréntesis.

Comandos de Indentado

Los siguientes comandos vuelven a sangrar las construcciones en C. Tenga en cuenta que cuando cambie su estilo de codificación, ya sea interactivamente o por otros medios, su archivo no se sangrará automáticamente. Necesitará ejecutar uno de los siguientes comandos para ver los efectos de sus cambios.

Además, variables como c-hanging-* y c-cleanup-list (ver Personalización de Auto-newlines) sólo afectan a cómo se formatea el código sobre la marcha. Cambiar el "colgado" de una llave y luego reindentar, no moverá la llave a una línea diferente. Para esto, es mejor usar un programa externo como GNU indent, que reorganizará la ubicación de las llaves, entre otras cosas.

Las directivas de preprocesador se tratan como espacios en blanco sintácticos de otro código, es decir, pueden intercalarse en cualquier lugar sin afectar a la sangría del código circundante, igual que los comentarios.

El código dentro de las definiciones de macros es, por defecto, analizado sintácticamente de forma que se obtiene una sangría relativa igual que si el mismo código estuviera fuera de una macro. Sin embargo, como no hay ninguna pista sobre el contexto sintáctico, es decir, si la macro se expande a una expresión, a algunas sentencias o quizás a funciones enteras, el reconocimiento sintáctico puede ser erróneo. Sin embargo, el modo CC se las arregla para resolverlo correctamente la mayoría de las veces.

Algunas macros, cuando se invocan, "tienen su propio punto y coma". Para obtener la siguiente línea sangrada correctamente, en lugar de como una línea de continuación, consulte Macros con punto y coma.

Volver a sangrar grandes secciones de código puede llevar mucho tiempo. Cuando el modo CC vuelve a sangrar una región de código, equivale esencialmente a pulsar TAB (TAB) en cada línea de la región.

Estos comandos permiten sangrar el código:

TAB (TAB, c-indent-command)
Este comando aplica sangría a la línea actual. Esto es todo lo que necesita saber para un uso normal.
c-indent-command hace cosas diferentes, dependiendo de la configuración de c-syntactic-indentation (véase Conceptos básicos del motor de sangría):
  • Cuando no es nulo (que es lo normal), el comando sangrará la línea de acuerdo con su contexto sintáctico. Con un argumento prefijo (Ctrl-u TAB C-u TAB), re-sentará toda la expresión3 que comienza en el margen izquierdo de la línea.
  • Cuando es nil, el comando sangra la línea con una columna c-basic-offset extra. Un prefijo actúa como multiplicador. Un prefijo vacío Ctrl-u TAB (C-u TAB) equivale a -1, eliminando c-basic-offset de la sangría.
  • Importante

    3 Esto sólo es útil para una línea que comienza con un comentario o una llave de apertura, paréntesis o comillas de cadena.

El comportamiento preciso se modifica mediante varias variables: Con c-tab-always-indent, puede hacer que TAB (TAB) inserte espacios en blanco en algunas circunstancias c-insert-tab-function define entonces con precisión qué tipo de "espacio en blanco" será. Establezca la variable estándar de Emacs indent-tabs-mode a t si quiere que se usen caracteres tab reales en la sangría, a nil si sólo quiere espacios. Vea Sólo espacios en el Manual de GNU Emacs.
Opción de Usuario: c-tab-always-indent
Esta variable modifica el funcionamiento de TAB (TAB).
  • Cuando es t (por defecto), TAB (TAB) simplemente indenta la línea actual.
  • Cuando es nil, TAB (TAB) (re)indenta la línea sólo si el punto está a la izquierda del primer carácter no espacio en blanco de la línea. De lo contrario, inserta algún espacio en blanco (un tabulador o un número equivalente de espacios; véase más abajo) en el punto.
  • Con otro valor, la línea se vuelve a sangrar. Además, si el punto está dentro de una cadena o comentario, se insertan algunos espacios en blanco.
Opción de Usuario: c-insert-tab-function
Cuando se inserta "algún espacio en blanco" como se ha descrito anteriormente, lo que ocurre en realidad es que se llama a la función almacenada en c-insert-tab-function. Normalmente es insert-tab, que inserta un tabulador real o el número equivalente de espacios (dependiendo de indent-tabs-mode). Algunas personas, sin embargo, establecen c-insert-tab-function como tab-to-tab-stop para obtener tabuladores duros al sangrar.

El tipo de sangría que aplican los cinco comandos siguientes depende de la configuración de c-syntactic-indentation (véase Conceptos básicos del motor de sangría):

  • Cuando no es nulo (no-nil, por defecto), los comandos sangrarán las líneas según su contexto sintáctico;
  • Cuando es nulo (nil), sólo sangrar cada línea la misma cantidad que la línea anterior no en blanco. Los comandos que sangren una región no son muy útiles en este caso.
Ctrl-Alt-q (C-M-q, c-indent-exp)
Sangrar una expresión completa con llaves o paréntesis. Tenga en cuenta que el punto debe estar en la llave de apertura o paréntesis de la expresión que desea sangrar.
Ctrl-c Ctrl-q (C-c C-q, c-indent-defun)
Aplica sangría a toda la definición de función, clase o macro de nivel superior que abarca el punto. No modifica el punto. Esta función no puede usarse para reindentar una construcción de llaves anidada, como una clase o función anidada, o un método Java. La construcción de nivel superior que se va a reindentar debe estar completa, es decir, debe tener una llave inicial y una llave final.
Ctrl-Alt \ (C-M-\, indent-region)
Indenta una región arbitraria de código. Este es un comando estándar de Emacs, adaptado para código C en un buffer en modo CC. Tenga en cuenta, por supuesto, que el punto y la marca deben delimitar la región que desea sangrar.
Ctrl-Alt-h (C-M-h, c-mark-function)
Aunque no es estrictamente un comando de indentación, es útil para marcar la función de nivel superior o la definición de clase como la región actual. Al igual que con c-indent-defun, este comando opera en construcciones de nivel superior, y no se puede utilizar para marcar, por ejemplo, un método Java.

Estas variables también son útiles a la hora de sangrar código:

Opción de Usuario: (indents-tabs-mode)
Esta es una variable estándar de Emacs que controla cómo se compone la sangría de línea. Cuando no es nula (no-nil), se pueden usar tabuladores en la sangría de una línea; en caso contrario, sólo se usan espacios.
Opción de Usuario: c-progress-interval
Cuando se indentan grandes regiones de código, esta variable controla la frecuencia con la que se muestra un mensaje de progreso. Establezca esta variable a nil para inhibir los mensajes de progreso, o establézcala a un número entero que es la frecuencia (en segundos) con la que se mostrarán los mensajes de progreso.

Comandos de comentario

Cuando los comandos de esta sección añaden delimitadores de comentario, usan comentarios de línea o comentarios de bloque dependiendo de la configuración del estilo de comentario (véase Modos menores).

Ctrl-c Ctrl-c (C-c C-c, comment-region)
Este comando comenta las líneas que comienzan en la región. Con un argumento negativo, hace lo contrario: borra los delimitadores de comentario de estas líneas. Vea Multi-Line Comments en el Manual de GNU Emacs, para más detalles. comment-region no es realmente parte del Modo CC; se le da un enlace al Modo CC por conveniencia.
Alt-; (M-;, comment-dwim o indent-for-comment4)
Inserta un comentario al final de la línea actual, si no hay ya ninguno. Luego reindenta el comentario de acuerdo a comment-column (ver Opciones para Comentarios en el Manual de GNU Emacs) y las variables de abajo. Finalmente, posiciona el punto después del inicio del comentario. Ctrl-u Alt-; (C-u M-;) elimina cualquier comentario en la línea actual, junto con cualquier espacio en blanco antes de él. Este es un comando estándar de Emacs, pero el Modo CC lo mejora un poco con dos variables:

Importante

4 El nombre de este comando varía según la versión de (X)Emacs.

Opción de Usuario: c-comment-indent-alist
Esta variable de estilo le permite variar la columna en la que M-; coloca el comentario, dependiendo del tipo de código que haya en la línea, y posiblemente de la sangría de cualquier comentario similar en la línea precedente. Es una lista de asociación que asigna diferentes tipos de líneas a acciones que describen cómo deben ser tratadas. Si un determinado tipo de línea no está presente en la lista, la línea se sangrará en la columna especificada por comment-column.
Consulte la cadena de documentación para obtener una descripción completa de esta variable (utilice Ctrl-h v c-indent-comment-alist (C-h v, c-indent-comment-alist)).
Opción de Usuario: c-indent-comment-syntactically-p
Normalmente, cuando esta variable de estilo es nil, M-; sangrará las líneas de sólo comentario de acuerdo con c-indent-comment-alist, igual que hace con las líneas donde otro código precede a los comentarios. Sin embargo, si desea que actúe como TAB para las líneas de comentario, puede hacerlo estableciendo c-indent-comments-syntactically-p a un valor distinto de nil.
Si c-indent-comments-syntactically-p es no nula (no-nil) entonces c-indent-comment-alist no será consultado en absoluto para líneas de sólo comentario.

Comandos de Movimiento

El modo CC contiene algunos comandos útiles para moverse por el código C.

Ctrl-Alt-a (C-M-a, c-beginning-of-defun)
Ctrl-Alt-e (C-M-e, c-end-of-defun)
Se mueve al principio o al final de la función actual o siguiente. Otras construcciones (como structs o clases) que tienen un bloque de llaves también cuentan como "funciones" aquí. Para moverse sobre varias funciones, puede dar a estos comandos una cuenta de repetición.
El inicio de una función está en su cabecera. El final de la función está después de su llave de cierre, o después del punto y coma de una construcción (como un struct) que no termina en la llave. Estos dos comandos intentan dejar el punto al principio de una línea cerca del inicio o final real de la función. Esto ocasionalmente causa que el punto no se mueva.
Por defecto, estos comandos reconocerán las funciones contenidas dentro de un ámbito de declaración, como una clase (class) C++ o una construcción de espacio de nombres (namespace), si el punto comienza dentro de él. Si CC Mode no encuentra inicios o finales de función dentro del ámbito de declaración actual, buscará en los ámbitos circundantes. Si desea que CC Mode reconozca funciones sólo en el nivel superior5, establezca c-defun-tactic en t.
Estas funciones son análogas a los comandos incorporados de Emacs beginning-of-defun y end-of-defun, excepto que eliminan la restricción de que la llave de apertura de nivel superior del defun debe estar en la columna cero. Vea Defuns en el Manual de GNU Emacs, para más información.

Nota

5 Este era el comportamiento del Modo CC antes de la versión 5.32.

Ctrl-Alt-a (en Modo AWK) (C-M-a en Modo AWK, c-awk-beginning-of-defun)
Ctrl-Alt-e (en Modo AWK) (C-M-e en Modo AWK, c-awk-end-of-defun)
Se mueve al principio o al final de la definición AWK actual o siguiente. Estos comandos pueden recibir prefijos-argumento, y su funcionalidad es totalmente equivalente a la de beginnig-of-defun y end-of-defun.
Las definiciones (defuns) del Modo AWK son pares patrón/acción (cualquiera de los cuales puede estar implícito) o funciones definidas por el Usuario. Tener { y } (si los hay) en la columna cero, como se sugiere para algunos modos, no es necesario ni útil en el modo AWK.
Alt-a (M-a, c-beginning-of-statement)
Alt-e (M-e, c-end-of-statement)
Permite moverse al principio o final de la sentencia C más interna. Si el punto ya está ahí, se mueve al siguiente principio o final de una sentencia, incluso si eso significa moverse dentro de un bloque. (Use Ctrl-Alt-b (C-M-b) o Ctrl-Alt-f (C-M-f) para moverse sobre un bloque simétrico.) Un argumento prefijo n significa moverse sobre n sentencias.
Si el punto está dentro o junto a un comentario o una cadena que abarca más de una línea, estos comandos se mueven por sentencias en lugar de por expresiones.
Cuando se invocan desde un programa, estas funciones toman tres argumentos opcionales: el recuento de repeticiones, un límite de posición del búfer que es lo más atrás que se debe buscar para el contexto sintáctico, y una bandera que dice si se debe hacer el movimiento por sentencias en o cerca de comentarios y cadenas multilínea.
Ctrl-c Ctrl-u (c-up-conditional)
Retrocede a al condicional del preprocesador que lo contiene, dejando atrás la marca. Un argumento prefijo actúa como un recuento de repeticiones. Con un argumento negativo, avanza hasta el final del condicional del preprocesador que lo contiene.
#elif se trata como #else seguido de #if, por lo que la función se detiene en ellos al retroceder, pero no al avanzar.
Esta secuencia de teclas no está vinculada en el modo AWK, que no tiene sentencias de preprocesador.
Alt-x c-up-conditional-with-else (M-x c-up-conditional-with-else)
Una variación de c-up-conditional que también se detiene en las líneas '#else'. Normalmente esas líneas se ignoran.
Avanza al siguiente condicional anidado del preprocesador, dejando atrás la marca. Un argumento prefijo actúa como una cuenta de repetición. Con un argumento negativo, retrocede al condicional de preprocesador anidado anterior.
#elif se trata como #else seguido de #if, por lo que la función se detiene en ellos al avanzar, pero no al retroceder.
Alt-x c-down-conditional-with-else (M-x c-down-conditional-with-else)
Una variante de c-down-conditional que también se detiene en las líneas #else. Normalmente esas líneas se ignoran.
Ctrl-c Ctrl-p (C-c C-p c-backward-conditional)
Ctrl-c Ctrl-n (C-c C-n c-forward-conditional)
Avanza o retrocede a través de un condicional de preprocesador, dejando atrás la marca. Un argumento prefijo actúa como un contador de repeticiones. Con un argumento negativo, se mueve en la dirección opuesta.
Estas secuencias de teclas no están vinculadas en el modo AWK, que no tiene sentencias de preprocesador.
Alt-c c-backward-into-nomenclature (M-x c-backward-into-nomenclature)
Un estilo de programación habitual, especialmente en lenguajes orientados a objetos como C++, consiste en escribir los símbolos en un formato de mayúsculas y minúsculas, en el que la primera letra de cada palabra va en mayúscula y no va separada por guiones bajos. Por ejemplo, SymbolsWithMixedCaseAndNoUnderlines.
Estos comandos retroceden o avanzan hasta el principio de la siguiente palabra en mayúscula. Con el argumento prefijo n, se mueve n veces. Si n es negativo, se mueve en la dirección opuesta.
Tenga en cuenta que estos dos comandos han sido sustituidos por el modo subword (subword mode), que debería usar en su lugar. Véase Movimiento y edición de subpalabras. Es posible que se eliminen de una futura versión del Modo CC.

Comandos de relleno y salto de línea

Dado que hay mucho texto normal en los comentarios y en las cadenas literales, el modo CC ofrece funciones para editarlos como en el modo texto. El objetivo es hacerlo sin problemas, es decir, puede utilizar el modo de relleno automático, el movimiento de frases y párrafos, el relleno de párrafos, el relleno adaptable, etc. siempre que haya un trozo de texto normal sin tener que pensar mucho en ello. El modo CC mantiene la sangría, fija prefijos de línea de comentario adecuados, etc.

Puede configurar la forma exacta en que los comentarios se rellenan y rompen, y dónde Emacs hace el auto-rellenado (vea Personalizar el Rellenado y el Salto de Línea). Típicamente, el sistema de estilos (vea Estilos) habrá configurado esto por Usted, así que probablemente no tendrá que molestarse.

Los saltos de línea se manejan por defecto (casi) igual independientemente de si se hacen por modo de autorrelleno (ver Autorrelleno en el Manual de GNU Emacs), por relleno de párrafo (por ejemplo, con Alt-q (M-q)), o explícitamente con Alt-j (M-j) o métodos similares. En literales de cadena, la nueva línea obtiene la misma sangría que la línea anterior no vacía.6.

Importante

6 Puede cambiar este valor predeterminado configurando el símbolo sintáctico de la cadena (consulte Símbolos sintácticos y consulte Personalización de la sangría)

Alt-q c-fill-paragraph (M-q, c-fill-paragraph)
Este comando rellena literales de cadena multilínea y comentarios de estilo bloque y línea. En los buffers Java, las palabras de marcado Javadoc se reconocen como encabezados de párrafo. Las palabras de marcado autodoc de Pike orientadas a la línea se reconocen del mismo modo en el modo Pike.
El formato de los caracteres iniciales (/*) y finales (*/) de los comentarios de bloque se mantiene tal como estaba antes del relleno. Es decir, si el inicio o el final estaban en la misma línea, se mantienen en ella; por el contrario, si el delimitador tiene texto de comentario en su línea, se mantiene al menos una palabra de ese texto en la línea.
Este comando sustituye a fill-paragraph en los buffers del modo CC.
Alt-j c-indent-new-comment-line (M-j, c-indent-new-comment-line)
Esto rompe la línea actual en el punto e introduce una sangría en la nueva línea. Si el punto estaba en un comentario, la nueva línea recibe el prefijo apropiado. Si el punto estaba dentro de una macro, se inserta una barra invertida antes del salto de línea. Es el sustituto de indent-new-comment-line.
Alt-x c-context-line-break (M-x c-context-line-break)
Inserta un salto de línea adecuado al contexto: Si el punto está dentro de un comentario, la nueva línea recibe la sangría adecuada y el prefijo de línea de comentario como c-indent-new-comment-line. En código normal, se aplica la sangría que se aplicaría a newline-and-indent. En las macros actúa como newline-and-indent pero además inserta y opcionalmente alinea la barra invertida de final de línea para que la macro permanezca intacta. Véase Personalización de macros, para más detalles sobre la alineación de la barra invertida. En una cadena, sólo se inserta una barra invertida si la cadena está dentro de una macro7.
Esta función no está vinculada a una tecla por defecto, pero está pensada para ser usada en la tecla RETURN (RET). Si le gusta el comportamiento de newline-and-indent en RET, debería considerar cambiar a esta función. Ver Ejemplo de Archivo Init.

Nota

7 En GCC, los saltos de línea sin mayúsculas dentro de las cadenas son válidos.

Alt-x c-context-open-line (M-x c-context-open-line)
Esto es para Ctrlo (C-o, que es la instrucción Alt-x open-line (M-x open-line)) como c-context-line-break es para RET. Es decir, funciona igual que c-context-line-break pero deja el punto anterior al salto de línea insertado.

Modos Menores

El modo CC contiene varias funciones similares a las del modo menor que pueden resultarle útiles al escribir código nuevo o editar código antiguo:

comment style
Especifica si los comandos de comentario (como M-;) insertan comentarios de bloque o comentarios de líneas8.

Nota

8 Puede enfatizar los comentarios de estilo no predeterminados en su código dando a sus delimitadores font-lock-warning-face. Consulte Marcar comentarios de estilo "incorrectos".

electric mode
Cuando esta opción está activada, algunos caracteres visibles se reformatean al escribirlos. Esto es normalmente útil, pero puede ser una molestia cuando se edita código formateado caóticamente. También puede ser desconcertante, especialmente para los Usuarios que son nuevos en el Modo CC.
auto-newline mode
Inserta automáticamente nuevas líneas donde probablemente querría escribirlas Usted mismo, por ejemplo, después de teclear }s. Su acción se suprime cuando el modo eléctrico está desactivado.
hungry-delete mode
Esto le permite eliminar un bloque contiguo de espacios en blanco con una sola tecla: por ejemplo, la nueva línea y la sangría que acaba de insertar auto-newline cuando desea retroceder y escribir un comentario después de la última sentencia.
subword-mode
Este modo hace que los comandos básicos de movimiento de palabras como Alt-f (M-f, forward-word) y Alt-b (M-b, backward-word) traten las partes de los símbolos sillycapsed como palabras diferentes. Por ejemplo, NSGraphicsContext se trata como tres palabras: NS, Graphics y Context.
syntatic-indentation-mode
Cuando está activada (que es lo normal), los comandos de sangrado como Ctrl-j (C-j) sangrarán las líneas de código de acuerdo con su estructura sintáctica. De lo contrario, una línea simplemente se indenta al mismo nivel que la anterior y TAB (TAB) ajusta la indentación en pasos de c-basic-offset.

Encontrará más información sobre el funcionamiento de estos modos menores en Teclas y Combinaciones de Teclas Eléctricas, Inserción automática de nueva línea, Supresión de espacios en blanco, Movimiento y edición de subpalabras,

Puede activar y desactivar cada uno de estos modos menores, y puede configurar el modo CC para que se inicie con su combinación favorita de ellos (véase Ejemplo de archivo de inicialización). Por defecto, cuando se inicializa un búfer, el estilo de comentario se establece en el predeterminado para el modo principal, el modo eléctrico y el modo de indentación sintáctica están activados, pero los otros tres modos están desactivados.

El modo CC muestra el estado actual de los cinco primeros de estos modos menores en la línea de modo añadiendo caracteres al nombre del modo mayor: / o * para indicar el estilo de comentario (respectivamente línea o bloque), y una letra para cada uno de los otros modos menores que está habilitado: l para modo eléctrico, a para modo auto-newline, h para modo borrado hambriento (hungry mode), y w para modo subpalabra (subword mode). Si el estilo de comentario fuera bloque y todos los otros modos estuvieran habilitados, verías C/*lahw9.

Nota

9 La C se sustituiría por el nombre del idioma en cuestión para los demás idiomas que admite el modo CC.

Estos son los comandos para cambiar estos modos:

Ctrl-c Ctrl-k (C-c C-k, c-toggle-comment-style)
Alterna el estilo de comentario entre el estilo línea y el estilo bloque. En los modos (como el modo AWK) que sólo tienen uno de estos estilos, esta función no hace nada.
Ctrl-c Ctrl-l (C-c C-l, c-toggle-electric-state)
Conmuta el modo eléctrico menor. Cuando el comando desactiva el modo, también suprime el modo de auto-newline.
Ctrl-c Ctrl-a (C-c C-a, c-toggle-auto-newline)
Activa el modo menor de auto-newline. Cuando el comando activa el modo, también activa el modo eléctrico menor.
Alt-x c (M-x c, c-toggle-hungry-state)
Conmuta el modo menor de borrado hambriento (hungry-delete mode)10.

Nota

10 Antes del modo CC 5.31, este comando estaba vinculado a Ctrl-c Ctrl-d (C-c C-d).

Alt-x c-toggle-auto-hungry-state (M-x c-toggle-auto-hungry-state)
Alterna los modos menores de nueva línea automática (auto-newline) y borrado hambriento (hungry minor mode)11.

Nota

11 Antes del modo CC 5.31, este comando estaba vinculado a Ctrl- Ctrl-t (C-c C-t).

Ctrl-c Ctrl-w (C-c C-w, M-x subword-mode)
Cambia al modo subpalabra (mode subword).
Alt-x c-toggle-syntactic-indentation (M-x c-toggle-syntactic-indentation)
Cambia al modo de indentación sintáctica (syntactic-indentation mode)

Todas las funciones de conmutación anteriores tienen en común que, si se llaman mediante programación, toman un argumento numérico opcional. Para el estilo c-toggle-comment style, un valor positivo seleccionará comentarios de bloque, un valor negativo seleccionará comentarios de línea. Para las otras funciones, un valor positivo activará el modo menor (o ambos en el caso de c-toggle-auto-hungry-state) y un valor negativo lo desactivará (o a ambos).

Teclas y Combinaciones de Teclas Eléctricas

La mayoría de las teclas de puntuación tienen un comportamiento eléctrico: además de insertarse, realizan otra acción, como volver a sangrar la línea. Esta nueva sangría le evita tener que volver a sangrar una línea manualmente después de escribir, por ejemplo, un }. Algunas palabras clave, como else, también activan la acción eléctrica.

Puede inhibir el comportamiento eléctrico descrito aquí desactivando el modo eléctrico menor (vea Modos menores).

Todas estas teclas tienen en común que sólo se comportan eléctricamente cuando se usan en código normal (en contraste con cuando se escriben en un literal de cadena o en un comentario). Aquellas que causan re-indentación sólo lo hacen cuando c-syntactic-indentation tiene un valor no nulo (lo que hace por defecto).

Estas claves y palabras clave son:

# (#)
Símbolo almohadilla (pound, ligado a c-electric-pound) es eléctrico cuando se teclea como el primer carácter no espacio en blanco de una línea y no dentro de una definición de macro. En este caso, se consulta la variable c-electric-pound-behavior para conocer el comportamiento eléctrico. Esta variable toma un valor de lista, aunque el único elemento definido actualmente es alignleft, que indica a este comando que fuerce el carácter # en la columna cero. Esto es útil para introducir definiciones de macros del preprocesador.
Pound no es eléctrico en los buffers AWK, donde # inicia un comentario, y está ligado a self-insert-command como cualquier carácter imprimible típico.
* (*)
/ (/)
Un asterisco (vinculado a c-electric-star) o una barra (c-electric-slash) provoca la reentrada cuando se escribe como segundo componente de un abridor de comentario de bloque estilo C (/*) o de un abridor de comentario de línea C++ (//) respectivamente, pero sólo si el abridor de comentario es lo primero en la línea (es decir, sólo hay espacios en blanco antes de él).
Además, puede configurar el modo CC para que al escribir una barra al principio de una línea dentro de un comentario de bloque se termine el comentario. No necesita tener activado el modo eléctrico menor para obtener este comportamiento. Vea Limpiezas.
En modo AWK, * y / no delimitan comentarios y no son eléctricos.
< (<)
> (>)
Un signo menor que o mayor que (ligado a c-electric-lt-gt) es eléctrico en dos circunstancias: cuando es un corchete angular en una declaración de "plantilla" de C++ (y construcciones similares en otros lenguajes) y cuando es el segundo de dos caracteres < o > en un operador de flujo de estilo C++. En ambos casos, la línea se vuelve a sangrar. #include de C no son eléctricos.
( ( ( )
) ( ) )
Los caracteres de paréntesis normales ( y ) (ligados a c-electric-paren) reindentan la línea actual. Esto resulta útil para alinear automáticamente los paréntesis de cierre de una lista de argumentos.
También puede configurar el modo CC para que inserte automáticamente un espacio entre el nombre de una función y el ( que acaba de escribir, y para que lo elimine automáticamente después de escribir ), en caso de que la lista de argumentos esté vacía. No es necesario tener activado el modo eléctrico menor para obtener estas acciones. Véase Limpiezas.
{ ( { )
} ( } )
Al teclear una llave (vinculada a c-electric-brace) se vuelve a centrar la línea actual. Además, puede que se inserten una o más nuevas líneas si está activado el modo menor de auto-newline. Véase Inserción automática de nuevas líneas. Además, puede configurar el modo CC para compactar el exceso de espacios en blanco insertados por el modo de auto-newline en determinadas circunstancias. Consulte Limpiezas.
: ( : )
Si se escriben dos puntos (ligados a c-electric-colon), se vuelve a centrar la línea actual. Además, se pueden insertar una o más nuevas líneas si el modo menor de auto-newline está activado. Véase Inserción automática de nuevas líneas. Si escribe dos puntos inmediatamente después de una nueva línea automática, por defecto se elimina el espacio en blanco entre los dos dos puntos, dejando un operador de ámbito C++. Vea Limpiezas.
Si lo prefiere, puede insertar :: en una sola operación, evitando todas estas reentradas espurias, nuevas líneas y limpiezas. Vea Otros comandos.
; ( ;)
, ( , )
Si se escribe un punto y coma o una coma (vinculado a c-electric-semi&commatt), se vuelve a centrar la línea actual. Además, es posible que se inserte una nueva línea si está activado el modo auto-newline minor. Véase Inserción automática de nueva línea. Además, puede configurar el modo CC para que cuando auto-newline haya insertado espacios en blanco después de un }, se eliminen de nuevo cuando escriba un punto y coma o una coma justo después. Véase Limpiezas.
Opción de Usuario: c-electric-continued-statement
Algunas palabras clave son eléctricas y provocan la reentrada cuando sólo van precedidas de espacios en blanco en la línea. Se trata de palabras clave que continúan una sentencia anterior en lugar de iniciar una nueva: else, while, catch (sólo en C++ y Java) y finally (sólo en Java).
Un ejemplo:
for (i = 0; i < 17; i++)
  if (a[i])
    res += a[i]->offset;
else
	
Aquí, else debe tener la misma sangría que if precedente, ya que continúa esa sentencia. CC Mode automáticamente le aplicará una sangría después de que else haya sido escrito por completo, ya que sólo entonces es posible decidir si es una nueva sentencia o una continuación del if precedente.
CC Mode usa el modo Abbrev (ver Abbrevs en el Manual de GNU Emacs) para lograr esto. Por lo tanto está activado por defecto en todos los modos de lenguaje excepto en el modo IDL, ya que CORBA IDL no tiene sentencias.

Inserción automática de nuevas líneas

Si tiene activado el modo secundario Autonewline (Auto-newline minor mode) (véase Modos Menores), el modo CC inserta automáticamente nuevas líneas (en determinados contextos sintácticos) cuando escribe una llave izquierda o derecha, dos puntos, un punto y coma o una coma. A veces aparece una nueva línea antes del carácter que escribe, a veces después, a veces en ambos casos.

La función de nueva línea automática sólo se activa cuando se cumplen las siguientes condiciones:

  • El modo menor nueva línea automática está activado, como demuestra el indicador a que aparece tras el nombre del modo en la línea de modelo (por ej. C/a or C/la).
  • El carácter se tecleó al final de una línea, o sólo con un espacio en blanco tras él, y posiblemente un \ escapando de la nueva línea.
  • El carácter no está ya en su propia línea. (Esto sólo se aplica a la inserción de una nueva línea antes del carácter).
  • El carácter no se ha escrito dentro de un literal12.

    Nota

    12 Un literal se define como cualquier comentario, cadena o definición de macro de preprocesador. Estas construcciones también se conocen como espacios en blanco sintácticos, ya que normalmente se ignoran al analizar el código C.

  • No se proporcionó ningún argumento numérico al comando (es decir, se tecleó de forma normal, sin el prefijo C-u).

Puede configurar las circunstancias precisas en las que se insertan las nuevas líneas (consulte Personalización de las nuevas líneas automáticas). Normalmente, el sistema de estilos (véase Estilos) habrá configurado esto por Usted, así que probablemente no tendrá que molestarse.

A veces, el modo CC inserta una nueva línea automática donde no la quiere, como después de un } cuando está a punto de escribir un ;. Aquí el borrado hambriento puede ayudar (vea Borrado hambriento de espacios en blanco), o puede activar una limpieza apropiada, que eliminará el exceso de espacios en blanco después de que haya tecleado el ;. Vea Limpiezas para una descripción completa. Vea también Teclas eléctricas y palabras clave para un resumen de las limpiezas listadas por tecla.

Eliminación hambrienta de espacios en blanco

Si desea borrar un bloque entero de espacios en blanco en el punto, puede usar el borrado hambriento. Esto borra todos los espacios en blanco contiguos antes o después del punto en una sola operación. Los "espacios en blanco" incluyen tabuladores y nuevas líneas, pero no comentarios ni comandos del preprocesador. El borrado compulsivo puede reducir notablemente el número de veces que se tienen que pulsar las teclas de borrado cuando, por ejemplo, se ha cometido un error en la línea anterior y ya se ha pulsado C-j.

El borrado hambriento es una función sencilla que algunas personas encuentran extremadamente útil. De hecho, ¡puede que desee tenerla en todos los modos de edición!

A grandes rasgos, en lo que sigue, DEL significa "la tecla de retroceso" y DELETE significa "la tecla de borrado hacia delante". Esto se explica con más detalle a continuación.

Hay dos formas diferentes de usar el borrado hambriento:

Uso del Modo de Borrado Hambriento (Hungry Delete Mode) con DEL y C-d
Aquí se activa el modo menor de borrado hambriento con M-x c-toggle-hungry-state13 (ver Modos menores.) Esto hace que DEL y C-d hagan borrado hambriento hacia adelante y hacia atrás.

Nota

13 Antes del modo CC 5.31, este comando estaba vinculado a C-c C-d. C-c C-d es ahora el enlace por defecto para c-hungry-delete-forward.

DEL (c-electric-backspace)
Este comando se ejecuta por defecto al pulsar la tecla DEL (DEL). Cuando el modo de borrado hambriento está activado, borra cualquier cantidad de espacio en blanco hacia atrás. De lo contrario, o cuando se usa con un argumento prefijo o en un literal (ver Inserción automática de nueva línea), el comando sólo borra hacia atrás de la forma habitual. (Más precisamente, llama a la función contenida en la variable c-backspace-function, pasándole el argumento prefijo, si lo hay).
c-backspace-function
Gancho que es llamado por c-electric-backspace cuando no hace un borrado "eléctrico" del espacio en blanco precedente. El valor por defecto es backward-delete-char-untabify (ver Deletion en GNU Emacs Lisp Reference Manual) la función que borra un único carácter.
Ctrl-d (c-electric-delete-forward)
Esta función, que está vinculada a C-d por defecto, funciona igual que c-electric-backspace pero en la dirección de avance. Cuando no hace un borrado "eléctrico" del espacio en blanco siguiente, simplemente hace delete-char, más o menos. (Estrictamente hablando, llama a la función en c-delete-function con el argumento prefijo).
c-delete-function
Gancho que es llamado por c-electric-delete-forward cuando no hace un borrado "eléctrico" del siguiente espacio en blanco. El valor por defecto es delete-char.
Uso de enlaces distintos
La otra forma (más reciente y recomendada) de usar el borrado hambriento es ejecutar c-hungry-delete-backwards y c-hungry-delete-forward directamente a través de sus secuencias de teclas en lugar de usar el cambio de modo menor.
Ctrl-c Ctrl-DEL o Ctrl-c DEL
(C-c C-DEL o C-c DEL, c-hungry-delete-backwards)14
Borra cualquier cantidad de espacio en blanco en la dirección hacia atrás (independientemente de si el modo de borrado hambriento está activado o no). Este comando está ligado tanto a Ctrl-c Ctrl-DEL (C-c C-DEL) como a Ctrl-c DEL (C-c DEL), ya que el más natural, Ctrl-c Ctrl-DEL (C-c C-DEL), es a veces difícil de teclear en un terminal de caracteres.

Nota

14 Este comando se conocía anteriormente como c-hungry-backspace.

Ctrl-c Ctrl-d, Ctrl-c Ctrl-DEL o Ctrl-c DEL
(C-c C-d, C-c C-DELETE o C-c DELETE, c-hungry-delete-forward)
Borra cualquier cantidad de espacio en blanco en la dirección de avance (independientemente de si el modo de borrado hambriento está activado o no). Este comando está ligado a C-c C-Delete y C-c Delete por la misma razón que DEL.

Cuando hablamos de DEL, y Delete arriba, en realidad lo hacemos sin conectarlas a las teclas físicas comúnmente conocidas como Backspace y Delete. La vinculación por defecto a esas dos teclas depende del tipo de (X)Emacs que esté usando.

En XEmacs 20.3 y posteriores, la tecla Backspace está vinculada a c-electric-backspace y la tecla Delete está vinculada a c-electric-delete. La dirección de borrado se controla mediante la variable delete-key-deletes-forward, una variable estándar de XEmacs. Cuando esta variable no es nula, c-electric-delete borrará hacia adelante con c-electric-delete-forward, de lo contrario borrará hacia atrás con c-electric-backspace. De manera similar, C-c Delete y C-c C-Delete están ligados a c-hungry-delete que es controlado de la misma manera por delete-key-deletes-forward.

Emacs 21 y posteriores vinculan automáticamente Backspace y Delete a DEL y C-d según su entorno, y el Modo CC (CC Mode) extiende esas vinculaciones a C-c C-Backspace etc. Si necesita cambiar las combinaciones a través del modo normal-erase-is-backspace entonces CC Mode también adaptará sus combinaciones extendidas en consecuencia.

En versiones anteriores de (X)Emacs, el modo CC no vincula directamente ni Backspace ni Delete. Sólo los códigos DEL y C-d están enlazados, y depende de los enlaces por defecto asignar las teclas físicas a ellos. Puede que tenga que modificar esto Usted mismo si los valores por defecto no son convenientes.

Conseguir que las teclas Backspace y Delete estén correctamente configuradas a veces puede ser complicado. La información en DEL No borra Delete in GNU Emacs Manual, puede ser útil si tiene problemas con esto en GNU Emacs.

Movimiento y edición de subpalabras

A pesar de los Estándares de Codificación GNU, es popular nombrar un símbolo mezclando mayúsculas y minúsculas, por ejemplo, GtkWidget, EmacsFrameClass, o NSGraphicsContext. A estos símbolos mixtos los llamamos nomenclaturas. Además, cada parte en mayúsculas (o completamente en mayúsculas) de una nomenclatura se denomina subpalabra. He aquí algunos ejemplos:

NomenclaturaSubpalabra
GtkWindowGtk y Window
EmacsFrameClassEmacs, Frame y Class
NSGraphicsContextNS, Graphics y Context

El modo de subpalabras menores sustituye los comandos básicos de movimiento y edición orientados a palabras por variantes que reconocen las subpalabras de una nomenclatura y las tratan como palabras independientes:

TeclaComando orientado a palabrasComando orientado a subpalabras
Alt-f
(M-f)
forward-wordc-forward-subword
Alt-b
(M-b)
backward-wordc-backward-subword
Alt-@
(M-@)
mark-wordc-mark-subword
Alt-d
(M-d)
kill-wordc-kill-subword-
Alt-DEL
(M-DEL)
backward-kill-wordc-backward-kill-word-subword
Alt-t
(M-t)
transpose-wordsc-transpose-subwords
Alt-c
(M-c)
capitalize-wordc-capitalize-subword
Alt-u
(M-u)
upcase-wordc-upcase-subword
Alt-l
(M-l)
downcase-wordc-downcase-subword

Tenga en cuenta que si ha cambiado las combinaciones de teclas para los comandos orientados a palabras en su archivo .emacs o en un lugar similar, las teclas que haya configurado también se usarán para los comandos orientados a subpalabras correspondientes.

Escriba C-c C-w para activar o desactivar el modo de subpalabras. Para que el modo se active automáticamente, escriba el siguiente código en su .emacs:

(add-hook 'c-mode-common-hook
          (lambda () (subword-mode 1)))

Además, también puede usar el modo subpalabra en buffers que no estén en modo CC escribiendo Alt-x subword-mode (M-x subword-mode).

Otros Comandos

Aquí están los demás comandos que no cabían en ningún otro sitio:

Ctrl-c . (C-c ., c-set-style)
Cambia al estilo especificado en el búfer actual. Se usa así:
C-c . nombre-estilo RET
Puede usar el tabulador (TAB, TAB) de forma normal para completar el nombre del estilo.Tenga en cuenta que todos los nombres de estilo no distinguen entre mayúsculas y minúsculas, incluso los que Usted mismo define.
Establecer un estilo de esta forma no reindenta automáticamente el archivo. Para ver los comandos que puede usar para ver el efecto de sus cambios, consulte Comandos de sangría y Comandos de relleno y salto de línea.
Para obtener más información sobre el sistema de estilos del modo CC, consulte Estilos.
Ctrl-c : (C-c :, c-scope-operator)
En C++, a veces también es aconsejable insertar el operador de ámbito dos puntos (:) sin realizar el comportamiento eléctrico de inserción de dos puntos. Ctrl-c (C-c) : hace justamente esto.
Ctrl-c Ctrl-z (C-c C-z, c-display-defun-name)
Muestra el nombre de la función actual, si existe, en el minibuffer. Además, si se da un argumento prefijo, empuja el nombre de la función al anillo de muertes. Si no hay una función actual, c-display-defun-name no hace nada. En Emacs, puede usar este comando en medio de una búsqueda interactiva si establece la opción personalizable isearch-allow-scroll a no-nil. Ver No salir de Isearch en el Manual de GNU Emacs.
Ctrl-c Ctrl-\ (C-c C-\)
Esta función inserta y alinea o borra barras invertidas de final de línea en la región actual. Suelen usarse en macros multilínea.
Sin argumento de prefijo, inserta las barras invertidas que faltan y las alinea según las variables c-backslash-column y c-backslash-max-column. Con un argumento de prefijo, elimina las barras invertidas.
La función no modifica las líneas en blanco al principio de la región. Si la región termina al principio de una línea, siempre borra la barra invertida (si existe) al final de la línea anterior.
Para personalizar el funcionamiento preciso de este comando: Personalizar macros.

La función de salto de línea recomendada, c-context-line-break (véase Comandos de relleno y salto de línea), es especialmente útil si edita macros multilínea con frecuencia. Cuando se usa dentro de una macro, inserta y ajusta automáticamente la barra invertida obligatoria al final de la línea para mantener la macro unida, y deja el punto en la columna de sangría derecha para el código. De este modo, puede escribir código dentro de macros casi exactamente igual que en cualquier otro lugar, sin tener que molestarse con las barras invertidas finales.

Ctrl-c Ctrl-e (C-c C-e)
El comando no funciona en ninguno de los otros modos, y la secuencia de teclas no está vinculada en estos otros modos.
Este comando expande macros C, C++, Objective C o Pike en la región, usando un programa preprocesador externo apropiado. Normalmente muestra su salida en un búfer temporal, pero si se le da un argumento numérico como prefijo (con Ctrl-u Ctrl-c Ctrl-e (C-u C-c C-e)) sobrescribirá la región original con la expansión.
c-macro-expand no es en realidad parte del modo CC, aunque está vinculado a una secuencia de teclas del modo CC. Si necesita ayuda para configurarlo o tiene otros problemas con él, puede leer su código fuente o pedir ayuda en los foros estándar de (X)Emacs.

  •  »
  •  Bloqueo de fuente

Bloqueo de fuente

CC Mode proporciona bloqueo de fuentes para sus lenguajes soportados suministrando patrones para su uso con el modo Font Lock. Esto significa que se obtienen caras distintas en las diferentes partes sintácticas como comentarios, cadenas, palabras clave y tipos, lo que es muy útil para distinguirlas de un vistazo y descubrir errores sintácticos. Ver Font Lock en el Manual de GNU Emacs, para formas de habilitar el bloqueo de fuentes en los buffers del Modo CC.

Nota: El bloqueo de fuentes en el modo AWK no está integrado actualmente con el resto del modo CC. Sólo la última sección de este capítulo, Bloqueo de fuentes en modo AWK, se aplica a AWK. Las demás secciones se aplican a los demás lenguajes.

Preliminares del bloqueo de fuentes

El bloqueo de fuentes para la mayoría de los lenguajes del Modo CC, antes de la versión 5.30 del Modo CC, era proporcionado directamente por el paquete Font Lock . En la transición al Modo CC, los patrones se han reelaborado por completo y se aplican de manera uniforme en todos los idiomas, excepto en el modo AWK, al igual que las reglas de sangría (aunque cada lenguaje sigue teniendo algunas peculiaridades propias, por supuesto). Como antes cada lenguaje tenía sus propios patrones de bloqueo de fuentes, esto significa que ahora es un poco diferente en la mayoría de ellos.

El principal objetivo del bloqueo de fuentes en el modo CC es la precisión, para proporcionar una ayuda fiable en el reconocimiento de las distintas construcciones. Algunas, como las cadenas y los comentarios, son fáciles de reconocer, mientras que otras, como las declaraciones y los tipos, pueden ser muy complicadas. CC Mode puede esforzarse mucho para reconocer correctamente las declaraciones y las conversiones, especialmente cuando los tipos no son reconocidos por los patrones estándar. Este es un análisis bastante exigente que puede ser lento en hardware antiguo, por lo que puede desactivarse eligiendo un nivel de decoración más bajo con la variable font-lock-maximum-decoration (ver Font Lock en el Manual de GNU Emacs).

Los niveles de decoración se emplean del siguiente modo:

  1. Bloqueo mínimo de fuentes: Fontificar sólo comentarios, cadenas y directivas de preprocesador (en los lenguajes que usan cpp).

  2. Bloqueo rápido de fuentes: Además del nivel 1., fontificar palabras clave, tipos simples y declaraciones fáciles de reconocer. Las variables *-font-lock-extra-types (donde * es el nombre del lenguaje) se usan para reconocer tipos (ver más abajo). Los comentarios de documentación como Javadoc se tipografían según el estilo c-doc-comment-style (véase Comentarios de documentación).

    Úselo si cree que el bloqueo de fuentes es demasiado lento. Es el nivel correspondiente más cercano al nivel 3 en los antiguos patrones de bloqueo de fuentes.

  3. Bloqueo preciso de fuentes: Como el nivel 2. pero utiliza un enfoque diferente que puede reconocer tipos y declaraciones con mucha más precisión. Las variables *-font-lock-extra-types se siguen utilizando, pero de todos modos, los tipos definidos por el Usuario se reconocen correctamente en la mayoría de los casos. Por lo tanto, esas variables deberían ser bastante restrictivas y no contener patrones inciertos.

    Este nivel está diseñado para hardware bastante moderno y un modo de soporte de bloqueo de fuentes como Lazy Lock o Just-in-time Lock que sólo tipifica las partes que realmente se muestran. Fontificar todo el buffer a la vez puede volverse molesto y lento incluso en hardware moderno. Ver Font Lock en el Manual de GNU Emacs.

Dado que los tipos definidos por el Usuario son difíciles de reconocer, puede proporcionar expresiones regulares adicionales para que coincidan con los que usa:

Opción de Usuario: c-font-lock-extra-types
Opción de Usuario: c++-font-lock-extra-types
Opción de Usuario: objc-font-lock-extra-types
Opción de Usuario: java-font-lock-extra-types
Opción de Usuario: idl-font-lock-extra-types
Opción de Usuario: pike-font-lock-extra-types
Para cada idioma hay una variable *-font-lock-extra-types, donde * significa el idioma en cuestión. Contiene una lista de expresiones regulares que coinciden con identificadores que deben ser reconocidos como tipos, por ejemplo, \\sw+_t' para reconocer todos los identificadores que terminan con _t, como es habitual en el código C. Cada expresión regular (regexp) no debe coincidir con más de un identificador.
Los valores por defecto contienen regexps para muchos tipos en bibliotecas de tiempo de ejecución estándar que de otro modo son difíciles de reconocer, y patrones para convenciones de nomenclatura de tipos estándar como el sufijo _t en C y C++. Java, Objective-C y Pike tienen como convención comenzar los nombres de las clases con mayúsculas, por lo que existen patrones para ello en esos lenguajes.
A pesar de los nombres de estas variables, no sólo se usan para la fontificación, sino también en otros lugares donde CC Mode necesita reconocer tipos.

Caras

CC Mode intenta hacer uso, en la medida de lo posible, de los tipos de letra estándar para los lenguajes de programación de acuerdo con sus propósitos. Actualmente no se proporcionan caras adicionales, con la excepción de una cara de reemplazo c-invalid-face para emacsen que no proporcionan font-lock-warning-face.

  • Los comentarios normales se escriben con font-lock-comment-face.
  • Los comentarios que son reconocidos como documentación (ver Comentarios de Documentación) obtienen font-lock-doc-face (Emacs) o font-lock-doc-string-face (XEmacs) si esas caras existen. Si no existen, se usa font-lock-comment-face.
  • Los literales de cadenas y caracteres se tipografían con font-lock-string-face.
  • Las palabras clave se escriben con font-lock-keyword-face.
  • font-lock-function-name-face se usa para nombres de función en declaraciones y definiciones, y clases en esos contextos. También se utiliza para las definiciones del preprocesador con argumentos.
  • Las variables en declaraciones y definiciones, y otros identificadores en tales contextos de variables, obtienen font-lock-variable-name-face. También se usa para definiciones de preprocesador sin argumentos.
  • Las constantes incorporadas se tipografían en font-lock-constant-face si existe, font-lock-reference-face en caso contrario. A diferencia de las dos caras anteriores, ésta se utiliza en los nombres de las expresiones, y no en las declaraciones, aunque haya una const en ellas.
  • font-lock-type-face se pone en tipos (tanto predefinidos como definidos por el usuario) y clases en contextos de tipos.
  • Los identificadores de etiquetas reciben font-lock-constant-face si existe, font-lock-reference-face en caso contrario.
  • Los calificadores de nombre y los identificadores de las construcciones de ámbito se tipografían como etiquetas.
  • Las marcas especiales dentro de los comentarios de la documentación también se tipografían como etiquetas.
  • Las directivas de preprocesador tienen font-lock-preprocessor-face si existe (es decir, XEmacs). En Emacs tienen font-lock-builtin-face o font-lock-reference-face, a falta de un equivalente más cercano.
  • Algunos tipos de errores sintácticos se tipifican con font-lock-warning-face en Emacs. En las versiones antiguas de XEmacs no hay una fuente estándar correspondiente, así que se usa una fuente especial c-invalid-face, que está definida para resaltar claramente por defecto.
    Tenga en cuenta que no se usa para las directivas #error o #warning, ya que no son errores sintácticos en sí mismos.

Comentarios de Documentación

Existen varias herramientas para proporcionar documentación en el código fuente en forma de comentarios especialmente estructurados, por ejemplo, la herramienta estándar Javadoc en Java. CC Mode ofrece un mecanismo extensible para tipificar dichos comentarios y el marcado especial que contienen.

Opción de Usuario: c-doc-comment-style
Se trata de una variable de estilo que especifica qué estilo de comentario de documentación reconocer, por ejemplo, javadoc para comentarios Javadoc.
El valor también puede ser una lista de estilos, en cuyo caso todos ellos se reconocen simultáneamente (presumiblemente con señales de marcado que no entren en conflicto).
El valor también puede ser una lista de asociación para especificar diferentes estilos de comentario para diferentes idiomas. A continuación, se busca el símbolo del modo principal en la lista de asociación y, si se encuentra, el valor de ese elemento se interpreta como se ha indicado anteriormente. Si no se encuentra, se busca el símbolo other y se utiliza su valor en su lugar.
El valor por defecto para c-doc-comment-style es ((java-mode . javadoc) (pike-mode . autodoc) (c-mode . gtkdoc)).
Tenga en cuenta que el modo CC usa esta variable para establecer otras variables que manejan la fontificación, etc. Esto se hace al inicializar el modo o cuando se cambia a un estilo que establece esta variable. Por lo tanto, si la cambia de alguna otra manera, por ejemplo, interactivamente en un buffer de CC Mode, necesitará hacer Alt-x java-mode (M-x java-moder) (o cualquier modo que esté usando actualmente) para reinicializar.
Tenga en cuenta también que cuando se inicia CC Mode, las otras variables se modifican antes de que se ejecuten los hooks de modo. Si cambia esta variable en un hook de modo, tendrá que llamar a c-setup-doc-comment-style después para rehacer ese trabajo.

Actualmente, el modo CC ofrece los siguientes estilos de comentarios de documentos:

javadoc
Comentarios Javadoc, la herramienta estándar en Java.
autodoc
Para el marcado autodoc de Pike, el estándar en Pike.
gtkdoc
Para el marcado GtkDoc, ampliamente utilizado en la comunidad Gnome.
doxygen
Para el marcado Doxygen, que se puede utilizar con C, C++, Java y una variedad de otros lenguajes.

La lista anterior no está completa. Si le gustaría ver soporte para otros estilos de comentario de documento, por favor háganoslo saber (ver Listas de Correo y Envío de Informes de Errores).

También puede escribir su propio soporte de fontificación de comentarios para usarlo con c-doc-comment-style: Proporcione una variable o función *-font-lock-keywords donde * es el nombre que quiere usar en c-doc-comment-style. Si es una variable, se añade a font-lock-keywords. Si es una función, se llama al inicializar el modo y se añade el resultado. Para ver un ejemplo, consulte javadoc-font-lock-keywords en cc-fonts.el. Incluso es posible, hasta cierto punto, tipificar construcciones dentro de un comentario de documento con otras caras. Para ver un ejemplo, consulte pike autodoc comment style hacia el final de cc-fonts-el.

Si añade soporte para otro estilo de comentario de documento, considere la posibilidad de contribuir con él: envíe una nota al correo bug-cc-mode@gnu.org.



© Copyright Tano 2.023
Generated by gendoc v1.0.0

</html>