<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>VI: el ancestro</title><meta name="generator" content="DocBook XSL Stylesheets V1.64.0"><link rel="home" href="index.html" title="Guía de Referencia"><link rel="up" href="text-editing.html" title="Capítulo 4. La edición de texto: Emacs y VI"><link rel="previous" href="ch04s01.html" title="Emacs"><link rel="next" href="ch04s03.html" title="Una última palabra..."></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">VI: el ancestro</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s01.html">Anterior</a> </td><th width="60%" align="center">Capítulo 4. La edición de texto: Emacs y VI</th><td width="20%" align="right"> <a accesskey="n" href="ch04s03.html">Siguiente</a></td></tr></table><hr></div><div class="sect1" lang="es"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2541373"></a>VI: el ancestro</h2></div></div><div></div></div><div class="abstract"><p class="title"><b>Resumen</b></p><p><a name="BId-text-editing-pa29"></a><a class="indexterm" name="BId-text-editing-it2"></a><span class="application">Vi</span> fue el primer editor de pantalla completa que existió. Es uno de los programas al que apuntan los detractores de <span class="application">UNIX</span>, pero también uno de los argumentos principales de sus defensores: si bien es complicado de aprender, también es una herramienta extremadamente potente una vez que uno se acostumbra a usarlo. Con unos pocos tecleos, un usuario de <span class="application">Vi</span> puede mover montañas y, aparte de <span class="application">Emacs</span>, pocos editores de texto pueden decir lo mismo.</p></div><p><a name="BId-text-editing-pa30"></a>La versión provista con <span class="application">Mandrakelinux</span> es de hecho, <span class="application">vim</span>, por <span class="foreignphrase"><i class="foreignphrase">VI iMproved</i></span> (VI Mejorado), pero lo llamaremos <span class="application">Vi</span> a lo largo de este capítulo.</p><div class="sect2" lang="es"><div class="titlepage"><div><div><h3 class="title"><a name="id2541484"></a>Modo de inserción, Modo comando, Modo ex...</h3></div></div><div></div></div><p><a name="BId-text-editing-pa31"></a>Primero, necesitamos iniciar <span class="application">Vi</span>, lo cual se hace exactamente como con <span class="application">Emacs</span>. Así que, volvamos a nuestros dos archivos e ingresemos:</p><a name="BId-text-editing-sc3"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ vi archivo1 archivo2</pre></td></tr></table><p><a name="BId-text-editing-pa32"></a>En este punto, Usted se encontrará frente a una ventana que se parece a la siguiente:</p><div class="figure"><a name="vi-1"></a><p class="title"><b>Figura 4.4. Situación inicial en VIM</b></p><div class="mediaobject" align="center"><img src="images/vi-1.png" align="middle" alt="Situación inicial en VIM"></div></div><p><a name="BId-text-editing-pa33"></a>Ahora Usted está en <a name="BId-text-editing-gt3" href="glossary.html#term-command-mode"><i class="glossterm">modo comando</i></a> frente al primer archivo abierto. En este modo, no puede insertar texto en un archivo. Para hacer esto, debe pasar a <a name="BId-text-editing-gt4" href="glossary.html#term-insert-mode"><i class="glossterm">modo inserción</i></a>.</p><p><a name="BIdNEW-text-editing-pa85"></a>Aquí tiene algunos atajos para insertar texto:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa34"></a> <span><b class="keycap">a</b></span> e <span><b class="keycap">i</b></span>: para insertar texto antes y después del cursor, respectivamente (<span><b class="keycap">A</b></span> e <span><b class="keycap">I</b></span> insertan texto al final y al principio de la línea corriente);</p></li><li><p><a name="BId-text-editing-pa35"></a> <span><b class="keycap">o</b></span> y <span><b class="keycap">O</b></span>: para insertar texto debajo y por encima de la línea corriente.</p></li></ul></div><p><a name="BId-text-editing-pa36"></a>En modo de inserción, Usted verá aparecer la cadena <tt class="literal">--INSERT--</tt> en la base de la pantalla (de esta forma, Usted sabrá en que modo se encuentra). Este es el único modo que le permitirá insertar texto. Para volver al modo comando, presione la tecla <span><b class="keycap">Esc</b></span>.</p><p><a name="BId-text-editing-pa37"></a>En modo de inserción, puede usar las teclas <span><b class="keycap">Retroceso</b></span> y <span><b class="keycap">Supr</b></span> para borrar texto a medida que avanza. Para desplazarse por el texto, tanto en modo comando como en modo inserción, utilice las teclas de las flechas. También hay otras combinaciones de teclas en modo comando, que veremos más adelante.</p><p><a name="BId-text-editing-pa38"></a>Usted accede al modo <span><b class="command">ex</b></span> presionando la tecla <span><b class="keycap">:</b></span> en modo comando. En la base de la pantalla aparecerá <tt class="literal">:</tt>, y allí se posicionará el cursor. <span class="application">Vi</span> considerará todo lo que Usted ingrese subsecuentemente, hasta la tecla <span><b class="keycap">Intro</b></span>, como un comando <span><b class="command">ex</b></span>. Si borra el comando y los <tt class="literal">:</tt> que ingresó, volverá al modo comando y el cursor retornará a su posición original en el texto.</p><p><a name="BId-text-editing-pa39"></a>Para grabar los cambios hechos a un archivo, se ingresa la secuencia <b class="userinput"><tt>:w</tt></b> en modo comando. Si desea grabar el contenido del buffer en otro archivo, ingrese <b class="userinput"><tt>:w <nombre_de_archivo></tt></b> </p></div><div class="sect2" lang="es"><div class="titlepage"><div><div><h3 class="title"><a name="id2541850"></a>Manipulación de los buffers</h3></div></div><div></div></div><p><a name="BId-text-editing-pa40"></a>Para moverse, en el mismo buffer, por entre los archivos cuyos nombres se pasaron en la línea de comandos, teclee <b class="userinput"><tt>:next</tt></b> para moverse al archivo siguiente y <b class="userinput"><tt>:prev</tt></b> para moverse al archivo previo. Puede usar <b class="userinput"><tt>:e <nombre_de_archivo></tt></b> también, lo cual le permite tanto cambiar al archivo deseado, si es que ya está abierto, como también abrir otro archivo. También puede usar el completado.</p><p><a name="BId-text-editing-pa41"></a>Puede tener varios buffers visibles en la pantalla a la vez, como con <span class="application">Emacs</span>. Para esto, use el comando <b class="userinput"><tt>:split</tt></b>.</p><p><a name="BId-text-editing-pa42"></a>Para cambiar de buffer, ingrese <span><b class="keycap">Ctrl</b></span>-<span><b class="keycap">w</b></span> <span><b class="keycap">j</b></span> para ir al buffer de abajo o <span><b class="keycap">Ctrl</b></span>-<span><b class="keycap">w</b></span> <span><b class="keycap">k</b></span> para ir al de arriba. También puede usar las teclas de las flechas para arriba y para abajo, en lugar de <span><b class="keycap">j</b></span> o <span><b class="keycap">k</b></span>. El comando <b class="userinput"><tt>:close</tt></b> oculta un buffer, el comando <b class="userinput"><tt>:q</tt></b> lo cierra.</p><p><a name="BId-text-editing-pa43"></a>Debe tener presente que si intenta ocultar o cerrar un buffer sin guardar los cambios, el comando no se llevará a cabo y <span class="application">Vi</span> mostrará este mensaje:</p><p><a name="BId-text-editing-pa44"></a> <tt class="computeroutput"> No write since last change (use ! to override) </tt> </p><p><a name="BId-text-editing-pa45"></a>(<span class="foreignphrase"><i class="foreignphrase">no se escribió desde el ultimo cambio (use <span><b class="keycap">!</b></span> para forzar el comando)</i></span>) En este caso, haga lo que se le dice e ingrese <b class="userinput"><tt>:q!</tt></b> o <b class="userinput"><tt>:close!</tt></b>.</p></div><div class="sect2" lang="es"><div class="titlepage"><div><div><h3 class="title"><a name="id2542069"></a>Edición de texto y comandos de desplazamiento</h3></div></div><div></div></div><p><a name="BId-text-editing-pa46"></a>Además de las teclas <span><b class="keycap">Retroceso</b></span> y <span><b class="keycap">Supr</b></span> en modo de edición, <span class="application">Vi</span> tiene muchos otros comandos para borrar, copiar, pegar, y reemplazar texto – en modo comando. Aquí, veremos algunos. Todos los comandos que se muestran aquí están, de hecho, separados en dos partes: la acción a realizar y su efecto. La acción puede ser:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa47"></a> <span><b class="keycap">c</b></span>: para cambiar (<span class="foreignphrase"><i class="foreignphrase">Change</i></span>) o reemplazar; el editor borra el texto que se pide y vuelve al modo de inserción después de este comando;</p></li><li><p><a name="BId-text-editing-pa48"></a> <span><b class="keycap">d</b></span>: para borrar (<span class="foreignphrase"><i class="foreignphrase">Delete</i></span>);</p></li><li><p><a name="BId-text-editing-pa49"></a> <span><b class="keycap">y</b></span>: para copiar (<span class="foreignphrase"><i class="foreignphrase">Yank</i></span>). Lo veremos en la sección siguiente.</p></li><li><p><a name="BId-text-editing-pa50"></a> <span><b class="keycap">.</b></span>: repite la última acción.</p></li></ul></div><p><a name="BId-text-editing-pa51"></a>El efecto define al grupo de caracteres sobre los cuales actúa el comando.</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa52"></a> <span><b class="keycap">h</b></span>, <span><b class="keycap">j</b></span>, <span><b class="keycap">k</b></span>, <span><b class="keycap">l</b></span>: un caracter a la izquierda, abajo, arriba, a la derecha<sup>[<a name="id2542259" href="#ftn.id2542259">13</a>]</sup> respectivamente;</p></li><li><p><a name="BId-text-editing-pa54"></a> <span><b class="keycap">e</b></span>, <span><b class="keycap">b</b></span>, <span><b class="keycap">w</b></span>: hasta el final (respecto al comienzo) de la palabra corriente; del comienzo de la palabra siguiente;</p></li><li><p><a name="BId-text-editing-pa55"></a> <span><b class="keycap">^</b></span>, <span><b class="keycap">0</b></span>, <span><b class="keycap">$</b></span>: hasta el primer caracter no blanco de la línea corriente, hasta el comienzo de la línea corriente, hasta el final de la línea corriente;</p></li><li><p><a name="BId-text-editing-pa56"></a> <span><b class="keycap">f</b></span> <span><b class="keycap"><x></b></span>: hasta la próxima ocurrencia del caracter <tt class="literal"><x></tt>; por ejemplo, <span><b class="keycap">f</b></span> <span><b class="keycap">e</b></span> desplaza el cursor hasta la próxima ocurrencia del caracter <tt class="literal">e</tt>;</p></li><li><p><a name="BId-text-editing-pa57"></a> <b class="userinput"><tt>/<cadena></tt></b>, <b class="userinput"><tt>?<cadena></tt></b>: hasta la próxima ocurrencia de la cadena o expresión regular <b class="userinput"><tt><cadena></tt></b>, y lo mismo yendo hacia atrás en el archivo; por ejemplo, <b class="userinput"><tt>/pepe</tt></b> mueve el cursor hasta la próxima ocurrencia de la palabra <tt class="literal">pepe</tt>;</p></li><li><p><a name="BId-text-editing-pa58"></a> <span><b class="keycap">{</b></span>, <span><b class="keycap">}</b></span>: hasta el comienzo, hasta el final, del párrafo corriente;</p></li><li><p><a name="BId-text-editing-pa59"></a> <span><b class="keycap">G</b></span>, <span><b class="keycap">H</b></span>: hasta el final del archivo, hasta el comienzo de la pantalla.</p></li></ul></div><p><a name="BId-text-editing-pa60"></a>Cada uno de estos caracteres de efecto o comandos de movimiento puede estar precedido por un número de repetición. <span><b class="keycap">G</b></span> referencia al número de línea en el archivo. A partir de esto, Usted puede hacer toda clase de combinaciones.</p><p><a name="BId-text-editing-pa61"></a>Algunos ejemplos:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa62"></a> <b class="userinput"><tt>6b</tt></b>: se mueve 6 palabras hacia atrás;</p></li><li><p><a name="BId-text-editing-pa63"></a> <b class="userinput"><tt>c8fk</tt></b>: borrar todo el texto hasta la octava ocurrencia del caracter <tt class="literal">k</tt> y luego pasar a modo de inserción;</p></li><li><p><a name="BId-text-editing-pa64"></a> <b class="userinput"><tt>91G</tt></b>: ir a la línea 91 del archivo;</p></li><li><p><a name="BId-text-editing-pa65"></a> <b class="userinput"><tt>d3$</tt></b>: borra hasta el final de la línea corriente más las dos líneas siguientes.</p></li></ul></div><p><a name="BIdNEW-text-editing-pa86"></a>Si bien muchos de estos comandos no son muy intuitivos, pero como siempre, el mejor método es practicarlos. Aunque puede ver que la expresión “<span class="quote">mover montañas con unas pocas teclas</span>” no es tan exagerada.</p></div><div class="sect2" lang="es"><div class="titlepage"><div><div><h3 class="title"><a name="id2542663"></a>Cortar, copiar, pegar</h3></div></div><div></div></div><p><a name="BId-text-editing-pa66"></a><span class="application">Vi</span> tiene un comando para copiar texto que ya hemos visto: el comando <span><b class="keycap">y</b></span>. Para cortar texto, simplemente use el comando <span><b class="keycap">d</b></span>. Hay 27 memorias para almacenar texto: una memoria anónima y 26 memorias que llevan el nombre de las 26 letras minúsculas del alfabeto inglés.</p><p><a name="BId-text-editing-pa67"></a>Para usar la memoria anónima Usted ingresa el comando “<span class="quote">tal cual</span>”. Así, el comando <b class="userinput"><tt>y12w</tt></b> copia a la memoria anónima las 12 palabras que están después del cursor<sup>[<a name="id2542731" href="#ftn.id2542731">14</a>]</sup>. Si Usted quiere cortar este área, use <b class="userinput"><tt>d12w</tt></b>.</p><p><a name="BId-text-editing-pa69"></a>Para usar una de las 26 memorias nombradas, ingrese la secuencia <b class="userinput"><tt>"<x></tt></b> antes del comando, donde <b class="userinput"><tt><x></tt></b> da el nombre de la memoria. Entonces, para copiar las mismas 12 palabras en la memoria <span><b class="keycap">k</b></span>, Usted puede ingresar <b class="userinput"><tt>"ky12w</tt></b>, y <b class="userinput"><tt>"kd12w</tt></b> para cortarlas.</p><p><a name="BId-text-editing-pa70"></a>Para pegar el contenido de la memoria anónima, Usted usa los comandos <span><b class="keycap">p</b></span> o <span><b class="keycap">P</b></span> (por <span class="foreignphrase"><i class="foreignphrase">Paste</i></span>, <span class="foreignphrase"><i class="foreignphrase">Pegar</i></span>), para insertar texto después o antes del cursor, respectivamente. Para pegar el contenido de una memoria nombrada, use <b class="userinput"><tt>"<x>p</tt></b> o <b class="userinput"><tt>"<x>P</tt></b> de la misma forma (por ejemplo, <b class="userinput"><tt>"dp</tt></b> pegará el contenido de la memoria <b class="userinput"><tt>d</tt></b> después del cursor)</p><p><a name="BId-text-editing-pa71"></a>Veamos un ejemplo:</p><div class="figure"><a name="vi-2"></a><p class="title"><b>Figura 4.5. VIM, antes de copiar el bloque de texto</b></p><div class="mediaobject" align="center"><img src="images/vi-2.png" align="middle" alt="VIM, antes de copiar el bloque de texto"></div></div><p><a name="BId-text-editing-pa72"></a>Para efectuar esta acción, nosotros:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa73"></a>volveremos a copiar las primeras 6 palabras de la oración en la memoria <span><b class="keycap">r</b></span> (por ejemplo): <b class="userinput"><tt>"ry6w</tt></b> <sup>[<a name="id2542939" href="#ftn.id2542939">15</a>]</sup>;</p></li><li><p><a name="BId-text-editing-pa75"></a>pasaremos al buffer <tt class="filename">archivo2</tt>, que está ubicado abajo: <span><b class="keycap">Ctrl</b></span>-<span><b class="keycap">w</b></span> <span><b class="keycap">j</b></span>;</p></li><li><p><a name="BId-text-editing-pa76"></a>pegaremos el contenido de la memoria <span><b class="keycap">r</b></span> antes del cursor: <b class="userinput"><tt>"rp</tt></b>.</p></li></ul></div><p><a name="BId-text-editing-pa77"></a>Obtenemos el resultado esperado, como se muestra en <a href="ch04s02.html#vi-3" title="Figura 4.6. VIM, después de copiar un bloque de texto">Figura 4.6, “VIM, después de copiar un bloque de texto”</a>.</p><div class="figure"><a name="vi-3"></a><p class="title"><b>Figura 4.6. VIM, después de copiar un bloque de texto</b></p><div class="mediaobject" align="center"><img src="images/vi-3.png" align="middle" alt="VIM, después de copiar un bloque de texto"></div></div><p><a name="BId-text-editing-pa78"></a>La búsqueda de texto es muy simple: en modo comando, Usted simplemente ingresa <span><b class="keycap">/</b></span> seguida de la cadena a buscar, y luego presiona la tecla <span><b class="keycap">Intro</b></span>. Por ejemplo, <b class="userinput"><tt>/fiesta</tt></b> buscará la cadena <tt class="literal">fiesta</tt> desde la posición corriente del cursor. Presionar <span><b class="keycap">n</b></span> lo lleva a la próxima ocurrencia, y si llega al final del archivo, la búsqueda comenzará nuevamente por el principio. Para iniciar una búsqueda hacia atrás, use <span><b class="keycap">?</b></span> en vez de <span><b class="keycap">/</b></span>.</p></div><div class="sect2" lang="es"><div class="titlepage"><div><div><h3 class="title"><a name="id2543148"></a>Salir de VI</h3></div></div><div></div></div><p><a name="BId-text-editing-pa79"></a>El comando para salir, es <b class="userinput"><tt>:q</tt></b> (de hecho, este comando cierra el buffer activo, como hemos visto, pero si es el único buffer presente, saldrá de <span class="application">Vi</span>). Hay un atajo: la mayoría de las veces, Usted edita un archivo solo. Entonces, para salir utilizará:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-text-editing-pa80"></a> <b class="userinput"><tt>:wq</tt></b> para guardar los cambios y salir (una solución más rápida es <b class="userinput"><tt>ZZ</tt></b>), o</p></li><li><p><a name="BId-text-editing-pa81"></a> <b class="userinput"><tt>:q!</tt></b> para salir sin grabar.</p></li></ul></div><p><a name="BId-text-editing-pa82"></a>Habrá notado que si tiene varios buffers, <b class="userinput"><tt>:wq</tt></b> escribirá el buffer activo y luego lo cerrará.</p></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2542259" href="#id2542259">13</a>] </sup>Un atajo para <span><b class="keycap">d</b></span> <span><b class="keycap">l</b></span> (borrar un caracter hacia adelante) es <span><b class="keycap">x</b></span>; un atajo para <span><b class="keycap">d</b></span> <span><b class="keycap">h</b></span> es <span><b class="keycap">X</b></span>; <span><b class="keycap">d</b></span> <span><b class="keycap">d</b></span> borra la línea corriente.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2542731" href="#id2542731">14</a>] </sup>Pero sólo si el cursor está posicionado ¡al comienzo de la primer palabra!</p></div><div class="footnote"><p><sup>[<a name="ftn.id2542939" href="#id2542939">15</a>] </sup> <b class="userinput"><tt>y6w</tt></b> significa literalmente: “<span class="quote"> <span class="foreignphrase"><i class="foreignphrase">Yank 6 words</i></span> </span>”.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04s01.html">Anterior</a> </td><td width="20%" align="center"><a accesskey="u" href="text-editing.html">Subir</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s03.html">Siguiente</a></td></tr><tr><td width="40%" align="left" valign="top">Emacs </td><td width="20%" align="center"><a accesskey="h" href="index.html">Inicio</a></td><td width="40%" align="right" valign="top"> Una última palabra...</td></tr></table></div></body></html>