Aprende-Vim/cap08_registros.md

199 lines
11 KiB
Markdown
Raw Normal View History

# Capítulo 8: Registros
2020-09-08 22:33:03 +02:00
2021-04-20 05:49:33 +02:00
Aprender los registros de Vim es como aprender álgebra por primera vez. No piensas que los necesitas hasta que los necesitas.
2020-09-08 22:33:03 +02:00
2021-04-20 05:49:33 +02:00
Probablemente has usado los registros de Vim al copiar o borrar un texto y luego lo pegaste con `p` o `P`. Sin embargo, ¿sabías que Vim tiene 10 tipos diferentes de registros? Usados correctamente, los registros de Vim te pueden ahorrar el tener que escribir lo mismo de manera repetitiva.
2020-09-08 22:33:03 +02:00
2021-02-19 18:34:48 +01:00
En este capítulo repasaré todos los tipos de registros de Vim y cómo usarlos eficientemente.
2020-09-08 22:33:03 +02:00
## Los diez tipos de registros
2020-09-08 22:33:03 +02:00
2021-02-19 18:34:48 +01:00
Estos son los 10 tipos de registros que tiene Vim:
2020-09-08 22:33:03 +02:00
1. El registro sin nombre \(`""`\).
2. Los registros numerados \(`"0-9`\).
3. El registro de pequeñas eliminaciones \(`"-`\).
4. Los registros nominales \(`"a-z`\).
5. El registro de solo lectura \(`":`, `".`,y `"%`\).
6. El registro de archivo alternativo \(`"#`\).
7. El registro de expresiones \(`"=`\).
8. Los registros de selección \(`"*` y `"+`\).
9. El registro de agujero negro \(`"_`\).
10. El registro del último patrón de búsqueda \(`"/`\).
2020-09-08 22:33:03 +02:00
## Operadores del registro
2020-09-16 07:45:52 +02:00
2021-02-19 18:34:48 +01:00
Para utilizar los registros, necesitas primero almacenarlos con operadores. Estos son algunos operadores que almacenan valores en los registros:
2020-09-08 22:33:03 +02:00
```text
2020-09-16 07:45:52 +02:00
y Yank (copiar)
c Borrar texto e iniciar el modo insertar
d Borrar texto
2020-09-08 22:33:03 +02:00
```
Existen algunos operadores más \(como `s` o `x`\), pero estos son los más comunes. El criterio general es, si un operador elimina texto, lo más probable es que almacene el texto en los registros.
2020-09-08 22:33:03 +02:00
2021-02-19 18:34:48 +01:00
Para pegar texto desde los registros, puedes usar:
2020-09-08 22:33:03 +02:00
```text
2021-02-19 18:34:48 +01:00
p Pega el texto después del cursor
P Pega el texto antes del cursor
2020-09-08 22:33:03 +02:00
```
2021-05-02 21:00:58 +02:00
Ambos `p` y `P` aceptan un contador y un símbolo de registro como argumentos. Por ejemplo, para pegar diez veces, debes escribir `10p`. Para pegar el texto del registro a, utiliza `"ap`. Para pegar 10 veces el texto del registro a, ejecuta `10"ap`. Por cierto, la `p` del comando es la abreviación de la palabra "put" \(poner en inglés\), no de "paste" \(pegar en inglés\), pero creo que usar la palabra pegar es más conveniente.
2020-09-08 22:33:03 +02:00
2021-04-20 05:49:33 +02:00
La sintaxis general para obtener el contenido desde un registro en específico es `"a`, donde `a` es el símbolo del registro.
2020-09-08 22:33:03 +02:00
## Llamar a los registros desde el modo insertar
2020-09-08 22:33:03 +02:00
2021-02-19 19:42:50 +01:00
Todo lo que aprendas en este capítulo puede también ser ejecutado en el modo insertar. Para obtener el texto del registro a, normalmente debes escribir `"ap`. Pero si estás en el modo insertar, ejecuta `Ctrl-R a`. La sintaxis para llamar a los registros desde el modo insertar es la siguiente:
```text
2021-02-19 19:42:50 +01:00
Ctrl-R a
2020-09-08 22:33:03 +02:00
```
2021-04-20 05:49:33 +02:00
Donde `a` es el símbolo del registro. Ahora que sabes cómo almacenar y recuperar registros ¡vamos a profundizar!
2021-02-19 19:42:50 +01:00
## El registro sin nombre
2020-09-08 22:33:03 +02:00
2021-04-20 05:49:33 +02:00
Para obtener texto desde el registro sin nombre, escribe `""p`. Este almacena el último texto que copiaste, modificaste o borraste. Si haces otra copia, modificación o borrado, Vim automáticamente reemplazará el texto. El registro sin nombre es como la operación copiar/pegar estándar de una computadora.
2020-09-08 22:33:03 +02:00
De manera predeterminada, `p` \(o `P`\) está conectado al registro sin nombre \(desde ahora me referiré al registro sin nombre con `p` en lugar de `""p`\).
2020-09-08 22:33:03 +02:00
## Los registros numerados
2020-09-08 22:33:03 +02:00
Los registros numerados automáticamente se llenan a sí mismos en orden ascendente. Hay 2 registros numerados diferentes: el registro de copia \(`0`\) y los registros numerados \(`1-9`\). Vamos a ver primero el registro de copia.
2020-09-08 22:33:03 +02:00
### El registro de copia
2020-09-08 22:33:03 +02:00
Si copias una línea entera de texto \(`yy`\), Vim realmente guarda ese texto en dos registros:
2020-09-08 22:33:03 +02:00
1. El registro sin nombre \(`p`\).
2. El registro de copia \(`"0p`\).
2020-09-08 22:33:03 +02:00
Cuando copias un texto diferente, Vim remplaza ambos registros, el de copia y el de sin nombre. Cualquier otra operación \(como eliminar\) no será almacenada en el registro 0. Esto puede ser usado para tu provecho, porque a menos que no hagas otra copia, el texto copiado permanecerá siempre allí, no importa cuantos cambios y borrados hagas.
2020-09-08 22:33:03 +02:00
2021-05-02 21:00:58 +02:00
Por ejemplo, si haces lo siguiente:
1. Copiar una línea \(`yy`\)
2. Borrar una línea \(`dd`\)
3. Borrar otra línea \(`dd`\)
2020-09-08 22:33:03 +02:00
El registro de copia tendrá el texto del primer paso.
2020-09-08 22:33:03 +02:00
2021-05-02 21:00:58 +02:00
Pero si en cambio haces esto otro:
1. Copias una línea \(`yy`\)
2. Borras una línea \(`dd`\)
3. Copias otra línea \(`yy`\)
2020-09-08 22:33:03 +02:00
El registro de copia tendrá el texto del paso tres.
2020-09-08 22:33:03 +02:00
2021-04-20 05:49:33 +02:00
Un último consejo, mientras estás en el modo insertar, puedes pegar rápidamente el texto que acabas de copiar usando `Ctrl-R 0`.
2020-09-08 22:33:03 +02:00
2021-02-19 19:42:50 +01:00
### Los registros numerados que no son el cero
2020-09-08 22:33:03 +02:00
Cuando cambias o borras un texto de al menos una línea de largo, este texto se almacenará en un registro numerado del 1 al 9, ordenados por el más reciente.
2020-09-08 22:33:03 +02:00
Por ejemplo, si tienes estas líneas:
2021-04-20 05:49:33 +02:00
```text
2021-02-19 19:42:50 +01:00
línea tres
línea dos
línea uno
2020-09-08 22:33:03 +02:00
```
Con tu cursor en la "línea tres" borra una a una las líneas con `dd`. Una vez que las líneas están borradas, el registro 1 debe contener "línea uno" \(el texto más reciente\), registro 2 la "línea dos" \(el segundo texto más reciente\) y el registro 3 "línea tres" \(el más antiguo\). Para obtener el contenido del registro uno, escribe `"1p`.
Como nota complementaria, los registros numerados son incrementados automáticamente cuando usas el comando punto. Si tu registro numerado uno \(`"1`\) contiene "línea uno", registro dos \(`"2`\) "línea dos" y el registro tres \(`"3`\) "línea tres", puedes pegarlos secuencialmente con este truco:
2021-02-19 19:42:50 +01:00
* Escribe `"1P` para pegar el contenido del registro del número uno.
* Escribe `.` para pegar el contenido del registro numerado dos \(`"2`\).
* Escribe `.` para pegar el contenido del registro numerado tres \(`"3`\).
2020-09-08 22:33:03 +02:00
2021-02-19 19:42:50 +01:00
Este truco funciona con cualquier registro numerado. Si empiezas con `"5P`, `.` hará `"6P`, otra vez `.` hará `"7P` y así sucesivamente.
2020-09-08 22:33:03 +02:00
Pequeños borrados como un borrado de palabras \(`dw`\) o un cambio de palabras \(`cw`\) no se almacenan en registros numerados. Estos se almacenan en un pequeño registro de borrado \(`"-`\), el cual es el siguiente a tratar.
2020-09-08 22:33:03 +02:00
## El pequeño registro de borrado
2020-09-08 22:33:03 +02:00
Los cambios o borrados menores a una línea no se almacenan en los registros numerados del 0-9, pero si en el pequeño registro de borrado \(`"-`\).
2020-09-08 22:33:03 +02:00
Por ejemplo: 1. Borrar una palabra \(`diw`\) 2. Borrar una línea \(`dd`\) 3. Borrar una línea \(`dd`\)
2020-09-08 22:33:03 +02:00
2021-02-19 19:42:50 +01:00
`"-p` te da la palabra borrada en el primer paso.
2020-09-08 22:33:03 +02:00
Otro ejemplo: 1. Yo borro una palabra \(`diw`\) 2. Yo borro una línea \(`dd`\) 3. Yo borro una línea \(`diw`\)
2020-09-08 22:33:03 +02:00
2021-02-19 19:42:50 +01:00
`"-p` te da la palabra borrada en el paso tres. Igualmente, `"1p` te da la línea borrada del paso dos. Desafortunadamente, no hay manera de recuperar la palabra borrada del paso uno porque el registro de borrado pequeño solo guarda un elemento. Sin embargo, si deseas preservar el texto del paso uno, puedes hacerlo con los registros nominales.
2020-09-08 22:33:03 +02:00
## Los registros nominales
2020-09-08 22:33:03 +02:00
2020-10-27 17:08:04 +01:00
Los registros nominales son los registros más versátiles de Vim. Estos pueden almacenar textos copiados, modificados y borrados dentro de los registros a-z. A diferencia de los 3 tipos de registros anteriores que has visto, que pueden almcenar automáticamente texto dentro de los registros, aquí tienes que decirle explícitamente a Vim el nombre del registro a usar, brindándote así control total.
2020-09-08 22:33:03 +02:00
2021-02-19 19:42:50 +01:00
Para copiar una palabra dentro del registro a, puedes hacerlo con `"ayiw`.
* `"a` le dice a Vim que la siguiente acción \(borrar / modificar / copiar\) será almacenada en el registro a.
* `yiw` copia la palabra.
2020-09-08 22:33:03 +02:00
2021-02-19 19:42:50 +01:00
Para obtener el texto del registro a, ejecuta `"ap`. Puedes usar todos los veintiséis caracteres del alfabeto para almacenar veintiséis textos diferentes dentro de los registros nominales.
A veces, puedes querer aumentar un registro nominal existente. En este caso, puedes agregar tu texto al final en lugar de empezar de nuevo. Para hacer eso, puedes usar la versión mayúscula del registro. Por ejemplo, supón que tienes ya almacenada la palabra "Hola " en el registro a. Si deseas agregar "mundo" en el registro a, puedes buscar el texto "mundo" y copiarlo usando el registro A \(`"Ayiw`\).
2020-09-08 22:33:03 +02:00
## Los registros de solo lectura
2020-09-08 22:33:03 +02:00
Vim tiene tres registros de solo lectura: `.`, `:`, y `%`. Estos son muy fáciles de usar:
2021-02-19 19:42:50 +01:00
```text
. Almacena el último texto insertado
: Almacena lo último que fue ejecutado en la línea de comandos
% Almacena el nombre del archivo actual
2020-09-08 22:33:03 +02:00
```
2021-02-19 19:42:50 +01:00
Si el último texto que escribiste fue "Hola Vim", al ejecutar `".p` se imprimirá el texto "Hola Vim". Si deseas obtener el nombre del archivo actual, escribe `"%p`. Si ejecutas el comando `:s/foo/bar/g`, al ejecutar `":p` se mostrará el texto literal "s/foo/bar/g".
2020-09-08 22:33:03 +02:00
## El registro de archivo alternativo
2020-09-08 22:33:03 +02:00
En Vim, `#` usualmente representa el archivo alternativo. Un archivo alternativo es el último archivo que abriste. Para insertar el nombre del archivo alternativo, puedes usar `"#p`.
2020-09-08 22:33:03 +02:00
## El registro de expresiones
2020-09-08 22:33:03 +02:00
2021-02-19 19:42:50 +01:00
Vim tiene un registro de expresiones, `"=`, para evaluar expresiones.
2020-09-08 22:33:03 +02:00
Puedes calcular la expresión matemática `1 + 1` con:
2020-09-08 22:33:03 +02:00
```text
2020-09-08 22:33:03 +02:00
"=1+1<Enter>p
```
En el ajemplo anterior, le dices a Vim que estás usando el registro de expresiones con `"=`. Tu expresión es \(`1 + 1`\). Luego necesitas escribir `p` para obtener el resultado. Como mencioné anteriormente, puedes acceder al registro desde el modo insertar. Para calcular una expresión matemática desde el modo insertar puedes hacer lo siguiente:
2020-09-08 22:33:03 +02:00
```text
2021-02-19 19:42:50 +01:00
Ctrl-R =1+1
2020-09-08 22:33:03 +02:00
```
2021-02-19 19:42:50 +01:00
Puedes obtener los valores de cualquier registro usando el registro de expresiones y añadiéndole `@`. Si deseas obtener el texto desde el registro a:
2020-09-08 22:33:03 +02:00
```text
2020-09-08 22:33:03 +02:00
"=@a
```
2021-02-19 19:42:50 +01:00
Luego pulsa `<Enter>`, después `p`. Igualmente, para obtener valores desde el registro a mientras estas en el modo insertar:
2020-09-08 22:33:03 +02:00
```text
2021-02-19 19:42:50 +01:00
Ctrl-r =@a
2020-09-08 22:33:03 +02:00
```
2021-02-19 19:42:50 +01:00
Las expresiones son un tema muy amplio en Vim, así que aquí solo se trata lo básico. Volveré al tema de las expresiones en más detalle en los capítulos finales de Vimscript.
2020-09-08 22:33:03 +02:00
2021-02-19 19:58:39 +01:00
## Aprendiendo los registros de la manera más inteligente
2020-09-08 22:33:03 +02:00
2021-02-19 19:58:39 +01:00
Lo conseguiste. ¡Enhorabuena! Si sientes una sensación de agobio por la cantidad de información, no te pasa a ti únicamente. Cuando comencé a aprender sobre los registros de Vim, había mucha información que asimilar de una vez.
2020-09-08 22:33:03 +02:00
No creo que debieras memorizar los registros de manera inmediata. Para ser más eficaz, puedes empezar por utilizar solo estos 3 registros: 1. El registro sin nombre \(`""`\). 2. Los registro nominales \(`"a-z`\). 3. Los registros numerados \(`"0-9`\).
2020-09-08 22:33:03 +02:00
2021-02-19 19:58:39 +01:00
Como el registro sin nombre de manera predeterminada usa `p` y `P`, solo tienes que aprender dos registro: los nominales y los numerados. Aprende de manera gradual más registros cuando los necesites. Tómate tu tiempo.
2020-09-08 22:33:03 +02:00
2021-02-19 19:58:39 +01:00
Una persona de media tiene una capacidad limitada de memoria a corto plazo, sobre unos 5 a 7 elementos a la vez. Por eso en mi trabajo diario con Vim, solo utilizo unos 5 o 7 registros nominales. No hay manera de que pueda recordar todos los 26. Normalmente comienzo con el registro a, después el b, ascendiendo en orden alfabético. Inténtalo y experimenta sobre ello para ver qué técnicas funcionan mejor en tu caso.
2020-09-08 22:33:03 +02:00
2021-02-19 19:58:39 +01:00
Los registros de Vim son muy potentes. Utilízalos estratégicamente, te pueden ahorrar el tener que escribir de manera repetitiva mucho texto. Ahora vamos a aprender sobre las macros.