.. _25: 25 Indentación ============== La *sangría* o *identación* se refiere a la inserción o ajuste de caracteres de *espacio en blanco* (caracteres de espacio y/o tabulación) al principio de una línea de texto. Este capítulo documenta los comandos y opciones de sangría que son comunes al modo Texto y modos relacionados, así como a los modos de lenguaje de programación. Consulte :ref:`27.3`, para obtener documentación adicional sobre la indentación en los modos de programación. La forma más sencilla de realizar la sangría es la tecla :kbd:`TAB` (``TAB``). En la mayoría de los modos principales, esto ejecuta el comando ``indent-for-tab-command``. (En C y modos relacionados, ``TAB`` ejecuta el comando ``c-indent-line-or-region``, que se comporta de forma similar, ver :ref:`27.3.4`). :kbd:`TAB` (``TAB``) Inserta un espacio en blanco o aplica una sangría (o indentación) a la línea actual según el modo (comando sangría por tabulación). Si la región está activa, indenta todas las líneas dentro de ella. El comportamiento exacto de ``TAB`` depende del modo principal. En el modo Texto y modos principales relacionados, ``TAB`` normalmente inserta alguna combinación de caracteres de espacio y tabulación para avanzar el punto hasta la siguiente parada de tabulación (véase :ref:`25.2`). Para este propósito, la posición del primer carácter que no sea un espacio en blanco en la línea precedente se trata como un tabulador adicional, por lo que puede usar ``TAB`` para alinear el punto con la línea precedente. Si la región está activa (véase :ref:`12.3`), ``TAB`` actúa de forma especial: sangrará cada línea de la región de forma que su primer carácter que no sea un espacio en blanco se alinee con la línea precedente. En los modos de programación, ``TAB`` aplica una sangría a la línea de código actual de forma que tenga sentido teniendo en cuenta el código de las líneas precedentes. Si la región está activa, todas las líneas de la región tienen esta sangría. Si el punto estaba inicialmente dentro de la sangría de la línea actual, se reposiciona al primer carácter no espacio en blanco de la línea. Si sólo desea insertar un carácter de tabulación en el búfer, escriba :kbd:`Ctrl`-:kbd:`q` :kbd:`TAB` (``C-q TAB``) (véase :ref:`8.1`). .. _25.1: 25.1 Comandos de Indentado -------------------------- Aparte del comando ``TAB`` (``indent-for-tab-command``), Emacs proporciona una variedad de comandos para realizar la sangría de otras maneras. :kbd:`Ctrl`-:kbd:`Alt`-:kbd:`q` (``C-M-o``) Divide la línea actual en el punto (``split-line``, dividir línea). El texto de la línea posterior al punto se convierte en una nueva línea, con sangría en la misma columna en la que se encuentra el punto. Este comando primero desplaza el punto por encima de los espacios y tabulaciones. Después, el punto se sitúa antes de la nueva línea insertada. :kbd:`Alt`-:kbd:`m` (``M-m``) Se desplaza (hacia delante o hacia atrás) hasta el primer carácter que no sea un espacio en blanco de la línea actual (hacia atrás hasta la sangría). Si no hay caracteres que no sean espacios en blanco en la línea, se desplaza al final de la línea. :kbd:`Alt`-:kbd:`i` (``M-i``) Sangra (o indentna) los espacios en blanco en un punto, hasta el siguiente tabulador (``tab to tab-stop``). Véase :ref:`25.2`. :kbd:`Alt`-:kbd:`x` ``indent-relative`` (``M-x indent-relative``) Inserta espacios en blanco en el punto, hasta que el punto esté alineado con el primer carácter sin espacio en blanco de la línea anterior (en realidad, la última línea sin espacios en blanco). Si el punto ya está más a la derecha que eso, ejecute ``tab-to-tab-stop`` en su lugar, a menos que se llame con un argumento numérico, en cuyo caso no hace nada. :kbd:`Alt`-:kbd:`^` (``M-^``) Une la línea anterior y la actual (``delete-indentation``, eliminar sangría). Une las dos líneas limpiamente, sustituyendo cualquier sangría al principio de la línea actual, junto con el límite de la línea, por un único espacio. Como caso especial (útil para código Lisp), el espacio simple se omite si los caracteres a unir son paréntesis consecutivos de apertura y cierre, o si la unión sigue a otra nueva línea. Si hay un prefijo de relleno, ``M-^`` borra el prefijo de relleno si aparece después de la nueva línea que se borra. Véase :ref:`26.6.3`. Con un argumento de prefijo, une la línea actual con la siguiente. Si la región está activa y no se da ningún argumento de prefijo, une todas las líneas de la región. :kbd:`Ctrl`-:kbd:`Alt`-:kbd:`\\` (``C-M-\``) Indenta todas las líneas de la región, como si hubiera escrito :kbd:`TAB` (``TAB``) al principio de cada línea (``indent-region``). Si se proporciona un argumento numérico, se indentará cada línea de la región hasta ese número de columna. :kbd:`Ctrl`-:kbd:`x` :kbd:`TAB` (``C-x TAB``) Indenta todas las líneas que comienzan en la región, moviendo las líneas afectadas como una unidad rígida (``indent-rigidly``). Si se ejecuta sin argumento, este comando activa un modo transitorio para ajustar la sangría de las líneas afectadas de forma interactiva. Mientras este modo transitorio está activo, al teclear :kbd:`←` (``LEFT``, IZQUIERDA) o :kbd:`→` (``RIGTH``, DERECHA) se aplica una sangría de un espacio hacia la izquierda o hacia la derecha, respectivamente. También puede teclear :kbd:`Shift`-:kbd:`←` (``S-LEFT``) o :kbd:`Shift`-:kbd:`→` (``S-RIGHT``) para sangrar hacia la izquierda o hacia la derecha hasta el siguiente tabulador (véase :ref:`25.2`). Si se teclea cualquier otra tecla, se desactiva el modo transitorio y se actúa normalmente sobre esta tecla. Si se invoca con un argumento prefijo *n*, este comando avanza las líneas *n* espacios (sin activar el modo transitorio). Los valores negativos de *n* sangrar hacia atrás, por lo que puede eliminar toda la sangría de las líneas de la región usando un argumento negativo grande, como este: :: C-u -999 C-x TAB .. _25.2: 25.2 Topes de Tabulación ------------------------ Emacs define ciertos números de columna como *topes de tabulación*. Estos son usados como puntos de parada por ``TAB`` cuando se insertan espacios en blanco en modo Texto y modos relacionados (ver :ref:`25`), y por comandos como ``M-i`` (ver :ref:`25.1`). La variable ``tab-stop-list`` controla estas posiciones. El valor por defecto es ``nil``, lo que significa un tabulador cada 8 columnas. El valor también puede ser una lista de números de columna basados en cero (en orden creciente) en los que colocar los tabuladores. Emacs extiende la lista para siempre repitiendo la diferencia entre el último y el penúltimo elemento. En lugar de personalizar la variable ``tab-stop-list`` directamente, una forma conveniente de ver y establecer los tabuladores es mediante el comando ``M-x edit-tab-stops``. Esto cambia a un búfer que contiene una descripción de los ajustes de tabulación, que tiene este aspecto: :: : : : : : : 0 1 2 3 4 0123456789012345678901234567890123456789012345678 To install changes, type C-c C-c La primera línea contiene dos puntos en cada tabulador. Los números de las dos líneas siguientes están presentes sólo para indicar dónde están los dos puntos. Si el valor de ``tab-stop-list`` es nulo, como ocurre por defecto, no se muestran dos puntos inicialmente. Puede editar este búfer para especificar diferentes paradas de tabulación colocando dos puntos en las columnas deseadas. El búfer usa el modo de sobreescritura (ver :ref:`24.2`). Recuerde que Emacs extenderá la lista de paradas de tabulación para siempre repitiendo la diferencia entre las dos últimas paradas explícitas que coloque. Cuando haya terminado, teclee :kbd:`Ctrl`-:kbd:`c` :kbd:`Ctrl`-:kbd:`c` (``C-c C-c``) para que los nuevos tabuladores surtan efecto. Normalmente, los nuevos ajustes de tabulación se aplican a todos los búferes. Sin embargo, si ha hecho que la variable ``tab-stop-list`` sea local al búfer donde llamó a ``M-x edit-tab-stops`` (vea :ref:`50.2.3`), entonces los nuevos ajustes de tabulación se aplican sólo a ese búfer. Para guardar la configuración de tabuladores para futuras sesiones de Emacs, usa la interfaz Personalizar para guardar el valor de ``tab-stop-list`` (ver :ref:`50.1`). Tenga en cuenta que las paradas de tabulación discutidas en esta sección no tienen nada que ver con cómo se muestran los caracteres de tabulación en el búfer. Los caracteres de tabulación siempre se muestran como espacios vacíos que se extienden hasta la siguiente parada de tabulación. Véase :ref:`15.20`. 25.3 Tabulaciones vs. Espacios ------------------------------ Normalmente, los comandos de sangría insertan (o eliminan) la serie más corta posible de caracteres de tabulación y espacio para alinearse con la columna deseada. Los caracteres de tabulación se muestran como un tramo de espacio vacío que se extiende hasta el siguiente *tope tabulación*. Por defecto, hay un tabulador por cada columna de ancho de tabulación (8 por defecto). Véase :ref:`15.20`. Si lo prefiere, toda la indentación puede hacerse sólo a partir de espacios. Para ello, establezca la variable local del búfer ``indent-tabs-mode`` a ``nil``. Consulte :ref:`50.2.3`, para más información sobre la configuración de variables locales del búfer. Tenga en cuenta, sin embargo, que ``C-q TAB`` siempre inserta un carácter de tabulación, independientemente del valor de ``indent-tabs-mode``. Una razón para establecer ``indent-tabs-mode`` a ``nil`` es que no todos los editores muestran los caracteres de tabulación de la misma manera. Los Usuarios de Emacs, también, pueden tener diferentes valores personalizados de ``tab-width``. Usando sólo espacios, puede asegurarse de que su archivo tiene siempre el mismo aspecto. Si sólo le importa cómo se ve dentro de Emacs, otra forma de abordar este problema es establecer la variable ``tab-width`` en una variable local de archivo (vea :ref:`50.2.4`). También hay comandos para convertir tabuladores en espacios o viceversa, preservando siempre las columnas de todo el texto que no tenga espacios en blanco. ``M-x tabify`` escanea la región en busca de secuencias de espacios, y convierte secuencias de al menos dos espacios en tabuladores si puede hacerse sin cambiar la sangría. ``M-x untabify`` cambia todos los tabuladores de la región por el número de espacios apropiado. .. _25.4: 25.4 Funciones Prácticas para la Sangría ---------------------------------------- La variable ``tab-always-indent`` modifica el comportamiento del comando ``TAB`` (``indent-for-tab-command`` ,sangría para el comando tab). El valor por defecto, ``t``, proporciona el comportamiento descrito en Sangría. Si cambia el valor por el símbolo complete, TAB intentará primero aplicar la sangría a la línea actual y, si la línea ya estaba sangrada, intentará completar el texto en el punto (véase :ref:`27.8`). Si el valor es ``nil``, ``TAB`` aplica sangría a la línea actual sólo si el punto está en el margen izquierdo o en la sangría de la línea; en caso contrario, inserta un carácter de tabulación. Si ``tab-always-indent`` es completo, la opción de expandir o sangrar puede personalizarse aún más mediante la variable ``tab-first-completion``. Por ejemplo, si esa variable es eol, sólo completa si el punto está al final de una línea. Vea **Modo Específico de Sangría** en el Manual de Referencia de Emacs Lisp, para más detalles. El modo Electric Indent es un modo global menor que automáticamente indenta la línea después de cada ``RET`` que escriba. Este modo está activado por defecto. Para activar este modo menor, escriba ``M-x electric-indent-mode``. Para activar este modo en un único búfer, use ``M-x electric-indent-local-mode``.