pages/sphinx/emacs29/doc/build/CapConSecciones/16_BusqReemp.html
tanomarcelo 9fb8f731d7 magit; sphinx GNU/Emacs 29.1
Confirmación (commit) tanomarcelo-git
2024-02-10 16:45:29 -03:00

895 lines
No EOL
210 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="writer-html5" lang="es" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>16 Búsqueda y Reemplazo &mdash; documentación de GNU/Emacs 29.1 - 0.01</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=80d5e7a1" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=19f00094" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=d7315b5f"></script>
<script src="../_static/doctools.js?v=888ff710"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/translations.js?v=efdbd0b9"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Índice" href="../genindex.html" />
<link rel="search" title="Búsqueda" href="../search.html" />
<link rel="next" title="17 Comandos para Corregir Errores Tipográficos" href="17_CmdCorrecErrsTipogr.html" />
<link rel="prev" title="15 Controlando la Pantalla" href="15_ControlDisplay.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
GNU/Emacs 29.1
</a>
<div class="version">
Traducción Revisón: 1.07
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Buscar documentos" aria-label="Buscar documentos" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../distribucion.html">Distribución</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduccion.html">Introducción</a></li>
<li class="toctree-l1"><a class="reference internal" href="../01_OrgPant.html">1 La organización de la pantalla</a></li>
<li class="toctree-l1"><a class="reference internal" href="../02_TipoEntrUsuario.html">2 Tipos de Entrada del Usuario</a></li>
<li class="toctree-l1"><a class="reference internal" href="../03_Teclas.html">3 Teclas</a></li>
<li class="toctree-l1"><a class="reference internal" href="../04_EntrDelRaton.html">4 Entrada del Ratón</a></li>
<li class="toctree-l1"><a class="reference internal" href="../05_TeclasComands.html">5 Teclas y Comandos</a></li>
<li class="toctree-l1"><a class="reference internal" href="../06_EntrarEnEmacs.html">6 Entrar en Emacs</a></li>
<li class="toctree-l1"><a class="reference internal" href="../07_SalirDeEmacs.html">7 Cómo Salir de Emacs</a></li>
<li class="toctree-l1"><a class="reference internal" href="08_ComBasicEdic.html">8 Comandos Básicos de Edición</a></li>
<li class="toctree-l1"><a class="reference internal" href="09_ElMinibufer.html">9 El Minibúfer</a></li>
<li class="toctree-l1"><a class="reference internal" href="10_EjecutarComndPorNombre.html">10 Ejecutar Comandos por Nombre</a></li>
<li class="toctree-l1"><a class="reference internal" href="11_Ayuda.html">11 Ayuda</a></li>
<li class="toctree-l1"><a class="reference internal" href="12_LaMarca-y-LaRegion.html">12 La marca y la región</a></li>
<li class="toctree-l1"><a class="reference internal" href="13_MatarMoverTxt.html">13 Matar y Mover Texto</a></li>
<li class="toctree-l1"><a class="reference internal" href="14_Registros.html">14 Registros</a></li>
<li class="toctree-l1"><a class="reference internal" href="15_ControlDisplay.html">15 Controlando la Pantalla</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">16 Búsqueda y Reemplazo</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#busqueda-incremental">16.1 Búsqueda Incremental</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#conceptos-basicos-de-la-busqueda-incremental">16.1.1 Conceptos Básicos de la Búsqueda Incremental</a></li>
<li class="toctree-l3"><a class="reference internal" href="#repeticion-de-la-busqueda-incremental">16.1.2 Repetición de la Búsqueda Incremental</a></li>
<li class="toctree-l3"><a class="reference internal" href="#isearch-yanking">16.1.3 Isearch Yanking</a></li>
<li class="toctree-l3"><a class="reference internal" href="#errores-en-la-busqueda-incremental">16.1.4 Errores en la Búsqueda Incremental</a></li>
<li class="toctree-l3"><a class="reference internal" href="#entrada-especial-para-la-busqueda-incremental">16.1.5 Entrada Especial para la Búsqueda Incremental</a></li>
<li class="toctree-l3"><a class="reference internal" href="#no-salir-de-la-busqueda-incremental">16.1.6 No Salir de la Búsqueda Incremental</a></li>
<li class="toctree-l3"><a class="reference internal" href="#buscar-en-el-minibuffer">16.1.7. Buscar en el Minibuffer</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#busqueda-no-incremental">16.2 Búsqueda no Incremental</a></li>
<li class="toctree-l2"><a class="reference internal" href="#busqueda-de-palabras">16.3 Búsqueda de Palabras</a></li>
<li class="toctree-l2"><a class="reference internal" href="#busqueda-de-simbolos">16.4 Búsqueda de Símbolos</a></li>
<li class="toctree-l2"><a class="reference internal" href="#busqueda-por-expresiones-regulares">16.5 Búsqueda por Expresiones Regulares</a></li>
<li class="toctree-l2"><a class="reference internal" href="#sintaxis-de-las-expresiones-regulares">16.6 Sintaxis de las Expresiones Regulares</a></li>
<li class="toctree-l2"><a class="reference internal" href="#barra-invertida-en-expresiones-regulares">16.7 Barra Invertida en Expresiones Regulares</a></li>
<li class="toctree-l2"><a class="reference internal" href="#ejemplo-de-expresion-regular">16.8 Ejemplo de Expresión Regular</a></li>
<li class="toctree-l2"><a class="reference internal" href="#coincidencia-laxa-durante-la-busqueda">16.9. Coincidencia Laxa Durante la Búsqueda</a></li>
<li class="toctree-l2"><a class="reference internal" href="#comandos-de-reemplazo">16.10. Comandos de Reemplazo</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#reemplazo-incondicional">16.10.1 Reemplazo Incondicional</a></li>
<li class="toctree-l3"><a class="reference internal" href="#reemplazo-de-expresiones-regulares-expreg">16.10.2. Reemplazo de Expresiones Regulares (expreg)</a></li>
<li class="toctree-l3"><a class="reference internal" href="#comandos-reemplazar-y-coincidencias-laxas">16.10.3. Comandos Reemplazar y Coincidencias Laxas</a></li>
<li class="toctree-l3"><a class="reference internal" href="#sustitucion-de-consultas">16.10.4 Sustitución de Consultas</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#otros-comandos-de-busqueda-y-bucle">16.11. Otros Comandos de Búsqueda y Bucle</a></li>
<li class="toctree-l2"><a class="reference internal" href="#adaptar-la-busqueda-a-sus-necesidades">16.12 Adaptar la Búsqueda a sus Necesidades</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="17_CmdCorrecErrsTipogr.html">17 Comandos para Corregir Errores Tipográficos</a></li>
<li class="toctree-l1"><a class="reference internal" href="18_MacrosDeTeclado.html">18 Macros de Teclado</a></li>
<li class="toctree-l1"><a class="reference internal" href="19_ManejoArchivos.html">19 Manejo de Archivos</a></li>
<li class="toctree-l1"><a class="reference internal" href="20_UsarVariosBuferes.html">20 Uso de Varios Búferes</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">GNU/Emacs 29.1</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">16 Búsqueda y Reemplazo</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/CapConSecciones/16_BusqReemp.rst.txt" rel="nofollow"> Ver código fuente de la página</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="busqueda-y-reemplazo">
<h1>16 Búsqueda y Reemplazo<a class="headerlink" href="#busqueda-y-reemplazo" title="Link to this heading"></a></h1>
<p>Como otros editores, Emacs tiene comandos para buscar apariciones de una cadena. También tiene comandos para reemplazar ocurrencias de una cadena con una cadena diferente. Como así también hay comandos que hacen lo mismo, pero buscan patrones en lugar de cadenas fijas.</p>
<p>También puede buscar en varios archivos bajo el control de <code class="docutils literal notranslate"><span class="pre">xref</span></code> (vea <strong>Buscar y Reemplazar con Identificadores</strong>) o a través del comando Dired A (vea <strong>Operar con Archivos</strong>), o pedirle al programa grep que lo haga (vea <strong>Buscar con Grep bajo Emacs</strong>).</p>
<section id="busqueda-incremental">
<h2>16.1 Búsqueda Incremental<a class="headerlink" href="#busqueda-incremental" title="Link to this heading"></a></h2>
<p>El comando principal de búsqueda de Emacs es <em>incremental:</em> empieza a buscar en cuanto escribe el primer carácter de la cadena de búsqueda. A medida que escribe la cadena de búsqueda, Emacs le muestra dónde se encontraría la cadena (tal y como la ha escrito hasta ahora). Cuando haya tecleado suficientes caracteres para identificar el lugar que desea, puede detenerse. Dependiendo de lo que planee hacer a continuación, puede que necesite o no terminar la búsqueda explícitamente con <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>).</p>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span></code>)</p>
<blockquote>
<div><p>Búsqueda incremental hacia delante (<code class="docutils literal notranslate"><span class="pre">isearch-forward</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span></code>)</p>
<blockquote>
<div><p>Búsqueda incremental hacia atrás (<code class="docutils literal notranslate"><span class="pre">isearch-backward</span></code>).</p>
</div></blockquote>
<p>También puede invocar la búsqueda incremental desde el menú <code class="docutils literal notranslate"><span class="pre">Edit-&gt;Search</span></code> (Edición-&gt;Búsqueda) de la barra de menús.</p>
<section id="conceptos-basicos-de-la-busqueda-incremental">
<h3>16.1.1 Conceptos Básicos de la Búsqueda Incremental<a class="headerlink" href="#conceptos-basicos-de-la-busqueda-incremental" title="Link to this heading"></a></h3>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span></code>)</p>
<blockquote>
<div><p>Búsqueda incremental hacia delante (<code class="docutils literal notranslate"><span class="pre">isearch-forward</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span></code>)</p>
<blockquote>
<div><p>Búsqueda incremental hacia atrás (<code class="docutils literal notranslate"><span class="pre">isearch-backward</span></code>).</p>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">C-s</span></code> (<code class="docutils literal notranslate"><span class="pre">isearch-forward</span></code>) inicia una búsqueda incremental hacia adelante. Lee los caracteres del teclado y mueve el punto justo después del final de la siguiente aparición de esos caracteres en el búfer.</p>
<p>Por ejemplo, si teclea <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span></code>) y luego <kbd class="kbd docutils literal notranslate">F</kbd> (<code class="docutils literal notranslate"><span class="pre">F</span></code>), el cursor se situará tras la primera <code class="docutils literal notranslate"><span class="pre">F</span></code> que aparezca en el búfer después del punto de inicio. Si entonces teclea <kbd class="kbd docutils literal notranslate">O</kbd> (<code class="docutils literal notranslate"><span class="pre">O</span></code>), el cursor se mueve justo después de la primera <code class="docutils literal notranslate"><span class="pre">FO</span></code>; la <code class="docutils literal notranslate"><span class="pre">F</span></code> en esa <code class="docutils literal notranslate"><span class="pre">FO</span></code> podría no ser la primera <code class="docutils literal notranslate"><span class="pre">F</span></code> encontrada previamente. Después de otra <code class="docutils literal notranslate"><span class="pre">O</span></code>, el cursor se mueve justo después del primer <code class="docutils literal notranslate"><span class="pre">FOO</span></code>.</p>
<p>En cada paso, Emacs resalta la <em>coincidencia actual</em> -el texto del buffer que coincide con la cadena de búsqueda- usando la cara <code class="docutils literal notranslate"><span class="pre">isearch</span></code> (ver <strong>Caras de Texto</strong>). Consulte <strong>Adaptar la Búsqueda a Sus Necesidades</strong>, para conocer las distintas opciones que personalizan este resaltado. La cadena de búsqueda actual también se muestra en el área de eco.</p>
<p>Si se equivoca al escribir la cadena de búsqueda, escriba <code class="docutils literal notranslate"><span class="pre">DEL</span></code> (<code class="docutils literal notranslate"><span class="pre">isearch-delete-char</span></code>). Cada <code class="docutils literal notranslate"><span class="pre">DEL</span></code> cancela el último elemento de entrada introducido durante la búsqueda. Emacs registra un <em>nuevo elemento</em> de entrada cada vez que escribe un comando que cambia la cadena de búsqueda, la posición del punto, el éxito o fracaso de la búsqueda, la dirección de la búsqueda, la posición del otro extremo del resultado de la búsqueda actual, o la «envoltura» de la búsqueda. Consulte <strong>Errores en la Búsqueda Incremental</strong>, para más información sobre cómo tratar una búsqueda fallida.</p>
<p>Cuando esté satisfecho con el lugar al que ha llegado, escriba <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-exit</span></code>). Esto detiene la búsqueda, dejando el cursor donde lo trajo la búsqueda. Además, cualquier comando no especialmente significativo en las búsquedas detiene la búsqueda y se ejecuta a continuación. Así, tecleando <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">a</kbd> (<code class="docutils literal notranslate"><span class="pre">C-a</span></code>) se sale de la búsqueda y se mueve al principio de la línea; tecleando una de las teclas de flecha se sale de la búsqueda y se ejecuta el comando de movimiento respectivo; etc. <code class="docutils literal notranslate"><span class="pre">RET</span></code> sólo es necesario si el siguiente comando que desea escribir es un carácter de impresión, <code class="docutils literal notranslate"><span class="pre">DEL</span></code>, <code class="docutils literal notranslate"><span class="pre">RET</span></code> u otro carácter especial dentro de las búsquedas (<code class="docutils literal notranslate"><span class="pre">C-q</span></code>, <code class="docutils literal notranslate"><span class="pre">C-w</span></code>, <code class="docutils literal notranslate"><span class="pre">C-r</span></code>, <code class="docutils literal notranslate"><span class="pre">C-s</span></code>, <code class="docutils literal notranslate"><span class="pre">C-y</span></code>, <code class="docutils literal notranslate"><span class="pre">M-y</span></code>, <code class="docutils literal notranslate"><span class="pre">M-r</span></code>, <code class="docutils literal notranslate"><span class="pre">M-c</span></code>, <code class="docutils literal notranslate"><span class="pre">M-e</span></code> y algunos otros que se describen más adelante). Puede ajustar los comandos que salen de la búsqueda; consulte <strong>No Salir de la Búsqueda Incremental</strong>.</p>
<p>Como excepción especial, si se introduce <code class="docutils literal notranslate"><span class="pre">RET</span></code> cuando la cadena de búsqueda está vacía, se inicia la búsqueda no incremental (consulte <strong>Búsqueda No Incremental</strong>). (Esto puede personalizarse; consulte <strong>Adaptación de la Búsqueda a Sus Necesidades</strong>).</p>
<p>Para abandonar la búsqueda y volver al lugar donde comenzó, escriba <kbd class="kbd docutils literal notranslate">ESC</kbd><kbd class="kbd docutils literal notranslate">ESC</kbd><kbd class="kbd docutils literal notranslate">ESC</kbd> (<code class="docutils literal notranslate"><span class="pre">ESC</span> <span class="pre">ESC</span> <span class="pre">ESC</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-cancel</span></code>) o <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">g</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">g</kbd> (<code class="docutils literal notranslate"><span class="pre">C-g</span> <span class="pre">C-g</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-abort</span></code>).</p>
<p>Al salir de la búsqueda incremental, se añade el valor original del punto al anillo de marcas, sin activar la marca; por lo tanto, puede usar <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">SPACE</kbd> (<code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">C-SPC</span></code>) o <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-x</span></code>) para volver al lugar donde se encontraba antes de iniciar la búsqueda. Ver <strong>El Anillo de Marcas</strong>. (Emacs sólo hace esto si la marca no estaba ya activa; si la marca estaba activa cuando empezó la búsqueda, tanto <code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">C-SPC</span></code> como <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">C-x</span></code> irán a la marca).</p>
<p>Para buscar hacia atrás, use <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-backward</span></code>) en lugar de <code class="docutils literal notranslate"><span class="pre">C-s</span></code> para iniciar la búsqueda. Una búsqueda hacia atrás encuentra coincidencias que terminan antes del punto de inicio, del mismo modo que una búsqueda hacia delante encuentra coincidencias que empiezan después.</p>
</section>
<section id="repeticion-de-la-busqueda-incremental">
<h3>16.1.2 Repetición de la Búsqueda Incremental<a class="headerlink" href="#repeticion-de-la-busqueda-incremental" title="Link to this heading"></a></h3>
<p>Supongamos que busca <code class="docutils literal notranslate"><span class="pre">FOO</span></code> hacia adelante y encuentra una coincidencia, pero no la que esperaba encontrar: el <code class="docutils literal notranslate"><span class="pre">FOO</span></code> que buscaba aparece más adelante en el búfer. En este caso, escriba otra combinación <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-repeat-forward</span></code>) para pasar a la siguiente aparición de la cadena de búsqueda, o <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-repeat-backward</span></code>) para pasar a la aparición anterior. Puede repetir estos comandos tantas veces como desee. Alternativamente, puede proporcionar un argumento numérico de prefijo <em>n</em> a <code class="docutils literal notranslate"><span class="pre">C-s</span></code> y <code class="docutils literal notranslate"><span class="pre">C-r</span></code> para encontrar la enésima aparición siguiente o anterior. Si se excede, puede cancelar algunos comandos <code class="docutils literal notranslate"><span class="pre">C-s</span></code> con <code class="docutils literal notranslate"><span class="pre">DEL</span></code>. Del mismo modo, cada <code class="docutils literal notranslate"><span class="pre">C-r</span></code> (<code class="docutils literal notranslate"><span class="pre">isearch-repeat-backward</span></code>) en una búsqueda incremental hacia atrás repite la búsqueda hacia atrás.</p>
<p>Si hace una pequeña pausa durante la búsqueda incremental, Emacs resalta todas las otras posibles coincidencias para la cadena de búsqueda que están presentes en la pantalla. Esto le ayuda a anticipar a dónde puede llegar tecleando <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span></code>) o <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span></code>) para repetir la búsqueda. Las otras coincidencias se resaltan de forma diferente a la coincidencia actual, usando la cara personalizable <code class="docutils literal notranslate"><span class="pre">lazy-highlight</span></code> (ver <strong>Caras de Texto</strong>). Si no le gusta esta característica, puede desactivarla poniendo <code class="docutils literal notranslate"><span class="pre">isearch-lazy-highlight</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>. Para otras personalizaciones relacionadas con el resaltado de coincidencias, consulte <strong>Adaptar la Búsqueda a Sus Necesidades</strong>.</p>
<p>Después de salir de una búsqueda, puede volver a buscar la misma cadena escribiendo sólo <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span> <span class="pre">C-s</span></code>). La primera <code class="docutils literal notranslate"><span class="pre">C-s</span></code> es la tecla que invoca la búsqueda incremental, y la segunda <code class="docutils literal notranslate"><span class="pre">C-s</span></code> significa volver a buscar la última cadena buscada. Del mismo modo, <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span> <span class="pre">C-r</span></code>) busca hacia atrás la última cadena de búsqueda. Para determinar la última cadena de búsqueda, no importa si esa cadena se buscó con <code class="docutils literal notranslate"><span class="pre">C-s</span></code> o <code class="docutils literal notranslate"><span class="pre">C-r</span></code>.</p>
<p>Si está buscando hacia delante pero se da cuenta de que estaba buscando algo antes del punto de partida, escriba <code class="docutils literal notranslate"><span class="pre">C-r</span></code> para cambiar a una búsqueda hacia atrás, sin cambiar la cadena de búsqueda. Del mismo modo, <code class="docutils literal notranslate"><span class="pre">C-s</span></code> en una búsqueda hacia atrás cambia a una búsqueda hacia delante.</p>
<p>Cuando cambie la dirección de una búsqueda, el primer comando que escriba permanecerá, por defecto, en la misma coincidencia, y el cursor se moverá al otro extremo de la coincidencia. Para pasar inmediatamente a otra coincidencia, personalice la variable <code class="docutils literal notranslate"><span class="pre">isearch-repeat-on-direction-change</span></code> a <code class="docutils literal notranslate"><span class="pre">t</span></code>.</p>
<p>Si una búsqueda está fallando y pide repetirla tecleando otra vez <code class="docutils literal notranslate"><span class="pre">C-s</span></code>, vuelve a empezar desde el principio del búfer. La repetición de una búsqueda inversa fallida con <code class="docutils literal notranslate"><span class="pre">C-r</span></code> comienza de nuevo desde el final. A esto se le llama <em>dar la vuelta</em>, y una vez que esto ha sucedido, aparece <code class="docutils literal notranslate"><span class="pre">Wrapped</span></code> en la ventana de búsqueda. Si sigue yendo más allá del punto de inicio original de la búsqueda, cambiará a <code class="docutils literal notranslate"><span class="pre">Overwrapped</span></code> lo que significa que está volviendo a visitar coincidencias que ya ha visto.</p>
<p>Puede controlar lo que ocurre cuando no hay más coincidencias personalizando la opción de Usuario <code class="docutils literal notranslate"><span class="pre">isearch-wrap-pause</span></code>. Si es <code class="docutils literal notranslate"><span class="pre">t</span></code> (por defecto), señaliza un error. (Si es no, emite un <code class="docutils literal notranslate"><span class="pre">ding</span></code> y finaliza inmediatamente después de alcanzar la última coincidencia. Si es <code class="docutils literal notranslate"><span class="pre">no-ding</span></code>, se envolverá inmediatamente, pero no se emitirá un <code class="docutils literal notranslate"><span class="pre">ding</span></code>. Con los valores <code class="docutils literal notranslate"><span class="pre">no</span></code> y <code class="docutils literal notranslate"><span class="pre">no-ding</span></code> la búsqueda intentará rodear también al teclear un carácter. Por último, si es <code class="docutils literal notranslate"><span class="pre">nil</span></code>, no se ajustará nunca, sino que se detendrá en la última coincidencia.</p>
<p>Para reutilizar cadenas de búsqueda anteriores, use el <em>anillo de búsqueda</em>. Los comandos <code class="docutils literal notranslate"><span class="pre">M-p</span></code> (<code class="docutils literal notranslate"><span class="pre">isearch-ring-retreat</span></code>) y <code class="docutils literal notranslate"><span class="pre">M-n</span></code> (<code class="docutils literal notranslate"><span class="pre">isearch-ring-advance</span></code>) se mueven a través del anillo para elegir una cadena de búsqueda para reutilizar. Estos comandos dejan el elemento del anillo de búsqueda seleccionado en el minibuffer, donde puede editarlo. Escriba <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> / <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span></code>/<code class="docutils literal notranslate"><span class="pre">C-r</span></code>) o <code class="docutils literal notranslate"><span class="pre">RET</span></code> para aceptar la cadena e iniciar la búsqueda. El número de cadenas de búsqueda utilizadas más recientemente guardadas en el anillo de búsqueda se especifica mediante la variable <code class="docutils literal notranslate"><span class="pre">search-ring-max</span></code>, 16 por defecto.</p>
<p>Para editar la cadena de búsqueda actual en el minibuffer sin sustituirla por elementos del anillo de búsqueda, escribe <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">e</kbd> (<code class="docutils literal notranslate"><span class="pre">M-e</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-edit-string</span></code>) o haga clic con <code class="docutils literal notranslate"><span class="pre">ratón-1</span></code> en el minibuffer. Escriba <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>), <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span></code>) o <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span></code>) para terminar de editar la cadena y buscarla. Teclee <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">f</kbd> (<code class="docutils literal notranslate"><span class="pre">C-f</span></code>) o <kbd class="kbd docutils literal notranslate"></kbd> (<code class="docutils literal notranslate"><span class="pre">RIGHT</span></code>) para añadir a la cadena de búsqueda los caracteres siguientes al punto del buffer desde el que inició la búsqueda.</p>
</section>
<section id="isearch-yanking">
<h3>16.1.3 Isearch Yanking<a class="headerlink" href="#isearch-yanking" title="Link to this heading"></a></h3>
<p>En muchos casos, querrá utilizar texto en o cerca del punto como su cadena de búsqueda. Los comandos descritos en esta subsección le permiten hacerlo cómodamente.</p>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">w</kbd> (<code class="docutils literal notranslate"><span class="pre">C-w</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-yank-word-or-char</span></code>) añade el siguiente carácter o palabra en el punto a la cadena de búsqueda. Es una forma sencilla de buscar otra aparición del texto en el punto. (La decisión de copiar un carácter o una palabra es heurística.) Con un argumento numérico prefijo <em>n</em>, añade los <em>n</em> caracteres o palabras siguientes.</p>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd><kbd class="kbd docutils literal notranslate">w</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-w</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-yank-symbol-or-char</span></code>) añade el siguiente carácter o símbolo en el punto a la cadena de búsqueda. Es una forma sencilla de buscar otra aparición del símbolo en el punto. (La decisión de copiar un carácter o un símbolo es heurística.) Con un argumento numérico de prefijo <em>n</em>, añade los <em>n</em> caracteres o símbolos siguientes.</p>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">e</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">C-e</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-yank-line</span></code>) añade el resto de la línea actual a la cadena de búsqueda. Si el punto ya está al final de la línea, añade la línea siguiente. Con un argumento prefijo <em>n</em>, añade las <em>n</em> líneas siguientes.</p>
<p>Del mismo modo, <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">z</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-z</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-yank-until-char</span></code>) añade a la cadena de búsqueda todo lo que va desde el punto hasta la siguiente aparición de un carácter especificado (sin incluir dicho carácter). Esto es especialmente útil para macros de teclado, por ejemplo en lenguajes de programación o de marcado en los que ese carácter marca un límite de token. Con un argumento numérico de prefijo <em>n</em>, el comando añade todo desde el punto hasta la enésima aparición del carácter especificado.</p>
<p>Dentro de la búsqueda incremental, <code class="docutils literal notranslate"><span class="pre">C-y</span></code> (<code class="docutils literal notranslate"><span class="pre">isearch-yank-kill</span></code>) añade la muerte actual a la cadena de búsqueda. <code class="docutils literal notranslate"><span class="pre">M-y</span></code> (<code class="docutils literal notranslate"><span class="pre">isearch-yank-pop</span></code>), si se invoca después de <code class="docutils literal notranslate"><span class="pre">C-y</span></code> durante la búsqueda incremental, sustituye el texto añadido por una eliminación anterior, de forma similar al comando <code class="docutils literal notranslate"><span class="pre">M-y</span></code> (<code class="docutils literal notranslate"><span class="pre">yank-pop</span></code>) habitual. Hacer clic con <code class="docutils literal notranslate"><span class="pre">ratón-2</span></code> en el área de eco añade la selección X actual (véase <strong>Cortar y Pegar con Otras Aplicaciones de Ventana</strong>) a la cadena de búsqueda (<code class="docutils literal notranslate"><span class="pre">isearch-yank-x-selection</span></code>).</p>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">d</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-d</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-del-char</span></code>) borra el último carácter de la cadena de búsqueda, y <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-:kbd: (<code class="docutils literal notranslate"><span class="pre">C-M-y</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-yank-char</span></code>) añade el carácter después del punto a la cadena de búsqueda. Un método alternativo para añadir el carácter después del punto es entrar en el minibuffer con M-e (véase Repetición de la Búsqueda Incremental) y teclear C-f o RIGHT al final de la cadena de búsqueda en el minibuffer. Cada C-f o DERECHA que escriba añade otro carácter después de punto a la cadena de búsqueda.</p>
<p>Normalmente, cuando la búsqueda no distingue entre mayúsculas y minúsculas, el texto que se introduce en la cadena de búsqueda se convierte a minúsculas, de modo que la búsqueda sigue sin distinguir entre mayúsculas y minúsculas (véase <strong>Distinción entre Mayúsculas y Minúsculas</strong>). Sin embargo, si el valor de la variable <code class="docutils literal notranslate"><span class="pre">search-upper-case</span></code> (véase <strong>search-upper-case</strong>) es distinto de <code class="docutils literal notranslate"><span class="pre">not-yanks</span></code>, se desactiva esta conversión a minúsculas.</p>
<p>Para iniciar una nueva búsqueda incremental con el texto cerca del punto yanked en la cadena de búsqueda inicial, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">.</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">M-.</span></code>) que ejecuta el comando <code class="docutils literal notranslate"><span class="pre">isearch-forward-thing-at-point</span></code>. Si la región estaba activa, entonces introduce el texto de la región en la cadena de búsqueda. En caso contrario, intenta extraer una URL, un símbolo o una expresión que se encuentre cerca del punto. La opción de usuario <code class="docutils literal notranslate"><span class="pre">isearch-forward-thing-at-point</span></code> define lo que se va a extraer.</p>
</section>
<section id="errores-en-la-busqueda-incremental">
<h3>16.1.4 Errores en la Búsqueda Incremental<a class="headerlink" href="#errores-en-la-busqueda-incremental" title="Link to this heading"></a></h3>
<p>Si su cadena no se encuentra en absoluto, el área de eco dice <code class="docutils literal notranslate"><span class="pre">Failing</span> <span class="pre">I-Search</span></code> (Fallo de I-Search), y el cursor se mueve más allá del lugar donde Emacs encontró tanto de su cadena como pudo. Así, si busca <code class="docutils literal notranslate"><span class="pre">FOOT</span></code>, y no hay <code class="docutils literal notranslate"><span class="pre">FOOT</span></code>, puede ver el cursor después de <code class="docutils literal notranslate"><span class="pre">FOO</span></code> en <code class="docutils literal notranslate"><span class="pre">FOOT</span></code>. En el área de eco, la parte de la cadena de búsqueda que no ha encontrado coincidencias se resalta con la cara <code class="docutils literal notranslate"><span class="pre">isearch-fail</span></code>.</p>
<p>En este punto, hay varias cosas que puede hacer. Si se ha equivocado al teclear la cadena, use <code class="docutils literal notranslate"><span class="pre">DEL</span></code> para cancelar una entrada anterior (vea <strong>Conceptos Básicos de la Búsqueda Incremental</strong>), <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">d</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-d</span></code>) para borrar un carácter cada vez, o <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">e</kbd> (<code class="docutils literal notranslate"><span class="pre">M-e</span></code>) para editarla. Si le gusta el lugar que ha encontrado, puede teclear <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>) para permanecer en él. O puede teclear <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">g</kbd> (<code class="docutils literal notranslate"><span class="pre">C-g</span></code>), que elimina de la cadena de búsqueda los caracteres que no se pudieron encontrar (la <code class="docutils literal notranslate"><span class="pre">T</span></code> en <code class="docutils literal notranslate"><span class="pre">FOOT</span></code>), dejando los que sí se encontraron (el <code class="docutils literal notranslate"><span class="pre">FOO</span></code> en <code class="docutils literal notranslate"><span class="pre">FOOT</span></code>). Un segundo <code class="docutils literal notranslate"><span class="pre">C-g</span></code> en ese punto cancela la búsqueda por completo, devolviendo el punto a donde estaba cuando se inició la búsqueda.</p>
<p>La orden de salir, <code class="docutils literal notranslate"><span class="pre">C-g</span></code>, hace cosas especiales durante las búsquedas; lo que hace depende del estado de la búsqueda. Si la búsqueda ha encontrado lo que especificó y está esperando la entrada, <code class="docutils literal notranslate"><span class="pre">C-g</span></code> cancela toda la búsqueda, moviendo el cursor de vuelta al punto donde comenzó la búsqueda. Si se teclea <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">g</kbd> (<code class="docutils literal notranslate"><span class="pre">C-g</span></code>) cuando hay caracteres en la cadena de búsqueda que no han sido encontrados, porque Emacs todavía los está buscando, o porque ha fallado en encontrarlos, entonces los caracteres de la cadena de búsqueda que no han sido encontrados son descartados de la cadena de búsqueda. Una vez eliminados, la búsqueda se ha realizado con éxito y está a la espera de más entradas, por lo que una segunda <code class="docutils literal notranslate"><span class="pre">C-g</span></code> cancelará toda la búsqueda.</p>
</section>
<section id="entrada-especial-para-la-busqueda-incremental">
<h3>16.1.5 Entrada Especial para la Búsqueda Incremental<a class="headerlink" href="#entrada-especial-para-la-busqueda-incremental" title="Link to this heading"></a></h3>
<p>Además de los caracteres descritos en las subsecciones anteriores, algunos de los caracteres que se introducen durante la búsqueda incremental tienen efectos especiales. A continuación se describen.</p>
<p>Para activar la coincidencia de espacios laxos (véase <strong>Coincidencia de Espacios Laxos</strong>), escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">SPACE</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">SPC</span></code>).</p>
<p>Para cambiar la distinción entre mayúsculas y minúsculas de la búsqueda, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> (<code class="docutils literal notranslate"><span class="pre">M-c</span></code>) o <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">c</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">c</span></code>). Véase <strong>Distinción entre Mayúsculas y Minúsculas</strong>. Si la cadena de búsqueda incluye letras mayúsculas, la búsqueda distingue entre mayúsculas y minúsculas por defecto.</p>
<p>Para cambiar si la búsqueda considerará o no caracteres similares y equivalentes como coincidencia, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">'</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">'</span></code>). Véase el <strong>plegado de caracteres</strong>. Si la cadena de búsqueda incluye caracteres acentuados, se desactiva el plegado de caracteres durante esa búsqueda.</p>
<p>Para activar o desactivar la búsqueda de texto invisible, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">i</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">i</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-toggle-invisible</span></code>). Véase <strong>Búsqueda de Esquemas</strong>.</p>
<p>Para alternar entre la búsqueda incremental sin expresiones regulares y con expresiones regulares, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">M-r</span></code>) o <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">r</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-toggle-regexp</span></code>). Vease <strong>Búsqueda por Expresiones Regulares</strong>.</p>
<p>Para alternar entre el modo de símbolos, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">_</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">_</span></code>). Véase <strong>Búsqueda de Símbolos</strong>.</p>
<p>Para buscar un carácter de nueva línea, escriba <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">j</kbd> (<code class="docutils literal notranslate"><span class="pre">C-j</span></code>) como parte de la cadena de búsqueda.</p>
<p>Para buscar caracteres no ASCII, utilice uno de los siguientes métodos durante la búsqueda incremental:</p>
<blockquote>
<div><ul>
<li><p>Escriba <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">q</kbd> (<code class="docutils literal notranslate"><span class="pre">C-q</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-quote-char</span></code>), seguido de un carácter no gráfico o una secuencia de dígitos octales. Esto añade un carácter a la cadena de búsqueda,
de forma similar a la inserción en un búfer mediante <code class="docutils literal notranslate"><span class="pre">C-q</span></code> (véase <strong>Inserción de Texto</strong>). Por ejemplo, <code class="docutils literal notranslate"><span class="pre">C-q</span> <span class="pre">C-s</span></code> durante la búsqueda incremental añade el carácter <code class="docutils literal notranslate"><span class="pre">control-S</span></code>
a la cadena de búsqueda.</p></li>
<li><p>Use un método de entrada (véase <strong>Métodos de Entrada</strong>). Si un método de entrada está activado en el búfer actual al iniciar la búsqueda, el mismo método estará activo en el
minibúfer al escribir la cadena de búsqueda. Mientras escribe la cadena de búsqueda, puede alternar el método de entrada con <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd compound docutils literal notranslate"><kbd class="kbd docutils literal notranslate">`</kbd> <kbd class="kbd docutils literal notranslate">(``C</kbd>-<kbd class="kbd docutils literal notranslate">`</kbd></kbd>,
<code class="docutils literal notranslate"><span class="pre">isearch-toggle-input-method</span></code>). También puede activar un método de entrada no predeterminado con <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">^</kbd> (<code class="docutils literal notranslate"><span class="pre">C-^</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-toggle-specified-input-method</span></code>), que
solicita el nombre del método de entrada. Cuando un método de entrada está activo durante la búsqueda incremental, el mensaje de búsqueda incluye el mnemotécnico del método de
entrada, de la siguiente manera:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">I</span><span class="o">-</span><span class="n">search</span> <span class="p">[</span><span class="n">im</span><span class="p">]:</span>
</pre></div>
</div>
</li>
</ul>
<p>donde <em>im</em> es el mnemónico del método de entrada activo. Cualquier método de entrada que active durante la búsqueda incremental permanece activado en el búfer actual después. Por
último, puede activar temporalmente un método de entrada transitorio (véase <strong>Método de Entrada Transitorio</strong>) con <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd compound docutils literal notranslate"><kbd class="kbd docutils literal notranslate">`</kbd> <kbd class="kbd docutils literal notranslate">(``C</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">`</kbd></kbd>,
<code class="docutils literal notranslate"><span class="pre">isearch-transient-input-method</span></code>) para insertar un único carácter en la cadena de búsqueda utilizando un método de entrada, y desactivar automáticamente el método de entrada después.</p>
<ul class="simple">
<li><p>Escriba <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">8</kbd><kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">8</span> <span class="pre">RET</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-char-by-name</span></code>), seguido de un nombre Unicode o un punto de código en hexadecimal. Esto añade el
carácter especificado a la cadena de búsqueda, de forma similar al comando habitual <code class="docutils literal notranslate"><span class="pre">insert-char</span></code> (véase <strong>Insertar Texto</strong>).</p></li>
</ul>
</div></blockquote>
<p>También puede incluir secuencias Emoji en la cadena de búsqueda. Escriba <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">8</kbd><kbd class="kbd docutils literal notranslate">e</kbd><kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">8</span> <span class="pre">e</span> <span class="pre">RET</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-emoji-by-name</span></code>), seguido del nombre Unicode de un Emoji (por ejemplo, <code class="docutils literal notranslate"><span class="pre">smiling</span> <span class="pre">face</span></code> (cara sonriente) o <code class="docutils literal notranslate"><span class="pre">heart</span> <span class="pre">whith</span> <span class="pre">arrow</span></code> (corazón con flecha)). Esto añade el Emoji especificado a la cadena de búsqueda. Si no conoce el nombre del Emoji que desea buscar, puede usar <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd><kbd class="kbd docutils literal notranslate">8</kbd><kbd class="kbd docutils literal notranslate">e</kbd><kbd class="kbd docutils literal notranslate">l</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">8</span> <span class="pre">e</span> <span class="pre">l</span></code>, <code class="docutils literal notranslate"><span class="pre">emoji-list</span></code>) y <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">8</kbd><kbd class="kbd docutils literal notranslate">e</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">8</span> <span class="pre">e</span> <span class="pre">d</span></code>, <code class="docutils literal notranslate"><span class="pre">emoji-describe</span></code>) (consulte <strong>Métodos de Entrada</strong>).</p>
<p>Si se teclea <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">o</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">o</span></code>) en la búsqueda incremental, se invoca <code class="docutils literal notranslate"><span class="pre">isearch-occur</span></code>, que ejecuta occur con la cadena de búsqueda actual. Véase <strong>Otros Comandos de Búsqueda y Bucle</strong>.</p>
<p>Si se escribe <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">%</kbd> (<code class="docutils literal notranslate"><span class="pre">M-%</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-query-replace</span></code>) en la búsqueda incremental, se invoca <code class="docutils literal notranslate"><span class="pre">query-replace</span></code> o <code class="docutils literal notranslate"><span class="pre">query-replace-regexp</span></code> (dependiendo del modo de búsqueda) y se usa la cadena de búsqueda actual como cadena a reemplazar. Un argumento de prefijo negativo significa reemplazar hacia atrás. Véase <strong>Reemplazar Consulta</strong>. Si se escribe <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">%</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-%</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-query-replace-regexp</span></code>), se invoca <code class="docutils literal notranslate"><span class="pre">query-replace-regexp</span></code> con la cadena de búsqueda actual usada como expreg para reemplazar.</p>
<p>Al escribir <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">TAB</kbd> (<code class="docutils literal notranslate"><span class="pre">M-TAB</span></code>) en la búsqueda incremental se invoca <code class="docutils literal notranslate"><span class="pre">isearch-complete</span></code>, que intenta completar la cadena de búsqueda utilizando el anillo de búsqueda (las cadenas de búsqueda anteriores que utilizó) como una lista de alternativas de finalización. Véase <strong>Completar</strong>. En muchos sistemas operativos, la secuencia de teclas <code class="docutils literal notranslate"><span class="pre">M-TAB</span></code> es capturada por el gestor de ventanas, por lo que deberá volver a enlazar <code class="docutils literal notranslate"><span class="pre">isearch-completar</span></code> a otra secuencia de teclas si desea utilizarla (consulte <strong>Cambio de Enlaces de Teclas de Forma Interactiva</strong>).</p>
<p>Puede salir de la búsqueda dejando las coincidencias resaltadas escribiendo <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">h</kbd><kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">h</span> <span class="pre">r</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-highlight-regexp</span></code>). Esto ejecuta <code class="docutils literal notranslate"><span class="pre">highlight-regexp</span></code> (véase <strong>Resaltado Interactivo</strong>), pasándole la regexp derivada de la cadena de búsqueda y pidiéndole la cara a utilizar para resaltar. Para resaltar líneas enteras que contengan coincidencias (en lugar de sólo las coincidencias), escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">h</kbd><kbd class="kbd docutils literal notranslate">l</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">h</span> <span class="pre">l</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-highlight-lines-matching-regexp</span></code>). En ambos casos, para eliminar el resaltado, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">h</kbd><kbd class="kbd docutils literal notranslate">u</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">h</span> <span class="pre">u</span></code>, <code class="docutils literal notranslate"><span class="pre">unhighlight-regexp</span></code>).</p>
<p>Cuando la búsqueda incremental está activa, puede escribir <kbd class="kbd docutils literal notranslate">Ctrl</kbd><kbd class="kbd docutils literal notranslate">h</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd><kbd class="kbd docutils literal notranslate">h</kbd> (<code class="docutils literal notranslate"><span class="pre">C-h</span> <span class="pre">C-h</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-help-map</span></code>) para acceder a las opciones de ayuda interactiva, incluida una lista de combinaciones de teclas especiales. Estas combinaciones de teclas forman parte del mapa de teclas <code class="docutils literal notranslate"><span class="pre">isearch-mode-map</span></code> (véase <strong>Mapas de Teclas</strong>).</p>
<p>Cuando la búsqueda incremental está activada, al teclear <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">&gt;</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">M-&gt;</span></code>) se irá a la última aparición de la cadena de búsqueda, y <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">&lt;</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">M-&lt;</span></code>) se irá a la primera aparición. Con un argumento numérico de prefijo <em>n</em>, estos comandos irán a la enésima aparición de la cadena de búsqueda contando desde el principio o el final del búfer, respectivamente.</p>
</section>
<section id="no-salir-de-la-busqueda-incremental">
<h3>16.1.6 No Salir de la Búsqueda Incremental<a class="headerlink" href="#no-salir-de-la-busqueda-incremental" title="Link to this heading"></a></h3>
<p>Esta subsección describe cómo controlar si al teclear un comando no específicamente significativo en las búsquedas se sale de la búsqueda antes de ejecutar el comando. También describe tres categorías de órdenes que se pueden escribir sin salir de la búsqueda incremental actual, aunque no formen parte esta.</p>
<p>Normalmente, al teclear un comando que no está vinculado a la búsqueda incremental se sale de la búsqueda antes de ejecutar el comando. De este modo, el comando opera en el búfer desde la que invocó la búsqueda. Sin embargo, si personaliza la variable <code class="docutils literal notranslate"><span class="pre">search-exit-option</span></code> a <code class="docutils literal notranslate"><span class="pre">append</span></code>, los caracteres que escriba que no sean interpretados por la búsqueda incremental simplemente se añaden a la cadena de búsqueda. Esto permite incluir en la cadena de búsqueda caracteres de control, como <code class="docutils literal notranslate"><span class="pre">C-a</span></code>, que normalmente saldrían de la búsqueda e invocarían el comando vinculado a ellos en el búfer.</p>
<p><strong>Argumentos de Prefijo</strong></p>
<blockquote>
<div><p>En la búsqueda incremental, cuando se escribe un comando que especifica un argumento prefijo (véase <strong>Argumentos Numéricos</strong>), por defecto se aplicará a la siguiente acción de la
búsqueda o al comando que sale de la búsqueda. En otras palabras, introducir un argumento prefijo no terminará por sí mismo la búsqueda.</p>
<p>En versiones anteriores de Emacs, la introducción de un argumento prefijo siempre terminaba la búsqueda. Puede volver a este comportamiento estableciendo la variable
<code class="docutils literal notranslate"><span class="pre">isearch-allow-prefix</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>.</p>
<p>Cuando <code class="docutils literal notranslate"><span class="pre">isearch-allow-scroll</span></code> es distinto de <code class="docutils literal notranslate"><span class="pre">nil</span></code> (véase más abajo), los argumentos de prefijo tienen siempre el comportamiento por defecto descrito anteriormente, es decir, no
terminan la búsqueda, aunque <code class="docutils literal notranslate"><span class="pre">isearch-allow-prefix</span></code> sea <code class="docutils literal notranslate"><span class="pre">nil</span></code>.</p>
</div></blockquote>
<p><strong>Comandos de Desplazamiento</strong></p>
<blockquote>
<div><p>Normalmente, los comandos de desplazamiento salen de la búsqueda incremental. Pero si cambia la variable <code class="docutils literal notranslate"><span class="pre">isearch-allow-scroll</span></code> a un valor no nulo, podrá utilizar la barra de
desplazamiento, así como comandos de desplazamiento de teclado como <code class="docutils literal notranslate"><span class="pre">C-v</span></code>, <code class="docutils literal notranslate"><span class="pre">M-v</span></code> y <code class="docutils literal notranslate"><span class="pre">C-l</span></code> (véase <strong>Desplazamiento</strong>), que tienen una propiedad <code class="docutils literal notranslate"><span class="pre">scroll-command</span></code> no nula, sin
salir de la búsqueda. Esto sólo se aplica cuando se invocan estos comandos a través de sus secuencias de teclas vinculadas; si se escribe <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> (<code class="docutils literal notranslate"><span class="pre">M-x</span></code>), se saldrá de
la búsqueda. Puede dar argumentos prefijados a estos comandos de la forma habitual. Normalmente, esta función no permite desplazarse por la coincidencia actual, pero si se personaliza
<code class="docutils literal notranslate"><span class="pre">isearch-allow-scroll</span></code> con el valor especial <code class="docutils literal notranslate"><span class="pre">unlimited</span></code>, se elimina esta restricción.</p>
<p>La función <code class="docutils literal notranslate"><span class="pre">isearch-allow-scroll</span></code> también afecta a otros comandos, como <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">2</span></code> (<code class="docutils literal notranslate"><span class="pre">split-window-below</span></code>) y <code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">^</span></code> (<code class="docutils literal notranslate"><span class="pre">enlarge-window</span></code>), que no se desplazan exactamente pero sí
afectan a la posición del texto en la pantalla. De hecho, afecta a cualquier comando que tenga una propiedad <code class="docutils literal notranslate"><span class="pre">isearch-scroll</span></code> no nula. Así que puede controlar qué comandos se ven
afectados cambiando estas propiedades.</p>
<p>Por ejemplo, para hacer que <code class="docutils literal notranslate"><span class="pre">C-h</span> <span class="pre">l</span></code> se pueda usar dentro de una búsqueda incremental en todas las futuras sesiones de Emacs, use <code class="docutils literal notranslate"><span class="pre">C-h</span> <span class="pre">c</span></code> para encontrar qué comando ejecuta (ver
<strong>Documentación para una Clave</strong>), que es <code class="docutils literal notranslate"><span class="pre">view-lossage</span></code>. Luego puede poner la siguiente línea en su archivo init (ver <strong>El Archivo de Inicialización de Emacs</strong>):</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="n">put</span> <span class="s1">&#39;view-lossage &#39;</span><span class="n">isearch</span><span class="o">-</span><span class="n">scroll</span> <span class="n">t</span><span class="p">)</span>
</pre></div>
</div>
<p>Esta función puede aplicarse a cualquier comando que no cambie permanentemente el punto, el contenido del búfer, los datos coincidentes, el búfer actual o la ventana y el marco
seleccionados. El comando no debe intentar por sí mismo una búsqueda incremental. Esta función se desactiva si <code class="docutils literal notranslate"><span class="pre">isearch-allow-scroll</span></code> es <code class="docutils literal notranslate"><span class="pre">nil</span></code> (valor por defecto).</p>
<p>Del mismo modo, si cambia la variable <code class="docutils literal notranslate"><span class="pre">isearch-allow-motion</span></code> a un valor no nulo, se habilita el uso de los comandos de movimiento del teclado <code class="docutils literal notranslate"><span class="pre">M-&lt;</span></code> (<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">&lt;</kbd>) , <code class="docutils literal notranslate"><span class="pre">M-&gt;</span></code>
(<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">&gt;</kbd>), <code class="docutils literal notranslate"><span class="pre">C-v</span></code> (<kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">v</kbd>) y <code class="docutils literal notranslate"><span class="pre">M-v</span></code> (<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">v</kbd>), para desplazarse respectivamente a la primera aparición de la cadena de búsqueda actual en el
búfer, la última, la primera después de la ventana actual y la última antes de la ventana actual. La dirección de búsqueda no cambia cuando se usan estos comandos de movimiento, a
menos que cambie la variable <code class="docutils literal notranslate"><span class="pre">isearch-motion-changes-direction</span></code> a un valor no nulo, en cuyo caso la dirección de búsqueda es hacia adelante después de <code class="docutils literal notranslate"><span class="pre">M-&lt;</span></code> y <code class="docutils literal notranslate"><span class="pre">C-v</span></code>, y hacia
atrás después de <code class="docutils literal notranslate"><span class="pre">M-&gt;</span></code> y <code class="docutils literal notranslate"><span class="pre">M-v</span></code>.</p>
</div></blockquote>
<p><strong>Comandos de Movimiento</strong></p>
<blockquote>
<div><p>Cuando <code class="docutils literal notranslate"><span class="pre">isearch-yank-on-move</span></code> está configurado a <code class="docutils literal notranslate"><span class="pre">shift</span></code>, puede extender la cadena de búsqueda manteniendo pulsada la tecla <kbd class="kbd docutils literal notranslate">Shift</kbd> mientras escribe comandos de movimiento
del cursor. Tirará del texto que termine en la nueva posición después de mover el punto en el búfer actual.</p>
<p>Cuando <code class="docutils literal notranslate"><span class="pre">isearch-yank-on-move</span></code> es <code class="docutils literal notranslate"><span class="pre">t</span></code>, puede ampliar la cadena de búsqueda sin utilizar la tecla <code class="docutils literal notranslate"><span class="pre">Mayús</span></code> (<kbd class="kbd docutils literal notranslate">Shift</kbd>) para los comandos de movimiento del cursor, pero sólo se
aplica a determinados comandos de movimiento que tienen la propiedad <code class="docutils literal notranslate"><span class="pre">isearch-move</span></code> en sus símbolos.</p>
</div></blockquote>
</section>
<section id="buscar-en-el-minibuffer">
<h3>16.1.7. Buscar en el Minibuffer<a class="headerlink" href="#buscar-en-el-minibuffer" title="Link to this heading"></a></h3>
<p>Si inicia una búsqueda incremental mientras el minibúfer está activo, Emacs busca en el contenido de este. A diferencia de la búsqueda en un búfer ordinario, la cadena de búsqueda no se muestra en el área de eco, porque ésta se usa para mostrar el minibúfer.</p>
<p>Si falla una búsqueda incremental en el minibúfer, intente buscar en el historial del propio minibúfer. Véase <strong>Historial del Minibúfer</strong>. Puede visualizar el minibúfer y su historial como una serie de páginas, con el primer elemento del historial en la primera página y el contenido del minibúfer actual en la última. Una búsqueda hacia adelante, <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span></code>), busca hacia páginas posteriores; una búsqueda hacia atrás, <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span></code>), busca hacia páginas anteriores. Al igual que en la búsqueda normal en el búfer, una búsqueda fallida puede envolverse, yendo de la última página a la primera o viceversa.</p>
<p>Cuando la coincidencia actual se encuentra en un elemento del historial, dicho elemento se introduce en el minibúfer. Si sale de la búsqueda incremental normalmente (por ejemplo, tecleando <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>)), permanece en el minibúfer. Al cancelar la búsqueda, con <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">g</kbd> (<code class="docutils literal notranslate"><span class="pre">C-g</span></code>), se restaura el contenido del minibúfer cuando se inició la búsqueda.</p>
</section>
</section>
<section id="busqueda-no-incremental">
<h2>16.2 Búsqueda no Incremental<a class="headerlink" href="#busqueda-no-incremental" title="Link to this heading"></a></h2>
<p>Emacs también tiene comandos convencionales de búsqueda no incremental, que requieren que escriba la cadena de búsqueda completa antes de que comience la búsqueda.</p>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>cadena</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span> <span class="pre">RET</span></code> <em>cadena</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Busca <em>cadena</em>.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>cadena</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span> <span class="pre">RET</span></code> <em>cadena</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Búsqueda hacia atrás de <em>cadena</em>.</p>
</div></blockquote>
<p>Para iniciar una búsqueda no incremental, escriba primero <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span> <span class="pre">RET</span></code>). Esto entra en el minibúfer para leer la cadena de búsqueda; termina la cadena con <code class="docutils literal notranslate"><span class="pre">RET</span></code>, y entonces tiene lugar la búsqueda. Si no se encuentra la cadena, el comando de búsqueda indica un error.</p>
<p>Cuando se teclea <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span> <span class="pre">RET</span></code>), el <code class="docutils literal notranslate"><span class="pre">C-s</span></code> invoca la búsqueda incremental como de costumbre. Ese comando está especialmente programado para invocar el comando de búsqueda no incremental, si la cadena que especifica está vacía. (De lo contrario, un argumento vacío sería inútil.) <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span> <span class="pre">RET</span></code>) hace lo mismo, invocando el comando de búsqueda no incremental hacia atrás.</p>
<p>La búsqueda no incremental también puede invocarse desde el menú <code class="docutils literal notranslate"><span class="pre">Edit-&gt;Search</span></code> (Edición-&gt;Búsqueda) de la barra de menús.</p>
<p>También puede usar dos comandos más simples, <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">search-forward</span></code> y <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">search-backward</span></code>. Estos comandos buscan las cadenas literales que especifique y no admiten ninguna de las funciones de búsqueda laxa (consulte <strong>Búsqueda de Coincidencias Laxas</strong>), excepto la combinación de mayúsculas y minúsculas.</p>
</section>
<section id="busqueda-de-palabras">
<h2>16.3 Búsqueda de Palabras<a class="headerlink" href="#busqueda-de-palabras" title="Link to this heading"></a></h2>
<p>Una búsqueda de palabras encuentra una secuencia de palabras sin tener en cuenta el tipo de puntuación entre ellas. Por ejemplo, si introduce una cadena de búsqueda formada por dos palabras separadas por un solo espacio, la búsqueda coincidirá con cualquier secuencia de esas dos palabras separadas por uno o más espacios, nuevas líneas u otros caracteres de puntuación. Esto resulta especialmente útil para buscar en documentos de texto, ya que no tiene que preocuparse de si las palabras que busca están separadas por nuevas líneas o espacios. Tenga en cuenta que los modos principales para lenguajes de programación u otros modos especializados pueden modificar la definición de una palabra para adaptarla a sus necesidades sintácticas.</p>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">w</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">w</span></code>)</p>
<blockquote>
<div><p>Si la búsqueda incremental está activa, conmuta el modo de búsqueda por palabra (<code class="docutils literal notranslate"><span class="pre">isearch-toggle-word</span></code>); de lo contrario, inicia una búsqueda incremental por palabra hacia adelante
(<code class="docutils literal notranslate"><span class="pre">isearch-forward-word</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Altf</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>palabra</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">w</span> <span class="pre">RET</span></code> <em>palabra</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Busca palabras, usando una búsqueda no incremental de palabras hacia adelante.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">w</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>palabra</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">w</span> <span class="pre">C-r</span> <span class="pre">RET</span></code> <em>palabras</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Busca palabras hacia atrás, usando una búsqueda de palabras no incremental.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">w</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">M-w</span></code>)</p>
<blockquote>
<div><p>Busca en la Web el texto de la región.</p>
</div></blockquote>
<p>Para iniciar una búsqueda incremental de palabras hacia adelante, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">w</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">w</span></code>). Si la búsqueda incremental no está ya activa, se ejecuta el comando <code class="docutils literal notranslate"><span class="pre">isearch-forward-word</span></code>. Si la búsqueda incremental ya está activa (ya sea hacia adelante o hacia atrás), <code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">w</span></code> ejecute el comando <code class="docutils literal notranslate"><span class="pre">isearch-toggle-word</span></code>, que cambia a una búsqueda de palabras manteniendo la dirección de la búsqueda y la cadena de búsqueda actual sin cambios. Puede volver a desactivar la búsqueda por palabra escribiendo <code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">w</span></code> de nuevo.</p>
<p>Para iniciar una búsqueda de palabras no incremental, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">w</kbd><kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">w</span> <span class="pre">RET</span></code>) para una búsqueda hacia adelante, o <kbd class="kbd docutils literal notranslate">Alt</kbd><kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">w</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">w</span> <span class="pre">C-r</span> <span class="pre">RET</span></code>) para una búsqueda hacia atrás. Estos comandos ejecutan la búsqueda de palabras hacia delante y la búsqueda de palabras hacia atrás, respectivamente.</p>
<p>Las búsquedas de palabras incrementales y no incrementales difieren ligeramente en la forma de encontrar una coincidencia. En una búsqueda no incremental, cada palabra de la cadena de búsqueda debe coincidir exactamente con una palabra entera. En una búsqueda incremental, la coincidencia es más laxa: mientras escribe la cadena de búsqueda, no es necesario que la primera y la última palabra coincidan con palabras completas. Esto se hace para que la búsqueda pueda realizarse de forma incremental a medida que se escribe. Esta laxitud adicional no se aplica al resaltado impreciso (véase <strong>Búsqueda Incremental</strong>), que siempre coincide con palabras enteras. Mientras escribe la cadena de búsqueda, aparece <code class="docutils literal notranslate"><span class="pre">Pending</span></code> (Pendiente) en el indicador de búsqueda hasta que use una tecla de repetición de búsqueda como <code class="docutils literal notranslate"><span class="pre">C-s</span></code>.</p>
<p>Los comandos de búsqueda de palabras no realizan plegado de caracteres, y la activación de la concordancia laxa de espacios en blanco (véase <strong>Concordancia Laxa de Espacios</strong>) no tiene ningún efecto sobre ellos.</p>
<p>Para buscar en la Web el texto de la región, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">w</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">M-w</span></code>). Este comando realiza una búsqueda en Internet de las palabras de la región usando el motor de búsqueda cuya URL está especificada por la variable <code class="docutils literal notranslate"><span class="pre">eww-search-prefix</span></code> (ver <strong>EWW en The Emacs Web Browser Manual</strong>). Si la región no está activa, o no contiene ninguna palabra, este comando pide al Usuario una URL o palabras clave para buscar.</p>
</section>
<section id="busqueda-de-simbolos">
<h2>16.4 Búsqueda de Símbolos<a class="headerlink" href="#busqueda-de-simbolos" title="Link to this heading"></a></h2>
<p>Una búsqueda de símbolos es muy parecida a una búsqueda ordinaria, excepto en que los límites de la búsqueda deben coincidir con los límites de un símbolo. El significado de símbolo en este contexto depende del modo principal, y normalmente se refiere a un token de código fuente, como un símbolo Lisp en modo Emacs Lisp. Por ejemplo, si realiza una búsqueda incremental de símbolos para el símbolo Lisp <code class="docutils literal notranslate"><span class="pre">forward-word</span></code>, no coincidiría con <code class="docutils literal notranslate"><span class="pre">isearch-forward-word</span></code>. Por tanto, esta función es útil sobre todo para buscar código fuente.</p>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">_</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">_</span></code>)</p>
<blockquote>
<div><p>Si la búsqueda incremental está activa, conmute el modo de búsqueda de símbolos (<code class="docutils literal notranslate"><span class="pre">isearch-toggle-symbol</span></code>); de lo contrario, inicie una búsqueda incremental de símbolos hacia delante
(<code class="docutils literal notranslate"><span class="pre">isearch-forward-symbol</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">.</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">.</span></code>)</p>
<blockquote>
<div><p>Inicia una búsqueda incremental de símbolos hacia adelante con el símbolo encontrado cerca del punto añadido inicialmente a la cadena de búsqueda.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>simbolo</em> <kbd class="kbd docutils literal notranslate">RET</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">_</span> <span class="pre">RET</span></code> <em>simbolo</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Busca símbolo hacia adelante, de forma no incremental.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">_</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> <kbd class="kbd docutils literal notranslate">RET</kbd> <em>simbolo</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">_</span> <span class="pre">C-r</span> <span class="pre">RET</span></code> <em>simbolo</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</p>
<blockquote>
<div><p>Busca símbolo hacia atrás, de forma no incremental.</p>
</div></blockquote>
<p>Para iniciar una búsqueda incremental de símbolos hacia adelante, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">_</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">_</span></code>) o <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">.</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">.</span></code>) si el símbolo a buscar está cerca del punto). Si la búsqueda incremental no está ya activa, <code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">_</span></code> ejecuta el comando <code class="docutils literal notranslate"><span class="pre">isearch-forward-symbol</span></code> y <code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">.</span></code> ejecuta el comando <code class="docutils literal notranslate"><span class="pre">isearch-forward-symbol-at-point</span></code>. Con un argumento de prefijo numérico <em>n</em>, <code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">.</span></code> buscará la siguiente aparición del símbolo en el punto; los valores negativos de <em>n</em> buscan hacia atrás. Si la búsqueda incremental ya está activa, <code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">_</span></code> cambia a una búsqueda de símbolos, conservando la dirección de la búsqueda y la cadena de búsqueda actual; puede desactivar la búsqueda de símbolos escribiendo <code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">_</span></code> de nuevo. En la búsqueda incremental de símbolos, mientras escribe la cadena de búsqueda, sólo se requiere que el principio de la cadena de búsqueda coincida con el principio de un símbolo, y aparece <code class="docutils literal notranslate"><span class="pre">Pending</span></code> (Pendiente) en el indicador de búsqueda hasta que use una tecla de repetición de búsqueda como <code class="docutils literal notranslate"><span class="pre">C-s</span></code>.</p>
<p>Para iniciar una búsqueda de símbolos no incremental, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">_</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">_</span> <span class="pre">RET</span></code>) para una búsqueda hacia delante, o <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">_</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd><kbd class="kbd docutils literal notranslate">r</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">_</span> <span class="pre">C-r</span> <span class="pre">RET</span></code>) para una búsqueda hacia atrás. En las búsquedas de símbolos no incrementales, el principio y el final de la cadena de búsqueda deben coincidir con el principio y el final de un símbolo, respectivamente.</p>
<p>Los comandos de búsqueda de símbolos no realizan plegado de caracteres, y la activación de la concordancia laxa de espacios en blanco (véase <strong>Concordancia Laxa de Espacios</strong>) no tiene ningún efecto sobre ellos.</p>
</section>
<section id="busqueda-por-expresiones-regulares">
<h2>16.5 Búsqueda por Expresiones Regulares<a class="headerlink" href="#busqueda-por-expresiones-regulares" title="Link to this heading"></a></h2>
<p>Una <em>expresión regular</em> (o <em>expreg</em> para abreviar) es un patrón que denota una clase de cadenas alternativas con las que coincidir. Emacs proporciona formas incrementales y no incrementales de buscar una coincidencia para una expreg. La sintaxis de las expresiones regulares se explica en la siguiente sección.</p>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-s</span></code>)</p>
<blockquote>
<div><p>Comienza la búsqueda incremental de expreg (<code class="docutils literal notranslate"><span class="pre">isearch-forward-regexp</span></code>).</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-r</span></code>)</p>
<blockquote>
<div><p>Comienza la búsqueda incremental inversa de expresiones regulares (<code class="docutils literal notranslate"><span class="pre">isearch-backward-regexp</span></code>).</p>
</div></blockquote>
<p>La búsqueda incremental de una expreg se realiza escribiendo <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-s</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-forward-regexp</span></code>), invocando a <code class="docutils literal notranslate"><span class="pre">C-s</span></code> con un argumento de prefijo (cuyo valor no importa), o escribiendo <code class="docutils literal notranslate"><span class="pre">M-r</span></code> dentro de una búsqueda incremental hacia adelante. Este comando lee una cadena de búsqueda de forma incremental, igual que <code class="docutils literal notranslate"><span class="pre">C-s</span></code>, pero trata la cadena de búsqueda como una expreg en lugar de buscar una coincidencia exacta con el texto del búfer. Cada vez que se añade texto a la cadena de búsqueda, se alarga la expreg y se busca la nueva. Para buscar una expresión regular hacia atrás, utilice <code class="docutils literal notranslate"><span class="pre">C-M-r</span></code> (<code class="docutils literal notranslate"><span class="pre">isearch-backward-regexp</span></code>), <code class="docutils literal notranslate"><span class="pre">C-r</span></code> con un argumento de prefijo, o <code class="docutils literal notranslate"><span class="pre">M-r</span></code> dentro de una búsqueda incremental hacia atrás.</p>
<p>Todas las secuencias de teclas especiales de una búsqueda incremental ordinaria (véase <strong>Entrada Especial para Búsqueda Incremental</strong>) hacen cosas similares en una búsqueda incremental de expresiones regulares. Por ejemplo, si se escribe <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> (<code class="docutils literal notranslate"><span class="pre">C-s</span></code>) inmediatamente después de iniciar la búsqueda, se recupera la última expreg de búsqueda incremental utilizado y se busca hacia adelante. Las búsquedas incrementales expreg y no expreg tienen valores predeterminados independientes. También tienen anillos de búsqueda independientes, a los que puede acceder con <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">p</kbd> (<code class="docutils literal notranslate"><span class="pre">M-p</span></code>) y <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">n</kbd> (<code class="docutils literal notranslate"><span class="pre">M-n</span></code>). El número máximo de expresiones regulares de búsqueda guardados en el anillo de búsqueda viene determinado por el valor de <code class="docutils literal notranslate"><span class="pre">regexp-search-ring-max</span></code>, 16 por defecto.</p>
<p>A diferencia de la búsqueda incremental ordinaria, la búsqueda incremental de expresiones regulares no usa la concordancia de espacio laxo por defecto. Para activar esta función, emplee <code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">SPC</span></code> (<code class="docutils literal notranslate"><span class="pre">isearch-toggle-lax-whitespace</span></code>). De este modo, cualquier <kbd class="kbd docutils literal notranslate">SPACE</kbd> (<code class="docutils literal notranslate"><span class="pre">SPC</span></code>) escrito en la búsqueda incremental de expresiones regulares coincidirá con cualquier secuencia de uno o más caracteres de espacio en blanco. La variable <code class="docutils literal notranslate"><span class="pre">search-whitespace-regexp</span></code> especifica la expreg para la coincidencia de espacios laxos. Véase <strong>Entrada Especial para Búsqueda Incremental</strong>.</p>
<p>Además, a diferencia de la búsqueda incremental ordinaria, la búsqueda incremental de expreg no puede usar el plegado de caracteres (consulte <strong>Coincidencia Laxa Durante la Búsqueda</strong>). (Si activa el plegado de caracteres durante la búsqueda incremental de expreg con <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">'</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">'</span></code>), la búsqueda se convierte en una búsqueda de <em>no expresiones regulares</em> y el patrón de búsqueda que ha escrito se interpreta como una cadena literal).</p>
<p>En algunos casos, añadir caracteres a la expresión regular en una búsqueda incremental puede hacer que el cursor retroceda y comience de nuevo. Por ejemplo, si ha buscado <code class="docutils literal notranslate"><span class="pre">foo</span></code> y añade <cite>`|bar`</cite>, el cursor retrocede en caso de que el primer <code class="docutils literal notranslate"><span class="pre">bar</span></code> preceda al primer <code class="docutils literal notranslate"><span class="pre">foo</span></code>. (El indicador cambiará y dirá <code class="docutils literal notranslate"><span class="pre">Pending</span></code> (Pendiente) para notificar al Usuario que se ha producido este recalculo). Véase <strong>Sintaxis de Expresiones Regulares</strong>.</p>
<p>La búsqueda de expreg hacia delante y hacia atrás no son simétricas, porque la coincidencia expreg en Emacs siempre opera hacia delante, empezando por el principio de la misma. Por lo tanto, la búsqueda expreg hacia adelante escanea hacia adelante, intentando una coincidencia hacia adelante en cada posición inicial posible. La búsqueda expreg hacia atrás escanea en esa dirección, intentando una coincidencia hacia delante en cada posición de inicio posible. Estos métodos de búsqueda no son imágenes en espejo.</p>
<p>La búsqueda no incremental de una expresión regular se realiza con los comandos <code class="docutils literal notranslate"><span class="pre">re-search-forward</span></code> y <code class="docutils literal notranslate"><span class="pre">re-search-backward</span></code>. Puede invocarlos con <code class="docutils literal notranslate"><span class="pre">M-x</span></code>, o mediante la búsqueda incremental de expresiones regulares con <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-s</span> <span class="pre">RET</span></code>) y <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-r</span> <span class="pre">RET</span></code>). Cuando invoca estos comandos con <code class="docutils literal notranslate"><span class="pre">M-x</span></code>, buscan la expresión regular exacta que especifique y, por lo tanto, no admiten ninguna función de búsqueda laxa (consulte <strong>Coincidencia Laxa Durante la Búsqueda</strong>), excepto la combinación de mayúsculas y minúsculas.</p>
<p>Si usa los comandos de búsqueda incremental expreg con un argumento de prefijo, realizan una búsqueda de cadena ordinaria, como <code class="docutils literal notranslate"><span class="pre">isearch-forward</span></code> y <code class="docutils literal notranslate"><span class="pre">isearch-backward</span></code>. Véase <strong>Búsqueda Incremental</strong>.</p>
</section>
<section id="sintaxis-de-las-expresiones-regulares">
<h2>16.6 Sintaxis de las Expresiones Regulares<a class="headerlink" href="#sintaxis-de-las-expresiones-regulares" title="Link to this heading"></a></h2>
<p>Esta sección (y este manual en general) describe las características de las expresiones regulares que los Usuarios suelen usar. Vea <strong>Expresiones Regulares</strong> en El Manual de Referencia de Emacs Lisp, para características adicionales usadas principalmente en programas Lisp.</p>
<p>Las expresiones regulares tienen una sintaxis en la que unos pocos caracteres son <em>construcciones especiales</em> y el resto son ordinarios. Un carácter ordinario coincide con ese mismo carácter y nada más. Los caracteres especiales son <code class="docutils literal notranslate"><span class="pre">$^.*+?[\</span></code>. El carácter <code class="docutils literal notranslate"><span class="pre">]</span></code> es especial si termina una alternativa de caracteres (véase más adelante). El carácter <code class="docutils literal notranslate"><span class="pre">-</span></code> es especial dentro de una alternativa de caracteres. Cualquier otro carácter que aparezca en una expresión regular es ordinario, a menos que lo preceda una <code class="docutils literal notranslate"><span class="pre">\</span></code>. (Cuando utilice expresiones regulares en un programa Lisp, cada <code class="docutils literal notranslate"><span class="pre">\</span></code> debe estar duplicado; vea el ejemplo al final de esta sección).</p>
<p>Por ejemplo, <code class="docutils literal notranslate"><span class="pre">f</span></code> no es un carácter especial, por lo que es ordinario, y por lo tanto <code class="docutils literal notranslate"><span class="pre">f</span></code> es una expresión regular que coincide con la cadena <code class="docutils literal notranslate"><span class="pre">f</span></code> y con ninguna otra. (No coincide con la cadena <code class="docutils literal notranslate"><span class="pre">ff</span></code>.) Del mismo modo, <code class="docutils literal notranslate"><span class="pre">o</span></code> es una expresión regular que sólo coincide con <code class="docutils literal notranslate"><span class="pre">o</span></code>. (Cuando se ignoran las distinciones entre mayúsculas y minúsculas, estas expresiones regulares también coinciden con <code class="docutils literal notranslate"><span class="pre">F</span></code> y <code class="docutils literal notranslate"><span class="pre">O</span></code>, pero consideramos esto una generalización de «la misma cadena», en lugar de una excepción).</p>
<p>Dos expresiones regulares <em>a</em> y <em>b</em> cualesquiera pueden concatenarse. El resultado es una expresión regular que coincide con una cadena si <em>a</em> coincide con alguna parte del principio de esa cadena y <em>b</em> coincide con el resto de la cadena. Como ejemplo trivial, concatenar las expresiones regulares <code class="docutils literal notranslate"><span class="pre">foo</span></code> y <code class="docutils literal notranslate"><span class="pre">o</span></code> da como resultado la expresión regular <code class="docutils literal notranslate"><span class="pre">fo</span></code>, que sólo coincide con la cadena <code class="docutils literal notranslate"><span class="pre">fo</span></code>. Para hacer algo menos trivial, necesita usar uno de los caracteres especiales. Aquí tiene una lista de ellos.</p>
<dl>
<dt><code class="docutils literal notranslate"><span class="pre">.</span></code> (punto)</dt><dd><p>Es un carácter especial que coincide con cualquier carácter excepto con una nueva línea. Por ejemplo, la expresión regular <code class="docutils literal notranslate"><span class="pre">a.b</span></code> coincide con cualquier cadena de tres caracteres que
empiece por <code class="docutils literal notranslate"><span class="pre">a</span></code> y termine por <code class="docutils literal notranslate"><span class="pre">b</span></code>.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">*</span></code></dt><dd><p>No es una construcción en sí misma; es un operador postfijo que significa hacer coincidir la expresión regular precedente repetidamente cualquier número de veces, tantas veces como
sea posible. Así, <code class="docutils literal notranslate"><span class="pre">o*</span></code> coincide con cualquier número de <code class="docutils literal notranslate"><span class="pre">o</span></code>'s, incluyendo ninguna.</p>
<p><code class="docutils literal notranslate"><span class="pre">*</span></code> se aplica siempre a la expresión precedente <em>más pequeña posible</em>. Así, <code class="docutils literal notranslate"><span class="pre">fo*</span></code> tiene repetida una <code class="docutils literal notranslate"><span class="pre">o</span></code>, no una <code class="docutils literal notranslate"><span class="pre">fo</span></code>. O sea que coincide con <code class="docutils literal notranslate"><span class="pre">f</span></code>, <code class="docutils literal notranslate"><span class="pre">fo</span></code>, <code class="docutils literal notranslate"><span class="pre">foo</span></code>, etc.</p>
<p>El procesador de sintáxis ejecuta una construcción <code class="docutils literal notranslate"><span class="pre">*</span></code> emparejando, inmediatamente, tantas repeticiones como pueda encontrar. Luego continúa con el resto del patrón. Si esto falla,
se realiza un retroceso, descartando algunas de las coincidencias de la construcción modificada con <code class="docutils literal notranslate"><span class="pre">*</span></code> en caso de que esto haga posible la coincidencia con el resto del patrón. Por
ejemplo, al comparar <code class="docutils literal notranslate"><span class="pre">ca*ar</span></code> con la cadena <code class="docutils literal notranslate"><span class="pre">caaar</span></code>, <code class="docutils literal notranslate"><span class="pre">a*</span></code> intenta primero coincidir con las tres <code class="docutils literal notranslate"><span class="pre">a</span></code>; pero el resto del patrón es <code class="docutils literal notranslate"><span class="pre">ar</span></code> y sólo queda <code class="docutils literal notranslate"><span class="pre">r</span></code> por coincidir, por
lo que este intento falla. La siguiente alternativa es que <code class="docutils literal notranslate"><span class="pre">a*</span></code> sólo coincida con dos <code class="docutils literal notranslate"><span class="pre">a</span></code>. Con esta opción, el resto de la expresión regular coincide correctamente.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">+</span></code></dt><dd><p>Es un operador postfijo, similar a <code class="docutils literal notranslate"><span class="pre">*</span></code>, excepto en que debe coincidir con la expresión precedente al menos una vez. Así, <code class="docutils literal notranslate"><span class="pre">ca+r</span></code> coincide con las cadenas <code class="docutils literal notranslate"><span class="pre">car</span></code> y <code class="docutils literal notranslate"><span class="pre">caaaar</span></code>, pero
no con la cadena <code class="docutils literal notranslate"><span class="pre">cr</span></code>, mientras que <code class="docutils literal notranslate"><span class="pre">ca*r</span></code> coincide con las tres cadenas.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">?</span></code></dt><dd><p>es un operador postfijo, similar a <code class="docutils literal notranslate"><span class="pre">*</span></code>, excepto en que puede coincidir con la expresión precedente una vez o ninguna. Así, <code class="docutils literal notranslate"><span class="pre">ca?r</span></code> coincide con <code class="docutils literal notranslate"><span class="pre">car</span></code> o <code class="docutils literal notranslate"><span class="pre">cr</span></code>, y nada más.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">*?,</span> <span class="pre">+?,</span> <span class="pre">??</span></code></dt><dd><p>Son variantes no exigentes de los operadores anteriores. Los operadores normales <code class="docutils literal notranslate"><span class="pre">*</span></code>, <code class="docutils literal notranslate"><span class="pre">+</span></code>, <code class="docutils literal notranslate"><span class="pre">?</span></code> coinciden tanto como pueden, siempre que la expresión regular global pueda seguir
siendo similar. Con un <code class="docutils literal notranslate"><span class="pre">?</span></code> a continuación, coincidirán lo menos posible.</p>
<p>De esta forma, tanto <code class="docutils literal notranslate"><span class="pre">ab*</span></code> como <code class="docutils literal notranslate"><span class="pre">ab*?</span></code> pueden coincidir con la cadena <code class="docutils literal notranslate"><span class="pre">a</span></code> y la cadena <code class="docutils literal notranslate"><span class="pre">abbbb</span></code>; pero si intenta hacer coincidir ambas con el texto <code class="docutils literal notranslate"><span class="pre">abbb</span></code>, <code class="docutils literal notranslate"><span class="pre">ab*</span></code> coincidirá
con todo (la coincidencia válida más larga), mientras que <code class="docutils literal notranslate"><span class="pre">ab*?</span></code> coincidirá sólo con <code class="docutils literal notranslate"><span class="pre">a</span></code> (la coincidencia válida más corta).</p>
<p>Los operadores no arbitrarios hacen coincidir la cadena más corta posible a partir de un punto de partida dado; sin embargo, en una búsqueda hacia delante, siempre se elige el punto
de partida más temprano posible. Así, si busca <code class="docutils literal notranslate"><span class="pre">a.*?$</span></code> contra el texto <code class="docutils literal notranslate"><span class="pre">abbab</span></code> seguido de una nueva línea, coincide con toda la cadena. Como puede coincidir a partir de la primera
<code class="docutils literal notranslate"><span class="pre">a</span></code>, lo hace.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">[</span> <span class="pre">...</span> <span class="pre">]</span></code></dt><dd><p>Es un <em>conjunto de caracteres alternativos</em>, o un <em>conjunto de caracteres</em>, que empieza con <code class="docutils literal notranslate"><span class="pre">[</span></code> y termina en <code class="docutils literal notranslate"><span class="pre">]</span></code>.</p>
<p>En el caso más sencillo, los caracteres entre los dos corchetes son los que pueden coincidir con este conjunto. De esta forma, <code class="docutils literal notranslate"><span class="pre">[ad]</span></code> coincide con una <code class="docutils literal notranslate"><span class="pre">a</span></code> o una <code class="docutils literal notranslate"><span class="pre">d</span></code>, y <code class="docutils literal notranslate"><span class="pre">[ad]*</span></code>
coincide con cualquier cadena compuesta sólo por <code class="docutils literal notranslate"><span class="pre">a</span></code>'s y <code class="docutils literal notranslate"><span class="pre">d</span></code>'s (incluida la cadena vacía). Por lo tanto, <code class="docutils literal notranslate"><span class="pre">c[ad]*r</span></code> coincide con <code class="docutils literal notranslate"><span class="pre">cr</span></code>, <code class="docutils literal notranslate"><span class="pre">car</span></code>, <code class="docutils literal notranslate"><span class="pre">cdr</span></code>, <code class="docutils literal notranslate"><span class="pre">caddaar</span></code>, etc.</p>
<p>También puede incluir rangos de caracteres en un juego de caracteres, escribiendo los caracteres inicial y final con un <code class="docutils literal notranslate"><span class="pre">-</span></code> entre ellos. Así, <code class="docutils literal notranslate"><span class="pre">[a-z]</span></code> coincide con cualquier letra
ASCII minúscula. Los rangos pueden mezclarse libremente con caracteres individuales, como en <code class="docutils literal notranslate"><span class="pre">[a-z$%.]</span></code>, que coincide con cualquier letra ASCII minúscula o <code class="docutils literal notranslate"><span class="pre">$</span></code>, <code class="docutils literal notranslate"><span class="pre">%</span></code> o punto. Otro
ejemplo: <code class="docutils literal notranslate"><span class="pre">[α-ωί]</span></code> coincide con todas las letras griegas minúsculas.</p>
<p>También puede incluir determinadas <em>clases de caracteres especiales</em> en un conjunto de caracteres. Un <code class="docutils literal notranslate"><span class="pre">[:</span></code> y su par equivalente <code class="docutils literal notranslate"><span class="pre">:]</span></code> encierran una clase de caracteres dentro de un
conjunto de caracteres alternativos. Por ejemplo, <code class="docutils literal notranslate"><span class="pre">[[:alnum:]]</span></code> coincide con cualquier letra o dígito. Vea <strong>Clases de Caracteres</strong> en el Manual de Referencia de Emacs Lisp, para una
lista de clases de caracteres.</p>
<p>Para incluir un <code class="docutils literal notranslate"><span class="pre">]]</span></code> en un conjunto de caracteres, debe convertirlo en el primer carácter. Por ejemplo, <code class="docutils literal notranslate"><span class="pre">[]a]</span></code> coincide con <code class="docutils literal notranslate"><span class="pre">']'</span></code> o <code class="docutils literal notranslate"><span class="pre">'a'</span></code>. Para incluir un <code class="docutils literal notranslate"><span class="pre">-</span></code>, escriba <code class="docutils literal notranslate"><span class="pre">-</span></code>
como último carácter del conjunto, aunque también puede ponerlo primero o después de un rango. De esta forma, <code class="docutils literal notranslate"><span class="pre">[]-]</span></code> coincide tanto con <code class="docutils literal notranslate"><span class="pre">]</span></code> como con <code class="docutils literal notranslate"><span class="pre">-</span></code>.</p>
<p>Para incluir <code class="docutils literal notranslate"><span class="pre">^</span></code> en un conjunto, colóquelo en cualquier lugar menos al principio del conjunto. (Al principio, complementa el conjunto, véase más adelante).</p>
<p>Cuando use un rango en una búsqueda sin distinción entre mayúsculas y minúsculas, debe escribir ambos extremos del rango en mayúsculas, o ambos en minúsculas, o ambos deben ser
no-letras. El comportamiento de un rango mixto como <code class="docutils literal notranslate"><span class="pre">'A-z'</span></code> está mal definido, y puede cambiar en futuras versiones de Emacs.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">[^</span> <span class="pre"></span> <span class="pre">]</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">[^</span></code> inicia un <em>juego de caracteres complementados</em>, que coincide con cualquier carácter excepto los especificados. Así, <code class="docutils literal notranslate"><span class="pre">[^a-z0-9A-Z]</span></code> coincide con todos los caracteres excepto
las letras y dígitos ASCII.</p>
<p><code class="docutils literal notranslate"><span class="pre">^</span></code> no es especial en un juego de caracteres a menos que sea el primer carácter. El carácter que sigue al <code class="docutils literal notranslate"><span class="pre">^</span></code> se trata como si fuera el primero (en otras palabras, <code class="docutils literal notranslate"><span class="pre">-</span></code> y <code class="docutils literal notranslate"><span class="pre">]</span></code>
no son especiales en este caso).</p>
<p>Un juego de caracteres complementado puede coincidir con una nueva línea, a menos que ésta se mencione como uno de los caracteres que no deben coincidir. Esto contrasta con el
tratamiento de las expresiones regulares en programas como <code class="docutils literal notranslate"><span class="pre">grep</span></code>.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">^</span></code></dt><dd><p>Es un carácter especial que coincide con la cadena vacía, pero sólo al principio de una línea del texto que se está comparando. De lo contrario, no coincide con nada. Así, <code class="docutils literal notranslate"><span class="pre">^foo</span></code>
coincide con un <code class="docutils literal notranslate"><span class="pre">foo</span></code> que aparece al principio de una línea.</p>
<p>Por razones de compatibilidad histórica, <code class="docutils literal notranslate"><span class="pre">^</span></code> sólo puede utilizarse con este significado al principio de la expresión regular, o después de <code class="docutils literal notranslate"><span class="pre">\(</span></code> o <code class="docutils literal notranslate"><span class="pre">\|</span></code>.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">$</span></code></dt><dd><p>Es similar a <code class="docutils literal notranslate"><span class="pre">^</span></code> pero sólo coincide con el final de una línea. De este modo, <code class="docutils literal notranslate"><span class="pre">x+$</span></code> coincide con una cadena de una <code class="docutils literal notranslate"><span class="pre">x</span></code> o más al final de una línea.</p>
<p>Por razones de compatibilidad histórica, <code class="docutils literal notranslate"><span class="pre">$</span></code> sólo puede usarse con este significado al final de la expresión regular, o antes de <code class="docutils literal notranslate"><span class="pre">\)</span></code> o <code class="docutils literal notranslate"><span class="pre">\|</span></code>.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\</span></code></dt><dd><p>Tiene dos funciones: entrecomilla los caracteres especiales (incluido <code class="docutils literal notranslate"><span class="pre">\</span></code>) e introduce construcciones especiales adicionales.</p>
<p>Dado que <code class="docutils literal notranslate"><span class="pre">\</span></code> entrecomilla caracteres especiales, <code class="docutils literal notranslate"><span class="pre">\$</span></code> es una expresión regular que sólo coincide con <code class="docutils literal notranslate"><span class="pre">$</span></code>, y <code class="docutils literal notranslate"><span class="pre">\[</span></code> es una expresión regular que sólo coincide con <code class="docutils literal notranslate"><span class="pre">[</span></code>, y así
sucesivamente.</p>
<p>Consulte la siguiente sección para conocer las construcciones especiales que empiezan por <code class="docutils literal notranslate"><span class="pre">\</span></code>.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Nota</p>
<p>Nota: por compatibilidad histórica, los caracteres especiales se tratan como ordinarios si se encuentran en contextos en los que sus significados especiales no tienen sentido.
Por ejemplo, <code class="docutils literal notranslate"><span class="pre">*foo</span></code> trata <code class="docutils literal notranslate"><span class="pre">*</span></code> como ordinario ya que no hay ninguna expresión precedente sobre la que <code class="docutils literal notranslate"><span class="pre">*</span></code> pueda actuar. Es una mala práctica depender de este
comportamiento; es mejor entrecomillar el carácter especial de todos modos, independientemente de dónde aparezca.</p>
</div>
<p>Como un <code class="docutils literal notranslate"><span class="pre">´</span></code> no es especial dentro de un conjunto de caracteres alternativos, nunca puede eliminar el significado especial de <code class="docutils literal notranslate"><span class="pre">-</span></code>, <code class="docutils literal notranslate"><span class="pre">^</span></code> o <code class="docutils literal notranslate"><span class="pre">]</span></code>. No debe entrecomillar estos caracteres cuando no tengan un significado especial. Esto no aclararía nada, ya que las barras invertidas pueden preceder legítimamente a estos caracteres cuando <em>tienen</em> un significado especial, como en <code class="docutils literal notranslate"><span class="pre">[^\]</span></code> (<code class="docutils literal notranslate"><span class="pre">[^\\]</span></code> para la sintaxis de cadenas de Lisp), que coincide con cualquier carácter excepto una barra invertida.</p>
</section>
<section id="barra-invertida-en-expresiones-regulares">
<h2>16.7 Barra Invertida en Expresiones Regulares<a class="headerlink" href="#barra-invertida-en-expresiones-regulares" title="Link to this heading"></a></h2>
<p>En la mayoría de los casos, <code class="docutils literal notranslate"><span class="pre">\</span></code> seguido de cualquier carácter sólo coincide con ese carácter. Sin embargo, hay varias excepciones: las secuencias de dos caracteres que empiezan por <code class="docutils literal notranslate"><span class="pre">\</span></code> tienen un significado especial. El segundo carácter de la secuencia es siempre un carácter normal cuando se utiliza solo. He aquí una tabla de construcciones usando la barra invertida (<code class="docutils literal notranslate"><span class="pre">\</span></code>).</p>
<dl>
<dt><code class="docutils literal notranslate"><span class="pre">\|</span></code></dt><dd><p>Especifica una alternativa. Dos expresiones regulares <em>a</em> y <em>b</em> con <code class="docutils literal notranslate"><span class="pre">\|</span></code> entre ellas forman una expresión que coincide con algún texto si <em>a</em> coincide con él o <em>b</em> coincide con él.
Funciona intentando coincidir con <em>a</em> y, si falla, intenta coincidir con <em>b</em>.</p>
<p>Así, <code class="docutils literal notranslate"><span class="pre">foo\|bar</span></code> coincide con <code class="docutils literal notranslate"><span class="pre">foo</span></code> o <code class="docutils literal notranslate"><span class="pre">bar</span></code>, pero no con ninguna otra cadena.</p>
<p><code class="docutils literal notranslate"><span class="pre">\|</span></code> se aplica a las expresiones circundantes más grandes posibles. Sólo una agrupación <code class="docutils literal notranslate"><span class="pre">\(</span> <span class="pre">...</span> <span class="pre">\)</span></code> circundante puede limitar el poder de agrupación de <code class="docutils literal notranslate"><span class="pre">\|</span></code>.</p>
<p>Existe una capacidad de retroceso completa para manejar múltiples usos de <code class="docutils literal notranslate"><span class="pre">\|</span></code>.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\(</span> <span class="pre"></span> <span class="pre">\)</span></code></dt><dd><p>Es un constructo de agrupación que sirve para tres propósitos:</p>
<blockquote>
<div><ol class="arabic simple">
<li><p>Para encerrar un conjunto de alternativas <code class="docutils literal notranslate"><span class="pre">\|</span></code> para otras operaciones. Así, <code class="docutils literal notranslate"><span class="pre">\(foo\|bar\)x</span></code> coincide con <code class="docutils literal notranslate"><span class="pre">foox</span></code> o <code class="docutils literal notranslate"><span class="pre">barx</span></code>.</p></li>
<li><p>Para encerrar una expresión complicada sobre la que puedan operar los operadores postfijos <code class="docutils literal notranslate"><span class="pre">*</span></code>, <code class="docutils literal notranslate"><span class="pre">+</span></code> y <code class="docutils literal notranslate"><span class="pre">?</span></code>. De esta forma, <code class="docutils literal notranslate"><span class="pre">ba\(na\)*</span></code> coincide con <code class="docutils literal notranslate"><span class="pre">bananana</span></code>, etc.,
con cualquier (cero o más) número de cadenas <code class="docutils literal notranslate"><span class="pre">na</span></code>.</p></li>
<li><p>Para registrar una subcadena coincidente para futuras consultas.</p></li>
</ol>
</div></blockquote>
<p>Esta última aplicación no es consecuencia de la idea de agrupación parentética; es una característica independiente que se asigna como segundo significado a la misma construcción <code class="docutils literal notranslate"><span class="pre">\(</span>
<span class="pre">...</span> <span class="pre">\)</span></code>. En la práctica no suele haber conflicto entre los dos significados; cuando lo hay, se puede usar un grupo parental, que se describe a continuación.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\(?:</span> <span class="pre"></span> <span class="pre">\)</span></code></dt><dd><p>Especifica un <em>grupo alternativo</em> que no registra la subcadena coincidente; no se puede hacer referencia a él con <code class="docutils literal notranslate"><span class="pre">\d</span></code> (véase más adelante). Esto es útil para combinar mecánicamente
expresiones regulares, de forma que pueda añadir grupos con fines sintácticos sin interferir con la numeración de los grupos a los que se pretende hacer referencia.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\d</span></code></dt><dd><p>Coincide con el mismo texto que correspondió a la <em>d*a7-ésima ocurrencia de una construcción ``( … )``. Esto se denomina *referencia retrospectiva</em>.</p>
<p>Tras el final de una construcción <code class="docutils literal notranslate"><span class="pre">\(</span> <span class="pre">...</span> <span class="pre">\)</span></code>, el emparejador recuerda el principio y el final del texto emparejado por esa construcción. Entonces, más adelante en la expresión
regular, puede usar <code class="docutils literal notranslate"><span class="pre">\</span></code> seguido del dígito <em>d</em> para significar «coincide con el mismo texto que se asemeja a la <em>d</em>-enésima construcción <code class="docutils literal notranslate"><span class="pre">\(</span> <span class="pre">...</span> <span class="pre">\)</span></code>».</p>
<p>A las cadenas que coinciden con las nueve primeras construcciones <code class="docutils literal notranslate"><span class="pre">\(</span> <span class="pre">...</span> <span class="pre">\)</span></code> que aparecen en una expresión regular se les asignan números del 1 al 9 en el orden en que aparecen los
paréntesis abiertos en la expresión regular. Por lo tanto, puede usar de <code class="docutils literal notranslate"><span class="pre">\1</span></code> a <code class="docutils literal notranslate"><span class="pre">\9</span></code> para referirse al texto coincidente con las construcciones <code class="docutils literal notranslate"><span class="pre">\(</span> <span class="pre">...</span> <span class="pre">\)</span></code> correspondientes.</p>
<p>Por ejemplo, <code class="docutils literal notranslate"><span class="pre">\(.*\)\1</span></code> coincide con cualquier cadena sin nueva línea que esté compuesta por dos mitades idénticas. <code class="docutils literal notranslate"><span class="pre">\(.*\)</span></code> coincide con la primera mitad, que puede ser cualquier
cosa, pero <code class="docutils literal notranslate"><span class="pre">\1</span></code> que le sigue debe coincidir exactamente con el mismo texto.</p>
<p>Si una determinada construcción <code class="docutils literal notranslate"><span class="pre">\(</span> <span class="pre">...</span> <span class="pre">\)</span></code> coincide más de una vez (lo que puede ocurrir fácilmente si va seguida de <code class="docutils literal notranslate"><span class="pre">*</span></code>), sólo se registra la última coincidencia.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\{m\}</span></code></dt><dd><p>Es un operador postfijo que especifica <em>m</em> repeticiones, es decir, la expresión regular precedente debe coincidir exactamente <em>m</em> veces seguidas. Por ejemplo, <code class="docutils literal notranslate"><span class="pre">x\{4\}</span></code> coincide
con la cadena <code class="docutils literal notranslate"><span class="pre">xxxx</span></code> y nada más.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\{m,n\}</span></code></dt><dd><p>Es un operador postfijo que especifica entre <em>m</em> y <em>n</em> repeticiones, es decir, la expresión regular precedente debe coincidir al menos <em>m</em> veces, pero no más de <em>n</em> veces. Si se omite
<em>n</em>, no hay límite superior, pero la expresión regular precedente debe coincidir al menos <em>m</em> veces.</p>
<div class="line-block">
<div class="line"><code class="docutils literal notranslate"><span class="pre">\{0,1\}</span></code> es equivalente a <code class="docutils literal notranslate"><span class="pre">?</span></code>.</div>
<div class="line"><code class="docutils literal notranslate"><span class="pre">\{0,\}</span></code> es equivalente a <code class="docutils literal notranslate"><span class="pre">*</span></code>.</div>
<div class="line"><code class="docutils literal notranslate"><span class="pre">\{1,\}</span></code> es equivalente a <code class="docutils literal notranslate"><span class="pre">+</span></code>.</div>
</div>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\`</span></code></dt><dd><p>Coincide con la cadena vacía, pero sólo al principio de la cadena o del búfer (o de su parte accesible) con el que se está comparando.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\'</span></code></dt><dd><p>Coincide con la cadena vacía, pero sólo al final de la cadena o del búfer (o de su parte accesible) con el que se está comparando.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\=</span></code></dt><dd><p>Coincide con la cadena vacía, pero sólo en el punto.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\b</span></code></dt><dd><p>Coincide con la cadena vacía, pero sólo al principio o al final de una palabra. De este modo, <code class="docutils literal notranslate"><span class="pre">\bfoo\b</span></code> coincide con cualquier aparición de <code class="docutils literal notranslate"><span class="pre">foo</span></code> como palabra separada.
<code class="docutils literal notranslate"><span class="pre">\bballs?\b</span></code> coincide con <code class="docutils literal notranslate"><span class="pre">ball</span></code> o <code class="docutils literal notranslate"><span class="pre">balls</span></code> como palabra separada.</p>
<p><code class="docutils literal notranslate"><span class="pre">\b</span></code> coincide al principio o al final del búfer, independientemente del texto que aparezca junto a él.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\B</span></code></dt><dd><p>Coincide con la cadena vacía, pero no al principio o al final de una palabra.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\&lt;</span></code></dt><dd><p>Coincide con la cadena vacía, pero sólo al principio de una palabra. <code class="docutils literal notranslate"><span class="pre">\&lt;</span></code> coincide al principio del búfer sólo si le sigue un carácter constitutivo de palabra.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\&gt;</span></code></dt><dd><p>Coincide con la cadena vacía, pero sólo al final de una palabra. <code class="docutils literal notranslate"><span class="pre">\&gt;</span></code> coincide al final del búfer sólo si el contenido termina con un carácter constitutivo de palabra.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\w</span></code></dt><dd><p>Coincide con cualquier carácter constitutivo de palabra. La tabla de sintaxis determina qué caracteres son. Ver <strong>Tablas de Sintaxis</strong> en el Manual de Referencia de Emacs Lisp.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\W</span></code></dt><dd><p>Coincide con cualquier carácter que no sea un constituyente de palabra.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\_&lt;</span></code></dt><dd><p>Coincide con la cadena vacía, pero sólo al principio de un símbolo. Un símbolo es una secuencia de uno o varios caracteres constituyentes de símbolos. Un carácter constituyente de
símbolo es un carácter cuya sintaxis es <code class="docutils literal notranslate"><span class="pre">w</span></code> o <code class="docutils literal notranslate"><span class="pre">_</span></code>. <code class="docutils literal notranslate"><span class="pre">\_&lt;</span></code> sólo coincide al principio del búfer si le sigue un carácter constituyente de símbolo. Al igual que con las palabras, la
tabla de sintaxis determina qué caracteres son constituyentes de símbolo.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\_&gt;</span></code></dt><dd><p>Coincide con la cadena vacía, pero sólo al final de un símbolo. <code class="docutils literal notranslate"><span class="pre">\_&gt;</span></code> coincide al final del búfer sólo si el contenido termina con un carácter constituyente de símbolo.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\sc</span></code></dt><dd><p>Coincide con cualquier carácter cuya sintaxis sea c. Aquí <em>c</em> es un carácter que designa una clase particular de sintaxis: así, <code class="docutils literal notranslate"><span class="pre">w</span></code> para constituyente de palabra, <code class="docutils literal notranslate"><span class="pre">-</span></code> o `` `` para
espacio en blanco, <code class="docutils literal notranslate"><span class="pre">.</span></code> para puntuación ordinaria, etc. Véase <strong>Tabla de Clases de Sintaxis</strong> en el Manual de Referencia de Emacs Lisp.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\Sc</span></code></dt><dd><p>Coincide con cualquier carácter cuya sintaxis no sea <em>c</em>.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\cc</span></code></dt><dd><p>Coincide con cualquier carácter que pertenezca a la categoría <em>c</em>. Por ejemplo, <code class="docutils literal notranslate"><span class="pre">\cc</span></code> coincide con caracteres chinos, <code class="docutils literal notranslate"><span class="pre">\cg</span></code> con caracteres griegos, etc. Para obtener la
descripción de las categorías conocidas, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">describe-categories</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">describe-categories</span> <span class="pre">RET</span></code>).</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">\cc</span></code></dt><dd><p>Coincide con cualquier carácter que no pertenezca a la categoría <em>c</em>.</p>
</dd>
</dl>
<p>Las construcciones que pertenecen a palabras y sintaxis son controladas por la configuración de la tabla de sintaxis. Ver <strong>Tablas de Sintaxis</strong> en el Manual de Referencia de Emacs Lisp.</p>
</section>
<section id="ejemplo-de-expresion-regular">
<h2>16.8 Ejemplo de Expresión Regular<a class="headerlink" href="#ejemplo-de-expresion-regular" title="Link to this heading"></a></h2>
<p>He aquí un ejemplo de regexp-similar a la expreg que Emacs utiliza, por defecto, para reconocer el final de una frase, sin incluir el espacio siguiente (es decir, la variable <code class="docutils literal notranslate"><span class="pre">sentence-end-base</span></code>):</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>[.?!][]\&quot;&#39;)}]*
</pre></div>
</div>
<p>Contiene dos partes sucesivas: un conjunto de caracteres que coincide con punto, <code class="docutils literal notranslate"><span class="pre">?</span></code> o <code class="docutils literal notranslate"><span class="pre">!</span></code>, y un conjunto de caracteres que coincide con corchetes, comillas o paréntesis, repetido cero o más veces.</p>
</section>
<section id="coincidencia-laxa-durante-la-busqueda">
<h2>16.9. Coincidencia Laxa Durante la Búsqueda<a class="headerlink" href="#coincidencia-laxa-durante-la-busqueda" title="Link to this heading"></a></h2>
<p>Normalmente, se desea que los comandos de búsqueda no tengan en cuenta ciertas diferencias menores entre la cadena de búsqueda que se escribe y el texto que se busca. Por ejemplo, las secuencias de caracteres de espacios en blanco de diferente longitud suelen considerarse equivalentes; las diferencias entre mayúsculas y minúsculas no suelen importar; etc. Esto se conoce como <em>equivalencia de caracteres</em>.</p>
<p>Esta sección describe las características de búsqueda laxa de Emacs y cómo adaptarlas a sus necesidades.</p>
<p>Por defecto, los comandos de búsqueda realizan una <em>coincidencia de espacios laxa:</em> cada espacio, o secuencia de espacios, coincide con cualquier secuencia de uno o más caracteres de espacio en blanco del texto. Más concretamente, Emacs hace coincidir cada secuencia de caracteres de espacio en la cadena de búsqueda con una expresión regular especificada por la opción
de Usuario <code class="docutils literal notranslate"><span class="pre">search-whitespace-regexp</span></code>. El valor por defecto de esta opción considera cualquier secuencia de espacios y tabuladores como espacios en blanco. Así, <code class="docutils literal notranslate"><span class="pre">foo</span> <span class="pre">bar</span></code> coincide con <code class="docutils literal notranslate"><span class="pre">foo</span>&#160; <span class="pre">bar</span></code>, <code class="docutils literal notranslate"><span class="pre">foo</span>&#160;&#160; <span class="pre">bar</span></code>, <code class="docutils literal notranslate"><span class="pre">foo</span>&#160;&#160;&#160; <span class="pre">bar</span></code>, etc. (pero no con <code class="docutils literal notranslate"><span class="pre">foobar</span></code>). Si desea que los espacios coincidan con secuencias de nuevas líneas así como con espacios y tabuladores, personalice la opción para que su valor sea la expresión regular <code class="docutils literal notranslate"><span class="pre">[</span> <span class="pre">\t\n]+</span></code>. (El comportamiento predeterminado de la búsqueda incremental de expresiones regulares es diferente; consulte <strong>Búsqueda de expresiones regulares</strong>).</p>
<p>Si desea que los caracteres de espacios en blanco coincidan exactamente, puede desactivar la coincidencia de espacios laxos escribiendo <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">SPACE</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">SPC</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-toggle-lax-whitespace</span></code>) dentro de una búsqueda incremental. Otra orden <code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">SPC</span></code> vuelve a activar la concordancia de espacios laxos. Para desactivar la coincidencia laxa de espacios en blanco en todas las búsquedas, cambie <code class="docutils literal notranslate"><span class="pre">search-whitespace-regexp</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>; entonces, cada espacio de la cadena de búsqueda coincidirá exactamente con un espacio.</p>
<p>Las búsquedas en Emacs ignoran por defecto las mayúsculas y minúsculas del texto que buscan, si especifica la cadena de búsqueda en minúsculas. De este modo, si especifica buscar <code class="docutils literal notranslate"><span class="pre">foo</span></code>, entonces <code class="docutils literal notranslate"><span class="pre">Foo</span></code> y <code class="docutils literal notranslate"><span class="pre">fOO</span></code> también coinciden. Las expresiones regulares, y en particular los conjuntos de caracteres, se comportan de forma similar: <code class="docutils literal notranslate"><span class="pre">[ab]</span></code> coincide con <code class="docutils literal notranslate"><span class="pre">a</span></code> o <code class="docutils literal notranslate"><span class="pre">A</span></code> o <code class="docutils literal notranslate"><span class="pre">b</span></code> o <code class="docutils literal notranslate"><span class="pre">B</span></code>. Esta característica se conoce como <em>case folding</em> y es compatible con los modos de búsqueda incremental y no incremental.</p>
<p>Una letra mayúscula en cualquier lugar de la cadena de búsqueda hace que ésta distinga entre mayúsculas y minúsculas. Así, la búsqueda de <code class="docutils literal notranslate"><span class="pre">Foo</span></code> no encuentra <code class="docutils literal notranslate"><span class="pre">foo</span></code> ni <code class="docutils literal notranslate"><span class="pre">FOO</span></code>. Esto se aplica tanto a la búsqueda por expresión regular como a la búsqueda por cadena literal. El efecto cesa si se suprime la letra mayúscula de la cadena de búsqueda. La variable <code class="docutils literal notranslate"><span class="pre">search-upper-case</span></code> controla esto: si es distinta de <code class="docutils literal notranslate"><span class="pre">nil</span></code>, un carácter en mayúsculas en la cadena de búsqueda hace que la búsqueda distinga entre mayúsculas y minúsculas; si se establece en <code class="docutils literal notranslate"><span class="pre">nil</span></code>, se desactiva este efecto de los caracteres en mayúsculas. El valor por defecto de esta variable es <code class="docutils literal notranslate"><span class="pre">not-yanks</span></code>, que hace que la búsqueda distinga entre mayúsculas y minúsculas si hay letras mayúsculas en la cadena de búsqueda, y también hace que el texto traído desde el anillo de muertes en la cadena de búsqueda (véase <strong>Búsqueda de Texto Traído del Anillo de Muertes</strong>) se escriba en minúsculas, de modo que tales búsquedas no distinguen entre mayúsculas y minúsculas por defecto.</p>
<p>Si establece la variable <code class="docutils literal notranslate"><span class="pre">case-fold-search</span></code> en <code class="docutils literal notranslate"><span class="pre">nil</span></code>, todas las letras deben coincidir exactamente, incluidas las mayúsculas y minúsculas. Esta es una variable por búfer; alterar la variable normalmente afecta sólo al búfer actual, a menos que cambie su valor por defecto. Véase <strong>Variables Locales</strong>. Esta variable también se aplica a las búsquedas no incrementales, incluidas las realizadas por los comandos de reemplazo (consulte <strong>Comandos de Reemplazo</strong>) y los comandos de comparación del historial del minibúfer (consulte <strong>Historial del Minibúfer</strong>).</p>
<p>Si se escribe o <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> o <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">c</kbd> (<code class="docutils literal notranslate"><span class="pre">M-c</span></code> o <code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">c</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-toggle-case-fold</span></code>) dentro de una búsqueda incremental, se cambia la sensibilidad a mayúsculas/minúsculas de esa búsqueda. El efecto no se extiende más allá de la búsqueda incremental actual, pero anula el efecto de añadir o eliminar una letra mayúscula en la búsqueda actual.</p>
<p>Algunas variables relacionadas controlan la distinción entre mayúsculas y minúsculas en la búsqueda y la coincidencia de comandos o actividades específicos. Por ejemplo, <code class="docutils literal notranslate"><span class="pre">tags-case-fold-search</span></code> controla la sensibilidad a mayúsculas y minúsculas para <code class="docutils literal notranslate"><span class="pre">find-tag</span></code>. Para encontrar estas variables, escriba <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">apropos-variable</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <code class="docutils literal notranslate"><span class="pre">case-fold-search</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">apropos-variable</span> <span class="pre">RET</span> <span class="pre">case-fold-search</span> <span class="pre">RET</span></code>).</p>
<p>La distinción entre mayúsculas y minúsculas no tiene en cuenta las diferencias entre caracteres, por lo que los caracteres en mayúsculas coinciden con las variantes en minúsculas y viceversa. Una generalización de la distinción entre mayúsculas y minúsculas es el <em>plegado caracteres</em>, que no tiene en cuenta clases más amplias de distinciones entre caracteres similares. Por ejemplo, la letra <code class="docutils literal notranslate"><span class="pre">a</span></code> coincide con todos sus primos acentuados, como <code class="docutils literal notranslate"><span class="pre">ä</span></code> y <code class="docutils literal notranslate"><span class="pre">á</span></code>, sin tener en cuenta los signos diacríticos que distinguen estas variantes. Además, la <code class="docutils literal notranslate"><span class="pre">a</span></code> coincide con otros caracteres que se le parecen o que la tienen como parte de su representación gráfica, como U+00AA INDICADOR ORDINAL FEMENINO y U+24D0 LETRA BAJA LATÍN CIRCULADA A (que parece una <code class="docutils literal notranslate"><span class="pre">a</span></code> minúscula dentro de un círculo). Del mismo modo, el carácter ASCII de comillas dobles <code class="docutils literal notranslate"><span class="pre">&quot;</span></code> coincide con todas las demás variantes de comillas dobles definidas por el estándar Unicode. Por último, el plegado de caracteres puede hacer que una secuencia de uno o más caracteres coincida con otra secuencia de longitud diferente: por ejemplo, la secuencia de dos caracteres <code class="docutils literal notranslate"><span class="pre">ff</span></code> coincide con U+FB00 LIGATURA PEQUEÑA LATINA FF y la secuencia <code class="docutils literal notranslate"><span class="pre">(a)</span></code> coincide con U+249C LETRA PEQUEÑA LATINA A ENENTONADA. Las secuencias de caracteres que no son idénticas, pero coinciden en el plegado de caracteres, se conocen como <em>secuencias de caracteres equivalentes</em>.</p>
<p>Generalmente, los comandos de búsqueda en Emacs no realizan por defecto el plegado de caracteres para que coincidan con secuencias de caracteres equivalentes. Puede activar este comportamiento personalizando la variable <code class="docutils literal notranslate"><span class="pre">search-default-mode</span></code> a <code class="docutils literal notranslate"><span class="pre">char-fold-to-regexp</span></code>. Consulte <strong>Adaptación de la Búsqueda a sus Necesidades</strong>. Dentro de una búsqueda incremental, si escribe <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">'</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">'</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-toggle-char-fold</span></code>) se activa el plegado de caracteres, pero sólo para esa búsqueda. (Los comandos de reemplazo tienen un valor predeterminado diferente, controlado por una opción aparte; véase <strong>Comandos de Reemplazo y Coincidencias Laxas</strong>).</p>
<p>Por defecto, al escribir una variante explícita de un carácter, como <code class="docutils literal notranslate"><span class="pre">ä</span></code>, como parte de la cadena de búsqueda, no coincide con su carácter base, como <code class="docutils literal notranslate"><span class="pre">a</span></code>. Pero si personaliza la variable <code class="docutils literal notranslate"><span class="pre">char-fold-symmetric</span></code> a <code class="docutils literal notranslate"><span class="pre">t</span></code>, los comandos de búsqueda tratan los caracteres equivalentes de la misma manera y el uso de cualquiera de un conjunto de caracteres equivalentes en una cadena de búsqueda encuentra cualquiera de ellos en el texto buscado, de modo que al escribir un carácter acentuado <code class="docutils literal notranslate"><span class="pre">ä</span></code> coincide con la letra <code class="docutils literal notranslate"><span class="pre">a</span></code>, así como con todas las demás variantes como <code class="docutils literal notranslate"><span class="pre">á</span></code>.</p>
<p>Puede añadir nuevos plegados usando la variable personalizable <code class="docutils literal notranslate"><span class="pre">char-fold-include</span></code>, o eliminar los existentes usando la variable personalizable <code class="docutils literal notranslate"><span class="pre">char-fold-exclude</span></code>. También puede personalizar <code class="docutils literal notranslate"><span class="pre">char-fold-override</span></code> a <code class="docutils literal notranslate"><span class="pre">t</span></code> para desactivar todas las equivalencias de caracteres excepto las que Usted mismo añada usando <code class="docutils literal notranslate"><span class="pre">char-fold-include</span></code>.</p>
</section>
<section id="comandos-de-reemplazo">
<h2>16.10. Comandos de Reemplazo<a class="headerlink" href="#comandos-de-reemplazo" title="Link to this heading"></a></h2>
<p>Emacs proporciona varios comandos para realizar operaciones de búsqueda y reemplazo. Además del simple comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">replace-string</span></code>, existe <code class="docutils literal notranslate"><span class="pre">M-%</span></code> (<code class="docutils literal notranslate"><span class="pre">query-replace</span></code>), que presenta cada ocurrencia del patrón de búsqueda y le pregunta si desea reemplazarlo.</p>
<p>Los comandos de sustitución operan normalmente sobre el texto desde el punto hasta el final del búfer. Cuando la región está activa, operan sobre ella en su lugar (véase <strong>La Marca y la Región</strong>). Los comandos de reemplazo básicos sustituyen una cadena de búsqueda (o expreg) por una cadena de reemplazo. Es posible realizar varias sustituciones en paralelo, utilizando el comando <code class="docutils literal notranslate"><span class="pre">expand-region-abbrevs</span></code> (véase <strong>Control de la Expansión de Abreviaturas</strong>).</p>
<section id="reemplazo-incondicional">
<h3>16.10.1 Reemplazo Incondicional<a class="headerlink" href="#reemplazo-incondicional" title="Link to this heading"></a></h3>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">replace-string</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>cadena</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>nueva-cadena</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd></div>
<div class="line">(<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">replace-string</span> <span class="pre">RET</span></code> <em>cadena</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code> <em>nueva-cadena</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</div>
</div>
<blockquote>
<div><p>Sustituye cada aparición de <em>cadena</em> por <em>nueva cadena</em>.</p>
</div></blockquote>
<p>Para reemplazar cada instancia de <code class="docutils literal notranslate"><span class="pre">foo</span></code> después del punto por <code class="docutils literal notranslate"><span class="pre">bar</span></code>, use el comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">replace-string</span></code> con los dos argumentos <code class="docutils literal notranslate"><span class="pre">foo</span></code> y <code class="docutils literal notranslate"><span class="pre">bar</span></code>. El reemplazo sólo se produce en el texto posterior al punto, por lo que si desea cubrir todo el búfer debe ir primero al principio. Todas las ocurrencias hasta el final del búfer son reemplazadas; para limitar el reemplazo a una parte del búfer, active la región alrededor de esa parte. Cuando la región está activada, el reemplazo se limita a la región (véase <strong>La Marca y la Región</strong>).</p>
<p>Cuando se termina de ejecutar <code class="docutils literal notranslate"><span class="pre">replace-string</span></code>, deja el punto en la última ocurrencia reemplazada. Añade la posición anterior del punto (donde se emitió la orden <code class="docutils literal notranslate"><span class="pre">replace-string</span></code>) al anillo de marcas, sin activar la marca; utilice <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">SPAcE</kbd> (<code class="docutils literal notranslate"><span class="pre">C-u</span> <span class="pre">C-SPC</span></code>) para volver allí. Véase El <strong>Anillo de Marcas</strong>.</p>
<p>Un argumento de prefijo restringe el reemplazo a las coincidencias que están rodeadas por límites de palabra.</p>
<p>Consulte <strong>Comandos de Reemplazo y Coincidencias Laxas</strong>, para obtener detalles sobre la distinción entre mayúsculas y minúsculas y el plegado de caracteres en los comandos de reemplazo.</p>
</section>
<section id="reemplazo-de-expresiones-regulares-expreg">
<h3>16.10.2. Reemplazo de Expresiones Regulares (expreg)<a class="headerlink" href="#reemplazo-de-expresiones-regulares-expreg" title="Link to this heading"></a></h3>
<p>El comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">replace-string</span></code> reemplaza las coincidencias exactas de una sola cadena. El comando similar <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">replace-regexp</span></code> reemplaza cualquier coincidencia para un patrón de expresión regular especificado (véase <strong>Sintaxis de Expresiones Regulares</strong>).</p>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">replace-regexp</span></code> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>expreg</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>nueva-cadena</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd></div>
<div class="line">(<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">replace-regexp</span> <span class="pre">RET</span></code> <em>expreg</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code> <em>nueva-cadena</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</div>
</div>
<blockquote>
<div><p>Sustituye cada coincidencia de <em>expreg</em> por <em>nueva-cadena</em>.</p>
</div></blockquote>
<p>En <code class="docutils literal notranslate"><span class="pre">replace-regexp</span></code>, la <em>nueva cadena</em> no tiene por qué ser constante: puede referirse a todo o parte de lo que coincide con la <em>expreg</em>. <code class="docutils literal notranslate"><span class="pre">\&amp;</span></code> en <em>nueva-cadena</em> significa que se sustituye toda la coincidencia. <code class="docutils literal notranslate"><span class="pre">\d</span></code> en <em>nueva-cadena</em>, donde <em>d</em> es un dígito que empieza por 1, representa lo que coincidió con la <em>n</em>ésima agrupación entre paréntesis en <em>expreg</em>. (Esto se denomina «referencia retrospectiva».) <code class="docutils literal notranslate"><span class="pre">\#</span></code> se refiere al recuento de sustituciones ya realizadas en este comando, como número decimal. En el primer reemplazo, <code class="docutils literal notranslate"><span class="pre">\#</span></code> significa <code class="docutils literal notranslate"><span class="pre">0</span></code>; en el segundo, <code class="docutils literal notranslate"><span class="pre">1</span></code>; y así sucesivamente. Por ejemplo,</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">M</span><span class="o">-</span><span class="n">x</span> <span class="n">replace</span><span class="o">-</span><span class="n">regexp</span> <span class="n">RET</span> <span class="n">c</span><span class="p">[</span><span class="n">ad</span><span class="p">]</span><span class="o">+</span><span class="n">r</span> <span class="n">RET</span> \<span class="o">&amp;-</span><span class="n">safe</span> <span class="n">RET</span>
</pre></div>
</div>
<p>sustituye (por ejemplo) <code class="docutils literal notranslate"><span class="pre">adr</span></code> por <code class="docutils literal notranslate"><span class="pre">cadr-safe</span></code> y <code class="docutils literal notranslate"><span class="pre">cddr</span></code> por <code class="docutils literal notranslate"><span class="pre">cddr-safe</span></code>.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">M</span><span class="o">-</span><span class="n">x</span> <span class="n">replace</span><span class="o">-</span><span class="n">regexp</span> <span class="n">RET</span> \<span class="p">(</span><span class="n">c</span><span class="p">[</span><span class="n">ad</span><span class="p">]</span><span class="o">+</span><span class="n">r</span>\<span class="p">)</span><span class="o">-</span><span class="n">safe</span> <span class="n">RET</span> \<span class="mi">1</span> <span class="n">RET</span>
</pre></div>
</div>
<p>efectúa la transformación inversa. Para incluir un <code class="docutils literal notranslate"><span class="pre">\</span></code> en el texto a reemplazar, debe introducir <code class="docutils literal notranslate"><span class="pre">\\</span></code>.</p>
<p>Si desea introducir parte de la cadena de sustitución a mano cada vez, use <code class="docutils literal notranslate"><span class="pre">\?</span></code> en la cadena de sustitución. Cada reemplazo le pedirá que edite la cadena de reemplazo en el minibúfer, poniendo el punto donde estaba el <code class="docutils literal notranslate"><span class="pre">\?</span></code>.</p>
<p>El resto de esta subsección está pensada para tareas especializadas y requiere conocimientos de Lisp. La mayoría de los lectores pueden saltársela.</p>
<p>Puede usar expresiones Lisp para calcular partes de la cadena de sustitución. Para ello, escriba <code class="docutils literal notranslate"><span class="pre">\,</span></code> seguido de la expresión en la cadena de sustitución. Cada sustitución calcula el valor de la expresión y lo convierte en texto sin entrecomillar (si es una cadena, esto significa usar el contenido de la cadena), y lo usa en la cadena de sustitución en lugar de la propia expresión. Si la expresión es un símbolo, un espacio en la cadena de sustitución después del nombre del símbolo va con el nombre del símbolo, por lo que el valor los sustituye a ambos.</p>
<p>Dentro de una expresión de este tipo, puede usar algunas secuencias especiales. <code class="docutils literal notranslate"><span class="pre">\&amp;</span></code> y <code class="docutils literal notranslate"><span class="pre">\d</span></code> se refieren aquí, como es habitual, a la coincidencia completa como cadena, y a una subcomparación como cadena. <em>d</em> puede ser varios dígitos, y el valor de <code class="docutils literal notranslate"><span class="pre">\d</span></code> es nulo si la agrupación <code class="docutils literal notranslate"><span class="pre">d</span></code><em>enésima</em> entre paréntesis no coincide. También puede usar <code class="docutils literal notranslate"><span class="pre">\#&amp;</span></code> y <code class="docutils literal notranslate"><span class="pre">\#d</span></code> para referirse a esas coincidencias como números (esto es válido cuando la coincidencia o subcomparación tiene la forma de un numeral). <code class="docutils literal notranslate"><span class="pre">\#</span></code> también indica el número de sustituciones ya realizadas.</p>
<p>Por ejemplo, podemos intercambiar <code class="docutils literal notranslate"><span class="pre">x</span></code> e <code class="docutils literal notranslate"><span class="pre">y</span></code> de esta manera:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">M</span><span class="o">-</span><span class="n">x</span> <span class="n">replace</span><span class="o">-</span><span class="n">regexp</span> <span class="n">RET</span> \<span class="p">(</span><span class="n">x</span>\<span class="p">)</span>\<span class="o">|</span><span class="n">y</span> <span class="n">RET</span>
\<span class="p">,(</span><span class="k">if</span> \<span class="mi">1</span> <span class="s2">&quot;y&quot;</span> <span class="s2">&quot;x&quot;</span><span class="p">)</span> <span class="n">RET</span>
</pre></div>
</div>
<p>Para computar cadenas de reemplazo para <code class="docutils literal notranslate"><span class="pre">\,</span></code>, la función format es a menudo útil (ver <strong>Formateando Cadenas</strong> en El Manual de Referencia de Emacs Lisp). Por ejemplo, para añadir cadenas numeradas consecutivamente como <code class="docutils literal notranslate"><span class="pre">ABC00042</span></code> a las columnas 73 a 80 (a menos que ya estén ocupadas), puede usar</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>M-x replace-regexp RET ^.\{0,72\}$ RET
\,(format &quot;%-72sABC%05d&quot; \&amp; \#) RET
</pre></div>
</div>
</section>
<section id="comandos-reemplazar-y-coincidencias-laxas">
<h3>16.10.3. Comandos Reemplazar y Coincidencias Laxas<a class="headerlink" href="#comandos-reemplazar-y-coincidencias-laxas" title="Link to this heading"></a></h3>
<p>Esta subsección describe el comportamiento de los comandos de reemplazo con respecto a las coincidencias laxas (ver <strong>Coincidencias Laxas Durante la Búsqueda</strong>) y cómo personalizarlo. En general, los comandos de reemplazo suelen ser más estrictos que los comandos de búsqueda.</p>
<p>A diferencia de la búsqueda incremental, los comandos de reemplazo no usan la concordancia de espacios laxa (ver <strong>Concordancia de Espacios Laxa</strong>) por defecto. Para habilitar la concordancia de espacios laxa para el reemplazo, cambie la variable <code class="docutils literal notranslate"><span class="pre">replace-lax-whitespace</span></code> a no-<code class="docutils literal notranslate"><span class="pre">nil</span></code>. (Esto sólo afecta a cómo Emacs encuentra el texto a reemplazar, no al texto de reemplazo).</p>
<p>Una variable compañera <code class="docutils literal notranslate"><span class="pre">replace-regexp-lax-whitespace</span></code> controla si <code class="docutils literal notranslate"><span class="pre">query-replace-regexp</span></code> usa la concordancia laxa de espacios en blanco cuando busca patrones.</p>
<p>Si el primer argumento de una orden replace está en minúsculas, la orden ignora las mayúsculas y minúsculas en la búsqueda de ocurrencias para reemplazar, siempre que <code class="docutils literal notranslate"><span class="pre">case-fold-search</span></code> no sea nula y <code class="docutils literal notranslate"><span class="pre">search-upper-case</span></code> tampoco sea nula. Si <code class="docutils literal notranslate"><span class="pre">search-upper-case</span></code> (véase <strong>search-upper-case</strong>) es <code class="docutils literal notranslate"><span class="pre">nil</span></code>, el hecho de que la búsqueda ignore mayúsculas o minúsculas se determina únicamente mediante <code class="docutils literal notranslate"><span class="pre">case-fold-search</span></code>, independientemente de las mayúsculas o minúsculas del primer argumento de la orden. Si <code class="docutils literal notranslate"><span class="pre">case-fold-search</span></code> es <code class="docutils literal notranslate"><span class="pre">nil</span></code>, las mayúsculas y minúsculas siempre son significativas en todas las búsquedas.</p>
<p>Además, cuando el segundo argumento de un comando de sustitución está total o parcialmente en minúsculas, los comandos de sustitución intentan conservar el patrón de mayúsculas y minúsculas de cada aparición. Así, el comando</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">M</span><span class="o">-</span><span class="n">x</span> <span class="n">replace</span><span class="o">-</span><span class="n">string</span> <span class="n">RET</span> <span class="n">foo</span> <span class="n">RET</span> <span class="n">bar</span> <span class="n">RET</span>
</pre></div>
</div>
<p>sustituye <code class="docutils literal notranslate"><span class="pre">foo</span></code> en minúsculas por <code class="docutils literal notranslate"><span class="pre">bar</span></code> en minúsculas, <code class="docutils literal notranslate"><span class="pre">FOO</span></code> en mayúsculas por <code class="docutils literal notranslate"><span class="pre">BAR</span></code> y <code class="docutils literal notranslate"><span class="pre">Foo</span></code> en mayúsculas por <code class="docutils literal notranslate"><span class="pre">Bar</span></code>. (Estas tres alternativas - minúsculas, mayúsculas y mayúsculas, son las únicas que <code class="docutils literal notranslate"><span class="pre">replace-string</span></code> puede distinguir).</p>
<p>Si se usan letras mayúsculas en la cadena de sustitución, permanecerán en mayúsculas cada vez que se inserte el texto. Si se usan mayúsculas en el primer argumento, el segundo argumento siempre se sustituye exactamente como se indica, sin conversión de mayúsculas y minúsculas. Del mismo modo, si el valor de <code class="docutils literal notranslate"><span class="pre">case-replace</span></code> o <code class="docutils literal notranslate"><span class="pre">case-fold-search</span></code> es nulo, la sustitución se realiza sin conversión de mayúsculas y minúsculas.</p>
<p>Por defecto, los comandos de reemplazo no usan el plegado de caracteres (ver <strong>Plegado de Caracteres</strong>) cuando buscan el texto a reemplazar. Para habilitar el plegado de caracteres en <code class="docutils literal notranslate"><span class="pre">query-replace</span></code> y <code class="docutils literal notranslate"><span class="pre">replace-string</span></code>, establece la variable <code class="docutils literal notranslate"><span class="pre">replace-char-fold</span></code> a un valor no nulo. (Este ajuste no afecta al texto de reemplazo, sólo a cómo Emacs encuentra el texto a reemplazar. Tampoco afecta a <code class="docutils literal notranslate"><span class="pre">replace-regexp</span></code>).</p>
</section>
<section id="sustitucion-de-consultas">
<h3>16.10.4 Sustitución de Consultas<a class="headerlink" href="#sustitucion-de-consultas" title="Link to this heading"></a></h3>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">%</kbd> <em>cadena</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd> <em>nueva-cadena</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd></div>
<div class="line">(<code class="docutils literal notranslate"><span class="pre">M-%</span></code> <em>cadena</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code> <em>nueva-cadena</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</div>
</div>
<blockquote>
<div><p>Sustituye algunas ocurrencias de <em>cadena</em> por <em>nueva-cadena</em>.</p>
</div></blockquote>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">%</kbd> <em>nueva-cadena</em> <kbd class="kbd docutils literal notranslate">RETURN</kbd></div>
<div class="line">(<code class="docutils literal notranslate"><span class="pre">C-M-%</span> <span class="pre">expreg</span> <span class="pre">RET</span></code> <em>nueva-cadena</em> <code class="docutils literal notranslate"><span class="pre">RET</span></code>)</div>
</div>
<blockquote>
<div><p>Sustituye algunas coincidencias de <em>expreg</em> por <em>nueva-cadena</em>.</p>
</div></blockquote>
<p>Si desea cambiar sólo algunas de las apariciones de <code class="docutils literal notranslate"><span class="pre">foo</span></code> por <code class="docutils literal notranslate"><span class="pre">bar</span></code>, y no todas, use <code class="docutils literal notranslate"><span class="pre">M-%</span></code> (<code class="docutils literal notranslate"><span class="pre">query-replace</span></code>). Este comando busca las apariciones de <code class="docutils literal notranslate"><span class="pre">foo</span></code> una a una, muestra cada una de ellas y le pregunta si desea sustituirla. Aparte de la consulta, <code class="docutils literal notranslate"><span class="pre">query-replace</span></code> funciona igual que <code class="docutils literal notranslate"><span class="pre">replace-string</span></code> (véase <strong>Sustitución Incondicional</strong>). En particular, conserva mayúsculas y minúsculas siempre que <code class="docutils literal notranslate"><span class="pre">case-replace</span></code> no sea nulo, como suele ser el caso (consulte <strong>Comandos de Reemplazo y Coincidencias Laxas</strong>). Un argumento numérico significa que sólo se tienen en cuenta las ocurrencias delimitadas por caracteres delimitadores de palabras. Un argumento prefijo negativo reemplaza hacia atrás.</p>
<p><code class="docutils literal notranslate"><span class="pre">C-M-%</span></code> realiza una búsqueda y sustitución expreg (<code class="docutils literal notranslate"><span class="pre">query-replace-regexp</span></code>). Funciona como <code class="docutils literal notranslate"><span class="pre">replace-regexp</span></code>, salvo que realiza consultas como <code class="docutils literal notranslate"><span class="pre">query-replace</span></code>.</p>
<p>Con estos comandos puede reutilizar sustituciones anteriores. Cuando <code class="docutils literal notranslate"><span class="pre">query-replace</span></code> o <code class="docutils literal notranslate"><span class="pre">query-replace-regexp</span></code> pide la cadena de búsqueda, use <code class="docutils literal notranslate"><span class="pre">M-p</span></code> y <code class="docutils literal notranslate"><span class="pre">M-n</span></code> para mostrar sustituciones anteriores en la forma <code class="docutils literal notranslate"><span class="pre">desde</span> <span class="pre">-&gt;</span> <span class="pre">a</span></code>, donde <em>desde</em> es el patrón de búsqueda, <em>a</em> es su sustitución, y el separador entre ellos viene determinado por el valor de la variable <code class="docutils literal notranslate"><span class="pre">query-replace-from-to-separator</span></code>. Escriba <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>) para seleccionar el sustituto deseado. Si el valor de esta variable es nulo, las sustituciones no se añaden al historial de comandos y no pueden reutilizarse.</p>
<p>Estos comandos resaltan la coincidencia actual usando la cara <code class="docutils literal notranslate"><span class="pre">query-replace</span></code>. Puede desactivar este resaltado estableciendo la variable <code class="docutils literal notranslate"><span class="pre">query-replace-highlight</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>. Resaltan otras coincidencias usando <code class="docutils literal notranslate"><span class="pre">lazy-highlight</span></code> al igual que la búsqueda incremental (ver <strong>Búsqueda Incremental</strong>); esto puede desactivarse estableciendo <code class="docutils literal notranslate"><span class="pre">query-replace-lazy-highlight</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>. Por defecto, <code class="docutils literal notranslate"><span class="pre">query-replace-regexp</span></code> mostrará la cadena de sustitución sustituida para la coincidencia actual en el minibúfer. Si desea mantener las secuencias especiales <code class="docutils literal notranslate"><span class="pre">\&amp;</span></code> y <code class="docutils literal notranslate"><span class="pre">\n</span></code> sin expandir, personalice la variable <code class="docutils literal notranslate"><span class="pre">query-replace-show-replacement</span></code>. Al igual que <code class="docutils literal notranslate"><span class="pre">search-highlight-submatches</span></code> resalta las subexpresiones en la búsqueda incremental (consulte <strong>Adaptación de la Búsqueda a sus Necesidades</strong>), la variable <code class="docutils literal notranslate"><span class="pre">query-replace-highlight-submatches</span></code> define si se resaltan las subexpresiones en los comandos de sustitución expreg.</p>
<p>La variable <code class="docutils literal notranslate"><span class="pre">query-replace-skip-read-only</span></code>, si no es nula, hará que los comandos de reemplazo ignoren las coincidencias en texto de sólo lectura. El valor por defecto es no ignorarlas.</p>
<p>Los caracteres que puede escribir cuando se le muestre una coincidencia de cadena o expreg son:</p>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">SPACE</kbd> (<code class="docutils literal notranslate"><span class="pre">SPC</span></code>)</div>
<div class="line"><kbd class="kbd docutils literal notranslate">y</kbd> (<code class="docutils literal notranslate"><span class="pre">y</span></code>)</div>
</div>
<blockquote>
<div><p>Sustituye la ocurrencia por <em>nueva-cadena</em>.</p>
</div></blockquote>
<div class="line-block">
<div class="line"><code class="docutils literal notranslate"><span class="pre">DEL</span></code></div>
<div class="line"><code class="docutils literal notranslate"><span class="pre">Delete</span></code></div>
<div class="line"><code class="docutils literal notranslate"><span class="pre">BACKSPACE</span></code></div>
<div class="line"><kbd class="kbd docutils literal notranslate">n</kbd> <code class="docutils literal notranslate"><span class="pre">n</span></code></div>
</div>
<blockquote>
<div><p>Salta a la siguiente ocurrencia sin reemplazar la actual.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">,</kbd> (<code class="docutils literal notranslate"><span class="pre">,</span></code>, coma)</p>
<blockquote>
<div><p>Reemplaza esta ocurrencia y muestra el resultado. A continuación, se le pide otro carácter de entrada para decirle qué hacer a continuación. Dado que el reemplazo ya se ha hecho,
<code class="docutils literal notranslate"><span class="pre">DEL</span></code> y <code class="docutils literal notranslate"><span class="pre">SPC</span></code> son equivalentes en esta situación; ambos se mueven a la siguiente ocurrencia.</p>
<p>Puede teclear <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span></code>) en este punto (ver más abajo) para alterar el texto reemplazado. También puede deshacer el reemplazo con el comando deshacer (por ejemplo,
teclee <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">u</kbd> ((<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">u</span></code>); vea <strong>Deshacer</strong>); esto sale de la consulta-reemplazo (termina el comando <code class="docutils literal notranslate"><span class="pre">query-replace</span></code>), así que si quiere hacer más reemplazos
debe usar <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">ESC</kbd><kbd class="kbd docutils literal notranslate">ESC</kbd><kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">ESC</span> <span class="pre">ESC</span> <span class="pre">RET</span></code>) para reiniciar (vea <strong>Repetición de Comandos del Minibúfer</strong>).</p>
</div></blockquote>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>)</div>
<div class="line"><kbd class="kbd docutils literal notranslate">q</kbd> (<code class="docutils literal notranslate"><span class="pre">q</span></code>)</div>
</div>
<blockquote>
<div><p>Sale sin hacer más sustituciones.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">.</kbd> (<code class="docutils literal notranslate"><span class="pre">.</span></code>, punto)</p>
<blockquote>
<div><p>Reemplaza esta ocurrencia y luego sale sin buscar más ocurrencias.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">!</kbd> (<code class="docutils literal notranslate"><span class="pre">!</span></code>)</p>
<blockquote>
<div><p>Reemplaza todas las ocurrencias restantes sin preguntar de nuevo.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">^</kbd> (<code class="docutils literal notranslate"><span class="pre">^</span></code>)</p>
<blockquote>
<div><p>Vuelve a la posición de la ocurrencia anterior (o de lo que solía ser una ocurrencia), en caso de que la haya cambiado por error o quiera volver a examinarla.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">u</kbd> (<code class="docutils literal notranslate"><span class="pre">u</span></code>)</p>
<blockquote>
<div><p>Deshace la última sustitución y vuelve al punto en el que se realizó dicha sustitución.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">U</kbd> (<code class="docutils literal notranslate"><span class="pre">U</span></code>)</p>
<blockquote>
<div><p>Deshace todas las sustituciones y vuelve al punto donde se realizó la primera.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> (<code class="docutils literal notranslate"><span class="pre">C-r</span></code>)</p>
<blockquote>
<div><p>Entra en un nivel de edición recursiva, en caso de que la ocurrencia necesite ser editada en lugar de simplemente reemplazada por <em>nueva-cadena</em>. Cuando haya terminado, salga del
nivel de edición recursiva con <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-c</span></code>) para pasar a la siguiente ocurrencia. Véase <strong>Niveles de Edición Recursiva</strong>.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">w</kbd> (<code class="docutils literal notranslate"><span class="pre">C-w</span></code>)</p>
<blockquote>
<div><p>Borra la aparición y, a continuación, se puede introducir un nivel de edición recursiva como con <code class="docutils literal notranslate"><span class="pre">C-r</span></code>. Use la edición recursiva para insertar texto para reemplazar la ocurrencia
borrada de la cadena. Cuando termine, salga del nivel de edición recursiva con <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> (<code class="docutils literal notranslate"><span class="pre">C-M-c</span></code>) para proceder a la siguiente ocurrencia.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">e</kbd> (<code class="docutils literal notranslate"><span class="pre">e`</span></code>)</p>
<blockquote>
<div><p>Edita la cadena de sustitución en el minibúfer. Cuando salga del minibúfer tecleando <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>), el contenido del minibúfer sustituirá a la aparición actual del
patrón. También se convierten en la nueva cadena de sustitución para cualquier otra aparición.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">E</kbd> (<code class="docutils literal notranslate"><span class="pre">E</span></code>)</p>
<blockquote>
<div><p>Es como <code class="docutils literal notranslate"><span class="pre">e</span></code>, pero el siguiente reemplazo se hará con mayúsculas y minúsculas exactas. Es decir, si tiene una <code class="docutils literal notranslate"><span class="pre">query-replace</span></code> (consulta-reemplazo) de <code class="docutils literal notranslate"><span class="pre">foo</span></code> a <code class="docutils literal notranslate"><span class="pre">bar</span></code>, un texto
como <code class="docutils literal notranslate"><span class="pre">Foo</span></code> será normalmente reemplazado por <code class="docutils literal notranslate"><span class="pre">Bar</span></code>. Use este comando para hacer el reemplazo actual con mayúsculas y minúsculas exactas.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">l</kbd> (<code class="docutils literal notranslate"><span class="pre">C-l</span></code>)</p>
<blockquote>
<div><p>Vuelve a mostrar la pantalla. A continuación, debe escribir otro carácter para especificar qué hacer con esta ocurrencia.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Y</kbd> (<code class="docutils literal notranslate"><span class="pre">Y</span></code>, <code class="docutils literal notranslate"><span class="pre">Upper-case</span></code>)</p>
<blockquote>
<div><p>Reemplaza todas las ocurrencias restantes en todos los otros búferes en reemplazos multibúfer (como el comando Dired <code class="docutils literal notranslate"><span class="pre">Q</span></code> que realiza reemplazos de consulta en archivos
seleccionados). Responderá a esta pregunta y a todas las preguntas posteriores de la serie con un «yes» (si), sin más interacción por parte del Usuario.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">N</kbd> (<code class="docutils literal notranslate"><span class="pre">N</span></code>, <code class="docutils literal notranslate"><span class="pre">upper-case</span></code>)</p>
<blockquote>
<div><p>Salta al búfer siguiente en sustituciones multibúfer sin sustituir las ocurrencias restantes en el búfer actual. Responda «no» a esta pregunta, no hace preguntas sobre el búfer actual
y continúa con el siguiente búfer de la secuencia.</p>
</div></blockquote>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">h</kbd> (<code class="docutils literal notranslate"><span class="pre">C-h</span></code>)</div>
<div class="line"><kbd class="kbd docutils literal notranslate">?</kbd> (<code class="docutils literal notranslate"><span class="pre">?</span></code>)</div>
<div class="line"><kbd class="kbd docutils literal notranslate">F1</kbd> (<code class="docutils literal notranslate"><span class="pre">F1</span></code>)</div>
</div>
<blockquote>
<div><p>Muestra un mensaje que resume estas opciones. A continuación, debe escribir otro carácter para especificar qué hacer con esta ocurrencia.</p>
</div></blockquote>
<p>Aparte de esto, cualquier otro carácter sale de la consulta-reemplazo (<code class="docutils literal notranslate"><span class="pre">query-replace</span></code>) y se vuelve a leer como parte de una secuencia de teclas. De este modo, si escribe <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">k</kbd> (<code class="docutils literal notranslate"><span class="pre">C-k</span></code>), sale de la consulta-reemplazo y pasa al final de la línea. En particular, <code class="docutils literal notranslate"><span class="pre">C-g</span></code> simplemente sale de la consulta-reemplazo.</p>
<p>Para reiniciar una consulta-reemplazo una vez que se ha salido, utilice <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <kbd class="kbd docutils literal notranslate">ESC</kbd><kbd class="kbd docutils literal notranslate">ESC</kbd> (<code class="docutils literal notranslate"><span class="pre">C-x</span> <span class="pre">ESC</span> <span class="pre">ESC</span></code>), que repite la consulta-reemplazo porque ha utilizado el minibúfer para leer sus argumentos. Véase <strong>Repetir Comandos del minibúfer</strong>.</p>
<p>La opción <code class="docutils literal notranslate"><span class="pre">search-invisible</span></code> (búsqueda-invisible) determina cómo <code class="docutils literal notranslate"><span class="pre">query-replace</span></code> trata el texto invisible. Véase <strong>Búsqueda de Contornos</strong>.</p>
<p>Véase <strong>Operar con Archivos</strong>, para el comando <code class="docutils literal notranslate"><span class="pre">Q</span></code> de Dired que realiza el reemplazo por consulta en los archivos seleccionados. Véase también <strong>Transformación de Nombres de Archivos</strong> en Dired, para los comandos de Dired para renombrar, copiar o enlazar archivos reemplazando las coincidencias expreg en los nombres de archivos.</p>
</section>
</section>
<section id="otros-comandos-de-busqueda-y-bucle">
<h2>16.11. Otros Comandos de Búsqueda y Bucle<a class="headerlink" href="#otros-comandos-de-busqueda-y-bucle" title="Link to this heading"></a></h2>
<p>A continuación se muestran otros comandos que buscan coincidencias para expresiones regulares (expreg). Todos ellos ignoran mayúsculas y minúsculas en la búsqueda, si el patrón no contiene letras mayúsculas y la búsqueda de mayúsculas y minúsculas no es nula. Aparte de <code class="docutils literal notranslate"><span class="pre">multi-occur</span></code> y <code class="docutils literal notranslate"><span class="pre">multi-occur-in-matching-búfers</span></code>, que siempre buscan en todo el búfer, todos los comandos operan en el texto desde el punto hasta el final del búfer, o en la región si está activa.</p>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <code class="docutils literal notranslate"><span class="pre">multi-isearch-buffer</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">multi-isearch-buffer</span></code>)</p>
<blockquote>
<div><p>Pregunta por uno o más nombres de búferes, terminando con <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>); luego, comienza una búsqueda incremental multi-búfer en esos búferes. (Si la búsqueda falla en un
búfer, el siguiente <code class="docutils literal notranslate"><span class="pre">C-s</span></code> intenta buscar en el siguiente búfer especificado, y así sucesivamente). Con un argumento de prefijo, solicita una expresión regular y comienza una
búsqueda incremental en varios búferes que coincidan con dicha expresión.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">multi-isearch-buffers-regexp</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">multi-isearch-buffers-regexp</span></code>)</p>
<blockquote>
<div><p>Este comando es igual que <code class="docutils literal notranslate"><span class="pre">multi-isearch-búfers</span></code> (multi-búsqueda-búfers), excepto que realiza una búsqueda de expresión regular incremental.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">multi-isearch-files</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">multi-isearch-files</span></code>)</p>
<blockquote>
<div><p>Solicita uno o más nombres de archivos, terminados en <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>); a continuación, inicia una búsqueda incremental de varios archivos en ellos. (Si la búsqueda falla en un
archivo, el siguiente <code class="docutils literal notranslate"><span class="pre">C-s</span></code> intenta buscar en el siguiente archivo especificado, y así sucesivamente). Con un argumento de prefijo, solicita una expresión regular y comienza una
búsqueda incremental en varios archivos que coincidan con dicha expresión.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">multi-isearch-files-regexp</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">multi-isearch-files-regexp</span></code>)</p>
<blockquote>
<div><p>Este comando es igual que <code class="docutils literal notranslate"><span class="pre">multi-isearch-files</span></code>, excepto que realiza una búsqueda incremental de expresiones regulares (expreg).</p>
<p>En algunos modos que establecen la variable local de búfer <code class="docutils literal notranslate"><span class="pre">multi-isearch-next-búfer-function</span></code> (por ejemplo, en el modo Change Log) se activa automáticamente una búsqueda
incremental de varios archivos.</p>
</div></blockquote>
<div class="line-block">
<div class="line"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">occur</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">occur</span></code>)</div>
<div class="line"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> <kbd class="kbd docutils literal notranslate">o</kbd> (<code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">o</span></code>)</div>
</div>
<blockquote>
<div><p>Solicita una expresión regular (expreg) y muestra una lista con cada línea del búfer que contiene una coincidencia. Si escribe <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">n</kbd> (<code class="docutils literal notranslate"><span class="pre">M-n</span></code>) en el indicador, puede
reutilizar las cadenas de búsqueda de búsquedas incrementales anteriores. El texto coincidente se resalta con la cara de coincidencia. Un argumento numérico <em>n</em> especifica que se deben
mostrar <em>n</em> líneas de contexto antes y después de cada línea coincidente.</p>
<p>El número predeterminado de líneas de contexto se especifica mediante la variable <code class="docutils literal notranslate"><span class="pre">list-matching-lines-default-context-lines</span></code>. Cuando <code class="docutils literal notranslate"><span class="pre">list-matching-lines-jump-to-current-line</span></code> es
distinto de cero, la línea actual se muestra resaltada con la cara <code class="docutils literal notranslate"><span class="pre">list-matching-lines-current-line-face</span></code> y el punto se establece en la primera coincidencia después de dicha línea.</p>
<p>También puede ejecutar <code class="docutils literal notranslate"><span class="pre">M-s</span> <span class="pre">o</span></code> cuando está activa una búsqueda incremental; esto utiliza la cadena de búsqueda actual.</p>
<p>Tenga en cuenta que las coincidencias para la expresión regular (expreg) que escriba se extienden para incluir líneas completas, y una coincidencia que comienza antes de que termine
la coincidencia anterior no se considera una coincidencia.</p>
<p>El búfer <code class="docutils literal notranslate"><span class="pre">*Occur*</span></code> usa el modo Occur como modo principal. Puede utilizar las teclas <em>n</em> y <em>p</em> para desplazarse a la coincidencia siguiente o anterior; con argumento numérico
prefijo, estos comandos desplazan esa cantidad de coincidencias. Las teclas numéricas están ligadas al argumento numérico, por lo que <kbd class="kbd docutils literal notranslate">5</kbd><kbd class="kbd docutils literal notranslate">n</kbd> (<code class="docutils literal notranslate"><span class="pre">5</span> <span class="pre">n</span></code>) se mueve a la quinta
coincidencia siguiente (no tiene que teclear <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">u</kbd> (<code class="docutils literal notranslate"><span class="pre">C-u</span></code>)). <kbd class="kbd docutils literal notranslate">SPACE</kbd> (<code class="docutils literal notranslate"><span class="pre">SPC</span></code>) y <code class="docutils literal notranslate"><span class="pre">DEL</span></code> desplazan el búfer <code class="docutils literal notranslate"><span class="pre">*Occur*</span></code> hacia arriba y hacia abajo. Al hacer clic
en una coincidencia o mover el punto allí y escribir <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>) se visita la posición correspondiente en el búfer original que se buscó. o y <code class="docutils literal notranslate"><span class="pre">C-o</span></code> muestran la
coincidencia en otra ventana; <code class="docutils literal notranslate"><span class="pre">C-o</span></code> no selecciona esa ventana. Alternativamente, puede usar el comando <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">g</kbd> <kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">n</kbd> (<code class="docutils literal notranslate"><span class="pre">M-g</span> <span class="pre">M-n</span></code>, <code class="docutils literal notranslate"><span class="pre">next-error</span></code>) para
visitar las ocurrencias una a una (ver <strong>Modo de Compilación</strong>). Finalmente, <kbd class="kbd docutils literal notranslate">q</kbd> (<code class="docutils literal notranslate"><span class="pre">q</span></code>) sale de la ventana que muestra el búfer <code class="docutils literal notranslate"><span class="pre">*Occur*</span></code> y entierra el búfer.</p>
<p>Tecleando <kbd class="kbd docutils literal notranslate">e</kbd> (<code class="docutils literal notranslate"><span class="pre">e</span></code>) en el búfer <code class="docutils literal notranslate"><span class="pre">*Ocurr*</span></code> hace que el búfer sea escribible y entra en el modo Occur Edit, en el que puede editar las líneas coincidentes y hacer que esas
ediciones se reflejen en el texto del búfer de origen. Teclee <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> <kbd class="kbd docutils literal notranslate">Ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> (<code class="docutils literal notranslate"><span class="pre">C-c</span> <span class="pre">C-c</span></code>) para salir del modo Occur Edit y volver al modo Occur.</p>
<p>El comando <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">list-matching-lines</span></code> es un sinónimo de <code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">occur</span></code>.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">multi-occur</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">multi-occur</span></code>)</p>
<blockquote>
<div><p>Este comando es igual que occur, excepto que es capaz de buscar a través de múltiples búferes. Le pide que especifique los nombres de los búferes uno por uno.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">multi-occur-in-matching-buffers</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">multi-occur-in-matching-buffers</span></code>)</p>
<blockquote>
<div><p>Este comando es similar a <code class="docutils literal notranslate"><span class="pre">multi-occur</span></code>, excepto que los búferes a buscar se especifican mediante una expresión regular que coincide con los nombres de archivos visitados. Con un
argumento de prefijo, usa la expresión regular para coincidir con los nombres de los búferes.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">how-many</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">how-many</span></code>)</p>
<blockquote>
<div><p>Pide una expresión regular e imprime el número de coincidencias en el búfer después del punto. Si la región está activa, esto opera en la región en su lugar.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">flush-lines</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">flush-lines</span></code>)</p>
<blockquote>
<div><p>Cuando el comando termina, imprime el número de líneas coincidentes borradas.</p>
<p>Este comando borra la línea actual si contiene una coincidencia que empiece después del punto. Si la región está activa, opera sobre la región en su lugar; si una línea parcialmente
contenida en la región contiene una coincidencia totalmente contenida en la región, se borra.</p>
<p>Si una coincidencia se divide en varias líneas, <code class="docutils literal notranslate"><span class="pre">flush-lines</span></code> borra todas esas líneas. Elimina las líneas antes de empezar a buscar la siguiente coincidencia; por lo tanto, ignora
una coincidencia que empiece en la misma línea en la que terminó otra coincidencia.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">keep-lines</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">keep-lines</span></code>)</p>
<blockquote>
<div><p>Solicita una expresión regular (expreg) y borra cada línea que no contenga una coincidencia, operando en el texto después del punto. Si el punto no está al principio de una línea,
este comando siempre mantiene la línea actual. Si la región está activa, el comando opera sobre la región en su lugar; nunca borra las líneas que sólo están parcialmente contenidas
en la región (una nueva línea que termina una línea cuenta como parte de esa línea).</p>
<p>Si una coincidencia se divide en varias líneas, este comando conserva todas esas líneas.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">matching-lines</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">kill-matching-lines</span></code>)</p>
<blockquote>
<div><p>Como <code class="docutils literal notranslate"><span class="pre">flush-lines</span></code>, pero también añade las líneas coincidentes al anillo de muertes. El comando añade las líneas coincidentes al anillo de muestres como una sola cadena, incluyendo
las nuevas líneas que las separan.</p>
</div></blockquote>
<p><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> <code class="docutils literal notranslate"><span class="pre">copy-matching-lines</span></code> (<code class="docutils literal notranslate"><span class="pre">M-x</span> <span class="pre">copy-matching-lines</span></code>)</p>
<blockquote>
<div><p>Como <code class="docutils literal notranslate"><span class="pre">kill-matching-lines</span></code>, pero las líneas coincidentes no se eliminan del búfer.</p>
</div></blockquote>
</section>
<section id="adaptar-la-busqueda-a-sus-necesidades">
<h2>16.12 Adaptar la Búsqueda a sus Necesidades<a class="headerlink" href="#adaptar-la-busqueda-a-sus-necesidades" title="Link to this heading"></a></h2>
<p>En esta sección se describen diversas personalizaciones relacionadas con la búsqueda que no se han descrito en otros apartados.</p>
<p>El modo de búsqueda por defecto para la búsqueda incremental se especifica mediante la variable <code class="docutils literal notranslate"><span class="pre">search-default-mode</span></code>. Puede ser <code class="docutils literal notranslate"><span class="pre">nil</span></code>, <code class="docutils literal notranslate"><span class="pre">t</span></code> o una función. Si es <code class="docutils literal notranslate"><span class="pre">nil</span></code>, el modo por defecto es hacer búsquedas literales sin plegar caracteres, pero con plegar mayúsculas/minúsculas y coincidencias <code class="docutils literal notranslate"><span class="pre">lax-whitespace</span></code> determinadas por <code class="docutils literal notranslate"><span class="pre">case-fold-search</span></code> y <code class="docutils literal notranslate"><span class="pre">search-whitespace-regexp</span></code>, respectivamente (véase <strong>Coincidencias Laxas Durante la Búsqueda</strong>). Si el valor es <code class="docutils literal notranslate"><span class="pre">t</span></code>, la búsqueda incremental se realiza por defecto mediante búsquedas expreg. El valor predeterminado especifica una función que sólo realiza el plegado de mayúsculas y minúsculas y la concordancia <code class="docutils literal notranslate"><span class="pre">lax-whitespace</span></code>.</p>
<p>La coincidencia actual de una búsqueda incremental en curso se resalta usando la cara <code class="docutils literal notranslate"><span class="pre">isearch</span></code>. Este resaltado puede desactivarse estableciendo la variable <code class="docutils literal notranslate"><span class="pre">search-highlight</span></code> en <code class="docutils literal notranslate"><span class="pre">nil</span></code>.</p>
<p>Cuando se buscan expresiones regulares (por ejemplo con <code class="docutils literal notranslate"><span class="pre">C-M-s</span></code>), las subexpresiones reciben un resaltado especial dependiendo de la variable <code class="docutils literal notranslate"><span class="pre">search-highlight-submatches</span></code>. Si el valor de esta variable es nulo, no se realiza ningún resaltado especial, pero si el valor es distinto de nulo, el texto que coincida con construcciones <code class="docutils literal notranslate"><span class="pre">\(</span> <span class="pre">...</span> <span class="pre">\)</span></code> (también conocidas como «subexpresiones») en la expresión regular se resaltará con caras distintas. Por defecto, se definen dos caras distintas, denominadas <code class="docutils literal notranslate"><span class="pre">isearch-group-1</span></code> e <code class="docutils literal notranslate"><span class="pre">isearch-group-2</span></code>. Con estas dos caras, las subexpresiones impares se resaltarán usando la cara <code class="docutils literal notranslate"><span class="pre">isearch-group-1</span></code> y las subexpresiones pares se resaltarán usando la cara <code class="docutils literal notranslate"><span class="pre">isearch-group-2</span></code>. Por ejemplo, al buscar <code class="docutils literal notranslate"><span class="pre">foo-\([0-9]+\)\([a-z]+\)</span></code>, la parte coincidente con <code class="docutils literal notranslate"><span class="pre">[0-9]+</span></code> se resaltará con la cara <code class="docutils literal notranslate"><span class="pre">isearch-group-1</span></code>, y la parte coincidente con <code class="docutils literal notranslate"><span class="pre">[a-z]+</span></code> se resaltará con <code class="docutils literal notranslate"><span class="pre">isearch-group-2</span></code>. Si define caras adicionales utilizando el mismo esquema de numeración, es decir, <code class="docutils literal notranslate"><span class="pre">isearch-group-3</span></code>, <code class="docutils literal notranslate"><span class="pre">isearch-group-4</span></code>, …, la cara <code class="docutils literal notranslate"><span class="pre">isearch-group-M</span></code> se utilizará para resaltar la <em>M</em>nésima, <code class="docutils literal notranslate"><span class="pre">N+M</span></code><em>nésima</em>, <code class="docutils literal notranslate"><span class="pre">2N+M</span></code><em>nésima</em>, … subexpresiones, donde <em>N</em> es el número total de caras de la forma <code class="docutils literal notranslate"><span class="pre">isearch-group-M</span></code>.</p>
<p>Las demás coincidencias de la cadena de búsqueda visibles en pantalla se resaltan mediante la cara <code class="docutils literal notranslate"><span class="pre">lazy-highlight</span></code>. Establecer la variable <code class="docutils literal notranslate"><span class="pre">isearch-lazy-highlight</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code> desactiva este resaltado. Aquí hay otras variables que personalizan el resaltado difuso:</p>
<dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">lazy-highlight-initial-delay</span></code></dt><dd><p>Tiempo en segundos que se debe esperar antes de resaltar las coincidencias visibles. Sólo se aplica si la cadena de búsqueda tiene menos de caracteres que
<code class="docutils literal notranslate"><span class="pre">lazy-highlight-no-delay-length</span></code>.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">lazy-highlight-no-delay-length</span></code></dt><dd><p>Para cadenas de búsqueda al menos tan largas como el valor de esta variable, el resaltado más lento de las coincidencias comienza inmediatamente.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">lazy-highlight-interval</span></code></dt><dd><p>Tiempo en segundos entre el resaltado de coincidencias sucesivas.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">lazy-highlight-max-at-a-time</span></code></dt><dd><p>El número máximo de coincidencias a resaltar antes de comprobar la entrada. Un número grande puede tardar algún tiempo en resaltarse, así que si quiere continuar buscando y teclee
<code class="docutils literal notranslate"><span class="pre">C-s</span></code> o <code class="docutils literal notranslate"><span class="pre">C-r</span></code> durante ese tiempo, Emacs no responderá hasta que termine de resaltar todas esas coincidencias. Por lo tanto, valores más pequeños hacen que Emacs responda mejor.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">isearch-lazy-count</span></code></dt><dd><p>Muestra el número actual de coincidencias y el número total de coincidencias en la consulta de búsqueda.</p>
</dd>
</dl>
<div class="line-block">
<div class="line"><code class="docutils literal notranslate"><span class="pre">lazy-count-prefix-format</span></code></div>
<div class="line"><code class="docutils literal notranslate"><span class="pre">lazy-count-suffix-format</span></code></div>
</div>
<blockquote>
<div><p>Estas dos variables determinan el formato de mostrar el número actual y total de coincidencias para <code class="docutils literal notranslate"><span class="pre">isearch-lazy-count</span></code>.</p>
</div></blockquote>
<p>Normalmente, al teclear <kbd class="kbd docutils literal notranslate">RETURN</kbd> (<code class="docutils literal notranslate"><span class="pre">RET</span></code>) dentro de la búsqueda incremental cuando la cadena de búsqueda está vacía, se lanza una búsqueda no incremental. (En realidad, le permite editar la cadena de búsqueda y el siguiente <kbd class="kbd docutils literal notranslate">RETURN</kbd> realiza la búsqueda). Sin embargo, si personaliza la variable <code class="docutils literal notranslate"><span class="pre">search-nonincremental-instead</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>, al teclear <kbd class="kbd docutils literal notranslate">RETURN</kbd> siempre se saldrá de la búsqueda incremental, aunque la cadena de búsqueda esté vacía.</p>
<p>Por defecto, los comandos de búsqueda incremental y consulta-reemplazo (<code class="docutils literal notranslate"><span class="pre">query-replace</span></code>) coinciden con el texto invisible, pero ocultan dichas coincidencias en cuanto la coincidencia actual se desplaza fuera del texto invisible. Si personaliza la variable <code class="docutils literal notranslate"><span class="pre">isearch-hide-immediately</span></code> a <code class="docutils literal notranslate"><span class="pre">nil</span></code>, cualquier texto invisible en el que se hayan encontrado coincidencias permanecerá en pantalla hasta que finalice la búsqueda o termine la ejecución el comando <code class="docutils literal notranslate"><span class="pre">replace</span></code>.</p>
<p>La búsqueda incremental en terminales lentos, como las pantallas conectadas a máquinas remotas a través de una conexión lenta, puede resultar molesta debido a la necesidad de redibujar grandes partes de la pantalla a medida que avanza la búsqueda. Emacs proporciona un modo de visualización especial para terminales lentos, mediante el cual la búsqueda abre una pequeña ventana separada y muestra el texto que rodea a la coincidencia en esa ventana. Las ventanas pequeñas se muestran más rápido, por lo que se alivia el molesto efecto de la velocidad lenta. La variable <code class="docutils literal notranslate"><span class="pre">search-slow-speed</span></code> determina el umbral de velocidad en baudios por debajo del cual Emacs usará este modo de visualización. La variable search-slow-window-lines controla el número de líneas de la ventana que Emacs abre para mostrar los resultados de la búsqueda; por defecto es 1 línea. Normalmente, esta ventana aparecerá en la parte inferior de la ventana que muestra el búfer donde se inicia la búsqueda, pero si el valor de <code class="docutils literal notranslate"><span class="pre">search-slow-window-lines</span></code> es negativo, significa que se pondrá la ventana en la parte superior y se le dará el número de líneas que sea el valor absoluto de <code class="docutils literal notranslate"><span class="pre">search-slow-window-lines</span></code>.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pie de página">
<a href="15_ControlDisplay.html" class="btn btn-neutral float-left" title="15 Controlando la Pantalla" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Anterior</a>
<a href="17_CmdCorrecErrsTipogr.html" class="btn btn-neutral float-right" title="17 Comandos para Corregir Errores Tipográficos" accesskey="n" rel="next">Siguiente <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Derechos de autor 2023, Tano.</p>
</div>
Compilado con <a href="https://www.sphinx-doc.org/">Sphinx</a> usando un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">tema</a>
proporcionado por <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>