Con los editores de texto con interfaz gráfica (como LibreOffice Writer o Microsoft Word) probablemente sabes que puedes resaltar un bloque de texto y aplicarle cambios. Vim también puede hacerlo, con el modo visual. Vim tiene tres modos visuales diferentes para usar. En este capítulo, aprenderás cómo utilizar cada uno de los diferestes modos visuales para manipular bloques de texto de manera eficiente.
El modo visual de selección de caracter es utilizado para seleccionar caracteres de forma individual. Pulsa `v` en el primer caracter de la primera línea. Después baja hasta la línea siguiente con `j`. Esto resaltará todo el texto desde "uno" hasta donde este ubicado el cursor. Ahora pulsa `gU`, Vim convertirá a mayúsculas todos los caracteres resaltados.
El modo visual de selección de línea funciona con líneas como unidades de selección. Pulsa `V` y observa como Vim selecciona la línea completa en la que esté ubicado el cursor. Igual que en el modo visual de selección de caracter, si ejecutas `gU`, Vim cambiará a mayúsculas las líneas resaltadas.
El modo visual de slección de bloque funciona con filas y columnas. Te da más libertad de movimientos que los dos modos anteriores. Pulsando `Ctrl-V` verás qie Vim resalta el caracter bajo el cursor de igual manera que el modo visual de selección de caracter, excepto que ahora en vez de resaltar cada caracter hasta el final de la línea antes de seguir en la línea siguiente, puedes dirigir el cursor hasta la línea siguiente sin que se marquen todos los caracteres de la línea actual. Intenta moverte mediante las teclas `h/j/k/l` y observa los movimientos del cursor y las zonas que se marcan.
En la esquina inferior izquierda de la ventana de Vim, verás que se muestra `-- VISUAL --`, `-- VISUAL LINE --` o `-- VISUAL BLOCK --` para indicar el modo visual en que te encuentras.
Mientras estás dentro de un modo visual, puedes cambiar a otro de los modos pulsando `v`, `V` o `Ctrl-V`. Por ejemplo, si estás en el modo visual de selección de línea y quieres cambiar al modo visual de selección de bloque, ejecuta `Ctrl-V`. ¡Inténtalo!
Esto último significa, que si estás en el modo visual de selección de línea (`V`), podrás salir de ese modo pulsando `V` de nuevo. Si estás en el modo visual de selección de caracter, podrás salir pulsando `v`. Si estás en el modo visual de selección de bloque, pulsa `Ctrl-V` para salir de ese modo.
Supongamos que nos hemos dado cuenta que también necesitamos resaltar la línea "uno", así que pulsas la tecla `k`. Para tu asombro, esto ahora excluye "tres". Al pulsar `k` esto reduce la zona resaltada, no la expande.
El resaltado visual sigue el movimiento del cursor. Si quiere expandirlo hacia arriba a la línea "uno", necesitas mover el cursor cuando el cursor está en la palabra "dos", no "tres". Ahora tu cursor está en la línea "tres". Para movelo, cambia la loclización del cursor tanto con `o` u `O`.
Al pulsar `o` u `O` en el modo visual, esto hará que nuestro cursor salte del inicio que bloque resaltado, sin eliminar las partes resaltadas y podremos añadir más texto a esa selección.
El modo visual es uno de los modos de Vim. El que sea un modo significa que la misma tecla puede funcionar de manera diferente en un modo o en otro. Afortunadamente, el modo visual comparte muchas teclas en común con el modo normal.
Al pulsar `d` esto eliminará la selección, de manera similar al modo normal. Cabe destacar que la regla gramatical del modo normal de verbo + sustantivo, aquí no se aplica. El mismo verbo sigue estando ahí (`d`), pero no existe un sustantivo en el modo visual. La regla gramática en el modo visual es sustantivo + verbo, donde el sustantivo en este caso es reemplazado por el texto resaltado. Primero selecciona el texto, después opera sobre el.
En el modo normal, hay algunos comandos que no requieren de una tecla de movimeinto, como por ejemplo `x` para eliminar un único caracter bajo el cursor o `rx` para reemplzar el texto bajo el cursor con la letra "x". En el modo visual, estos comandos son ahora aplicados al texto resaltado por completo en vez de a un único caracter. Regresemos al texto que hemos resaltado anteriormente:
Puedes utilizar esta funcionalidad para crear rápidamente un encabezado en un texto en formato Markdown. Supongamos que tenemos este texto en un archivo en Markdown:
Y necesitas sustituir solo las primeras dos líneas de "const" con "let". Resalta las primeras dos línea con *cualquier* modo visual y ejecuta el comando de sustituir `:s/const/let/g`:
Ten en cuenta que he dicho que puedes hacer esto con *cualquier* modo visual. No es necesario resaltar las líneas completas para ejecutar el comando Ex en esas líneas. Con tan solo seleccionar al menos un caracter de cada línea, el comando Ex será aplicado.
Puedes editar texto en múltiples líneas en vim utilizando el modo visual de selección de bloque. Si necesitas añadir un punto y comaal final de cada línea:
Deberías ver que se ha añadido ";" en cada línea. Por cierto, mientras estás en el modo visual de selección de bloque, para entrar en el modo insertar, también puedes utilizar `A` para introducir el texto después del cursor o `I` para introducir el texto antes del cursor. No los confundas con `A` o `I` del modo normal.
Vim tiene los comandos `Ctrl-X` y `Ctrl-A` para decrementar e incrementar números. Cuando son usados en el modo visual, puedes incrementar o decrementar números en múltiples líneas.
La opción `nrformats` le indica a Vim que bases son consideradas como "números" para `Ctrl-A` y `Ctrl-X` para incrementar y decrementar. Añadiendo `alpha`, un caracter alfanumérico es considerado ahora como un número. Si tienes los siguientes elementos HTML:
Coloca tu cursor en la sugunda "app-a". Utiliza la misma técnica que en el ejemplo anterior (`Ctrl-V 3j` después `g Ctrl-A`) para incrementar los "ids".
Ya has aprendido que con con `gv` puedes resaltar rápidamente la anterior zona marcada en el modo visual. También puedes ir a la ubicación del comienzo y final de la anterior zona del modo visual con estas marcas especiales:
Quiero que te fijes en algo. Anteriormente, mencioné que puedes ejecutar de manera selectiva un comando Ex en un texto resaltado, como `:s/const/let/g`. Cuando ejecutaste ese comando, deberías haber visto esto:
Estabas ejecutando `s/const/let/g` el comando utilizando las marcas como rango de ejecución. Siempre puedes editar estas marcas en cualquier momento que desees. Si necesitabas sustituir desde el comienzo del texto resaltado hasta el final del archivo, simplemente cambia el comando a este::
Volver a ejecutar `Ctrl-O` mientras estás en el modo insertar te permite ejecutar un comando en el modo normal. Mientras estás en este modo-normal-momentáneo, ejecuta `v` para entrar en el modo visual de selección de caracter. Fíjate que en la parte inferior izquierda de la pantalla se muestra `--(insert) VISUAL--`. Este truco funciona con cualquier operador de cualquier modo visual: `v`, `V`, y `Ctrl-V`.
El modo seleccionar emula al comportamiento de un editor de texto normal al seleccionar un texto de una manera más cercana a como lo hace Vim en el modo visual.
En un editor normal, después de seleccionar un bloque de texto y escribir una letra, por ejemplo la letra "y", el editor borrará todo el texto resaltado e insertará la letra escrita, en nuestro ejemplo la letra "y".
Si resaltas una línea de texto con el modo de selección de línea (`gH`) y escribre "y", se borrará el texto resaltado y se insertará la letra "y", de manera similar a como se hace en un editor de texto normal.
Este comportamiento contrasta con el modo visual: si resaltas una línea de de texto en el modo visual de selección de línea (`V`) y escribres "y", el texto resaltado no será eliminado y reemplazado con la letra "y". Solo será copiado y almacenado en el registro de copia `"0`.
Si te encuentras a ti mismo utilizando el modo visual mucho más a menudo que operaciones en el modo normal, ten cuidado. Creo que esto es un antipatrón. Conlleva más pulsaciones de teclas el ejecutar operaciones en el modo visual que hacer la misma operación en el modo normal. Si necesitas eliminar una palabra en la que te encuentras, por qué utilizar cuatro pulsaciones de teclas, `viwd` (resaltar visualmente una palabra y después eliminarla), si puedes hacer eso mismo con solo tres pulsaciones de teclas (`diw`)? Esto último es más directo y conciso. Por supuesto, habrá ocasiones en las que el modo visual será apropiado, pero en general, es mejor un enfoque más directo.