Capítulo 4. Más allá de lo básico

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Ya has conocido los comandos básicos de edición,i, a, c, d y y. Este capítulo amplía lo que ya sabes sobre edición. Abarca:

  • Descripciones de funciones de edición adicionales, con una revisión de la forma de mando general

  • vi y las opciones de la línea de comandos de Vim, incluidas las distintas formas de abrir un archivo para editarlo

  • Utilización de registros que almacenan los retiros y borrados

  • Marcar tu lugar en un archivo

  • Otras ediciones avanzadas

Más combinaciones de comandos

En el Capítulo 2, "Edición sencilla", aprendiste los comandos de edición c, d, y y, así como a combinarlos con movimientos y números (como 2cwo 4dd). En el Capítulo 3, "Moverse deprisa", añadiste muchos más comandos de movimiento a tu repertorio. Aunque el hecho de que puedas combinar comandos de edición con movimiento no es un concepto nuevo para ti, la Tabla 4-1 presenta varias opciones de edición adicionales que no habías visto antes.

Tabla 4-1. Más comandos de edición
Cambia Borra Copia Del cursor a...

cH

dH

yH

Parte superior de la pantalla

cL

dL

yL

Parte inferior de la pantalla

c+

d+

y+

Línea siguiente

c5|

d5|

y5|

Columna 5 de la línea actual

2c)

2d)

2y)

Segunda frase siguiente

c{

d{

y{

Párrafo anterior

c/pattern

d/pattern

y/pattern

Patrón

cn

dn

yn

Patrón siguiente

cG

dG

yG

Fin del archivo

c13G

d13G

y13G

Línea número 13

Observa cómo todas las secuencias de la Tabla 4-1 siguen uno de dos patrones generales:

(comando)(número)(objeto de texto)

o:

(número)(comando)(objeto de texto)

número es el argumento numérico opcional. comando en este caso es uno de c, d, o y. objeto texto es un comando de movimiento.

La forma general de un comando vi se trata en el Capítulo 2. También puedes consultar las Tablas 2-2 y 2-3.

Opciones al iniciar vi y Vim

Hasta ahora, has invocado al editor desde el shell con el comando

$ vi file

o con

$ vim file

Hay otras opciones del comando vim que pueden ser útiles. Puedes abrir un archivo directamente en un número de línea o patrón específico. También puedes abrir un archivo en modo sólo lectura. Otra opción recupera todos los cambios de un archivo que estabas editando cuando el sistema se bloqueó.

Las opciones descritas en la sección siguiente se aplican tanto a vicomo a Vim.

Avanzar a un lugar concreto

Cuando empieces a editar un archivo existente, puedes llamar al archivo y, luego moverte a la primera aparición de un patrón o a un número de línea específico. También puedes especificar tu primer movimiento por búsqueda o por número de línea directamente en la línea de comandos. Puedes hacerlo utilizando -c command; por compatibilidad con versiones anteriores de vi, también puedes utilizar +command:

$ vim -c n file

Abrir el archivo en la línea n.

$ vim -c /pattern file

Abre el archivo en la primera aparición del patrón.

$ vim + file

Abre el archivo en la última línea.

En la práctica de archivos, para abrir el archivo y avanzar directamente a la línea que contiene la palabra Pantalla, introduce lo siguiente:

Pulsaciones de teclas Resultados

$ vim -c /Screen practice

With a screen editor you can scroll
the page, move the cursor, delete
lines, and insert characters, while
seeing the results of your edits as
you make them. Screen editors are
very popular, since they allow you
to make changes as you read

Da al comando vim la opción -c /pattern para ir directamente a la línea que contiene Pantalla.

Como ves en este ejemplo, tu patrón de búsqueda no se sitúa necesariamente en la parte superior de la pantalla. Curiosamente, ¡el cursor se sitúa en el primer carácter de la línea y no en el primer carácter del texto coincidente! Si incluyes espacios en elpatrón, debes encerrar todo el patrón entre comillas simples o dobles:1

-c /"you make"

o escapa del espacio con una barra invertida:

-c /you\ make

Además, si quieres utilizar la sintaxis general de coincidencia de patrones descrita enel Capítulo 6, "Sustitución global", puede que necesites proteger uno o más caracteres especiales de la interpretación del intérprete de comandos mediante comillas simples o barras invertidas.

Utilizarel patrón -c / es útil si tienes que abandonar una sesión de edición antes de terminar. Puedes marcar tu lugar insertando un patrón como ZZZ o HERE. Luego, cuando vuelvas al archivo, todo lo que tienes que recordar es /ZZZ o /HERE.

Después de que el editor abra tu archivo y realice una búsqueda del patrón que le diste con -c, puedes continuar con la siguiente aparición de ese patrón simplemente utilizando n.

Nota

Normalmente, cuando editas en vi y Vim, la opción wrapscan está activada. Si has personalizado tu entorno para quewrapscan esté siempre desactivada (consulta la sección "Repetición de búsquedas"), es posible que no puedas utilizarel patrón -c /. Si intentas abrir un archivo de esta forma, el editor lo abrirá en la última línea y mostrará el mensaje "La búsqueda de dirección ha dado en el PUNTO BÁSICO sin coincidencia con el patrón". Es probable que el mensaje varíe entre las distintas versiones de vi y Vim.

Modo sólo lectura

Habrá ocasiones en las que quieras consultar un archivo pero quieras proteger ese archivo de pulsaciones y cambios inadvertidos. (Puede que quieras llamar a un archivo largo para practicar los movimientos de vi, o puede que quieras desplazarte por un archivo de comandos o un programa). Puedes entrar en un archivo en modo sólo lectura y utilizar todos los comandos de movimiento normales, pero no podrás modificar el archivo.

Para consultar un archivo en modo sólo lectura, introduce

$ vim -R file

o:

$ view file

(El comando view, al igual que Vim, puede utilizar cualquiera de las opciones de la línea de comandos para avanzar a un lugar concreto del archivo.2) Si decides hacer alguna edición en el archivo, puedes anular el modo de sólo lectura añadiendo un signo de exclamación al comando write:

:w!

o:

:wq!

Ten en cuenta que si editas un archivo para el que no tienes permiso de escritura, también estarás en modo sólo lectura. En ese caso, si eres el propietario del archivo, seguirá funcionando :w! o :wq!; vi cambia temporalmente los permisos del archivo para permitirte escribir en él. De lo contrario, guardar el archivo fallará.

Si tienes problemas para escribir el archivo, consulta la lista de comprobación de problemas en la sección "Problemas para guardar archivos".

Recuperar un búfer

Ocasionalmente puede ocurrir un fallo del sistema mientras estás editando un archivo . Normalmente, cualquier edición realizada después de tu última escritura (guardado) se pierde. Sin embargo, existe una opción, -r, que te permite recuperar el búfer editado tal y como estaba en el momento de un fallo del sistema.

Recuperación en vi

En un sistema Unix tradicional con el original vi, cuando te conectes por primera vez después de que el sistema vuelva a funcionar, recibirás un mensaje de correo indicando que se ha guardado tu búfer. Además, si escribes el comando

$ ex -r

o:

$ vi -r

obtendrás una lista de los archivos que haya guardado el sistema.

Utiliza la opción -r con un nombre de archivo para recuperar el búfer editado. Por ejemplo, para recuperar el búfer editado de la práctica de archivos tras un fallo del sistema, introduce:

$ vi -r practice

Es aconsejable recuperar el archivo inmediatamente, no vaya a ser que lo edites sin querer y luego tengas que resolver un desajuste de versiones entre la memoria intermedia conservada y el archivo recién editado.

Puedes forzar al sistema a preservar tu búfer incluso cuando no haya un fallo utilizando el comando :pre (abreviatura de :preserve). Puede resultarte útil si has editado un archivo y luego descubres que no puedes guardar tus ediciones porque no tienes permiso de escritura. (También podrías simplemente escribir una copia del archivo con otro nombre o en un directorio donde sí tengas permiso de escritura. Consulta la sección "Problemas para guardar archivos") .

Recuperación en Vim

La recuperación en Vim funciona de forma algo diferente. Vim suele mantener su archivo de trabajo(llamado archivo swap) en el mismo directorio que el archivo que se está editando. Para la práctica, el archivo de trabajo de Vim se llamaría.práctica.swp.

Si ese archivo existe la próxima vez que vayas a editar la práctica, Vim te preguntará si quieres recuperarlo. Deberías hacerlo y volver a escribir el archivo. A continuación, debes salir inmediatamente y eliminar manualmente.practice.swp; Vim no lo hace por ti. Después de hacerlo, puedes volver a Vim y continuar editando tu archivo normalmente.

La opción directory del comando :set te permite controlar dónde coloca Vim el archivo de intercambio. Para más información, consulta la entrada dedirectory en la Tabla B-2 de la sección "Opciones de Vim 8.2".

Utilizar los registros

Has visto que mientras estás editando, tu último borrado (do x) o yank (y) se guarda en el registro sin nombre. Puedes acceder al contenido de ese registro y volver a poner el texto guardado en tu archivo con el comando put (p o P).

Los últimos nueve borrados se almacenan en registros numerados. Puedes acceder a cualquiera de estos registros numerados para restaurar cualquiera (o todos) de los últimos nueve borrados. (Sin embargo, los borrados pequeños, de sólo partes de líneas, no se guardan en registros numerados. Estos borrados sólo pueden recuperarse utilizando el comando p o P inmediatamente después de haber realizado el borrado).

También puedes colocar yanks (texto copiado) en registros identificados por letras. Puedes llenar hasta 26 registros (denominados a-z) con texto arrancado y restaurar ese texto con un comando put en cualquier momento de tu sesión de edición.

Recuperar eliminaciones

Poder borrar grandes bloques de texto de un tirón está muy bien , pero ¿qué pasa si borras por error 53 líneas que necesitas? Puedes recuperar cualquiera de tus últimos nueve borrados, ya que se guardan en registros numerados. El último borrado se guarda en el registro 1, el penúltimo en el 2, y así sucesivamente.

Para recuperar un borrado, escribe " (comillas dobles), identifica el textoborrado por el número y, a continuación, da el comando put. Para recuperar el penúltimo borrado (del registro 2), escribe

"2p

El borrado en el registro 2 se coloca después del cursor.

Si no estás seguro de qué registro contiene el borrado que quieres restaurar, no tienes que seguir escribiendo "np una y otra vez. Puedes utilizar "1p para colocar el primer texto de borrado; si no es correcto, utiliza u para deshacerlo. A continuación, puedes utilizar el comando de repetición (.) para colocar el siguiente, u para deshacerlo, y así sucesivamente. Cuando haces esto, el editor incrementa automáticamente el número de registro. Como resultado, puedes buscar a través de los registros numerados utilizando:

"1pu.u.u                etc.

para colocar el contenido de cada registro sucesivo en el archivo, uno tras otro. Cada vez que escribas u, se eliminará el texto recuperado; cuando escribas un punto (.), se recuperará el contenido del siguiente registro en tu archivo. Sigue escribiendo u y . hasta que hayas recuperado el texto que buscas.

Yanking a Registros Nombrados

Has visto que debes poner (p o P) el contenido del registro sin nombre antes de hacer cualquier otra edición, o de lo contrario el registro se sobrescribirá. También puedes utilizar y y d con un conjunto de 26 registros con nombre (a-z) que están específicamente disponibles para copiar y mover texto. Si nombras un registro para almacenar el texto desplazado, puedes recuperar el contenido del registro nombrado en cualquier momento de tu sesión de edición.

Para cargar un registro con nombre, precede la orden de cargar con una comilla doble (") y el carácter del nombre del registro que quieres cargar. Por ejemplo

"dyy            Yank the current line into register d
"a7yy           Yank the next seven lines into register a

Tras cargar los registros con nombre y moverte a la nueva posición, utiliza po P para volver a colocar el texto:

"dP             Put the contents of register d before the cursor
"ap             Put the contents of register a after the cursor

No hay forma de introducir parte de un registro en el texto: es todo o nada.

En el próximo capítulo, aprenderás a editar varios archivos. Una vez que sepas cómo desplazarte entre archivos sin salir del editor, podrás utilizar registros con nombre para transferir texto entre archivos de forma selectiva. Cuando utilices la función de ventanas múltiples de Vim, también puedes utilizar el registro de borrado sin nombre para transferir datos entre archivos.

Nota

Los registros de borrado sin nombre y con nombre se comparten dentro de la misma sesión de Vim, por lo que puedes copiar/pegar texto fácilmente entre archivos que se estén editando en varias ventanas de una misma sesión de Vim. Pero estos búferesno se comparten entre varias sesiones de Vim. (Puedes tener gvimabierto en varios archivos a la vez, por ejemplo.) Sin embargo, gvim puede acceder al portapapeles del sistema como cualquier otra aplicación gráfica. Así que puedes utilizar copiar y pegar a nivel de GUI para mover texto entre archivos sin problemas.

También puedes borrar texto en registros con nombre utilizando prácticamente el mismo procedimiento:

"a5dd           Delete five lines into register a

Si especificas un nombre de registro con letra mayúscula, el texto que arranques o borres se añadirá al contenido actual del registro correspondiente en minúscula. Esto te permite ser selectivo en lo que mueves o copias. Por ejemplo

"zd)

Borra desde el cursor hasta el final de la frase actual y guarda el texto en el registro z.

2)

Avanza dos frases.

"Zy)

Añade la siguiente frase al registro z. Puedes seguir añadiendo más texto a un registro con nombre durante todo el tiempo que quieras, pero ten cuidado: si te olvidas una vez, y tiras o borras al registro sin especificar su nombre en mayúsculas, sobrescribirás el registro, perdiendo todo lo que habías acumulado en él.

Marcar tu lugar

Durante una sesión de edición, puedes marcar tu lugar en el archivo con un "marcador" invisible , realizar ediciones en otro lugar y luego volver a tu lugar marcado. ¿Por qué necesitarías hacer esto? explica Will Gallego:

Uno de mis usos favoritos del marcado es borrar/borrar/modificar un gran trozo de texto. Por ejemplo, supongamos que quiero borrar un gran número de líneas. Puede que no quiera contar todas esas líneas y luego hacer numddsino saltar a la parte inferior, marcarla con algo como ma (marcar, luego a para utilizar el registro a como ubicación), luego saltar a donde quiero empezar a borrar y pulsar d`a para borrar la línea actual y todas las líneas hasta donde esté a inclusive. yy y otros comandos relacionados pueden utilizarse de forma similar.

Así es como se marcan las ubicaciones en modo comando:

m x

Marca la posición actual con x(x puede ser cualquier letra). (El original vi sólo permite letras minúsculas. Vim distingue entremayúsculas y minúsculas).

'x (apóstrofe)

Mueve el cursor al primer carácter de la línea marcada con x.

`x (cita retrospectiva)

Mueve el cursor hasta el carácter marcado con x.

`` (entre comillas)

Volver a la posición exacta de la marca o contexto anterior tras un movimiento.

'' (apóstrofes)

Vuelve al principio de la línea de la marca o contexto anterior.

Nota

Los marcadores de posición sólo se establecen durante la sesión actual; no se almacenan en el archivo.

Otras ediciones avanzadas

Hay otras ediciones avanzadas que puedes ejecutar con vi y Vim, pero para utilizarlas primero debes aprender un poco más sobre el editor ex leyendo el capítulo siguiente.

Revisión de los comandos de registro y marcado

La Tabla 4-2 resume las opciones de la línea de comandos comunes a todas las versionesde vi. Las Tablas 4-3 y 4-4resumen los comandos de registro y marcado.

Tabla 4-2. Opciones de la línea de comandos
Opción Significado

-c n file

Abrir el archivo en la línea número n (versión estándar POSIX).

+n file

Abrir el archivo en la línea número n (versión tradicional vi ).

+ file

Abre el archivo en la última línea.

-c /pattern file

Abrir el archivo en la primera aparición del patrón (versión estándar POSIX)

+/pattern file

Abre el archivo en la primera aparición del patrón (versión tradicional de vi ).

-c command file

Ejecuta el comando después de abrir el archivo; normalmente un número de línea o una búsqueda.

-r

Recupera archivos tras un fallo.

-R

Funciona en modo sólo lectura (igual que utilizando view).

Tabla 4-3. Nombres de registro
Registrar nombres Uso del registro

1-9

Las últimas nueve eliminaciones, de la más a la menos reciente.

a-z

Registros con nombre para que los utilices cuando los necesites. Las letras mayúsculas se añaden al registro.

Tabla 4-4. Comandos de registro y marcado
Mando Significado

"bcommand

Realiza la orden con el registro b.

mx

Marca la posición actual con x.

'x

Mueve el cursor al primer carácter de la línea marcada con x.

`x

Mueve el cursor al carácter marcado con x.

``

Vuelve a la posición exacta de la marca o contexto anterior.

''

Vuelve al principio de la línea de la marca o contexto anterior.

1 Es el shell el que impone el requisito de citar, no el editor.

2 Normalmente view es sólo un enlace a vi. Algunos sistemas organizan las cosas de tal manera que view ejecuta a vim -R.

Get Aprender los editores vi y Vim, 8.ª edición now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.