-
Notifications
You must be signed in to change notification settings - Fork 0
02 La Familia Vi_Vi Vim y Neovim
- Vi
- Vim
- Neovim
- Modos de Vim/Neovim
- Recursos Recomendados
- Referencias
Vi (visual) es un editor de texto terminal. Nació como el modo visual del editor de texto ex, creado por Bill Joy en 1976.
vi [ opciones ] [ archivo ... ]
Vim (Vi IMproved) es un editor de texto compatible con Vi, al cual se le añadieron muchas mejoras frente a Vi, por ejemplo:
- Multi-level undo
- Multiple windows and buffers
- Syntax highlighting
- Command-line editing
- Filename completion
- On-line help
- Visual selection
vim [ opciones ] [ archivo ... ]
Neovim es un fork de Vim impulsado por la comunidad en el que se refactorizó el código base de Vim y se añadieron funciones y mejoras, como:
- API de primera clase para extensibilidad
- Soporte nativo de LSP (Language Server Protocol)
- Soporte nativo de Lua como lenguaje de configuración y scripting
- Arquitectura asíncrona por defecto
nvim [ opciones ] [ archivo ... ]
El modo normal es el modo predeterminado. Este nos permite navegar a través
del archivo y cambiar a los demás modos. Para regresar al modo normal basta con
presionar <Esc>.
| Atajo | Acción |
|---|---|
| h | Desplazarse un carácter hacia la izquierda |
| j | Desplazarse un carácter hacia abajo |
| k | Desplazarse un carácter hacia arriba |
| l | Desplazarse un carácter hacia la derecha |
| Atajo | Acción |
|---|---|
| 0 | Desplazarse hacia el inicio de línea |
| $ | Desplazarse hacia el final de la línea |
| ^ | Desplazarse hacia el primer carácter imprimible |
| Atajo | Nombre | Acción |
|---|---|---|
| w | word | Desplazarse hacia el inicio de la siguiente palabra |
| W | Word | Desplazarse hacia el inicio de la siguiente WORD (separada por espacios) |
| b | back | Desplazarse hacia el inicio de la palabra anterior |
| B | Back | Desplazarse hacia el inicio de la WORD anterior (separada por espacios) |
| e | end | Desplazarse hacia el fin de la palabra actual o siguiente |
| E | End | Desplazarse hacia el fin de la WORD actual o siguiente (separada por espacios) |
| ge | Desplazarse hacia el fin de la palabra anterior | |
| gE | Desplazarse hacia el fin de la WORD anterior (separada por espacios) |
Note
En Vim, una word es una secuencia de letras, dígitos y guiones bajos, o
una secuencia de otros caracteres no blancos. Una WORD (mayúscula) es
cualquier secuencia de caracteres no blancos. Por eso W, B y E ignoran
la puntuación y solo se detienen en espacios.
| Atajo | Acción |
|---|---|
| % | Desplazarse alternadamente entre signos de agrupación (pares soportados por defecto: () {} []; véase :h matchpairs para más información) |
| Atajo | Acción |
|---|---|
| <ctrl> + e | Bajar una línea |
| <ctrl> + y | Subir una línea |
| <ctrl> + d | Bajar media página |
| <ctrl> + u | Subir media página |
| <ctrl> + f | Bajar una página |
| <ctrl> + b | Subir una página |
| Atajo | Acción |
|---|---|
| gg | Ir a la primera línea |
| G | Ir a la última línea |
|
N G N gg |
Ir a la línea N |
Tip
Puedes utilizar i (inner) para operar sobre el contenido interior de un
delimitador sin incluirlo, e.g., yi( copia el contenido dentro de (),
di" elimina el contenido dentro de "". Usa a (around) para incluir
también el delimitador, e.g., da( elimina () y su contenido.
| Atajo | Acción |
|---|---|
| yw | Copiar desde el cursor hasta el fin de palabra |
| yy | Copiar la línea actual |
| N yy | Copiar N líneas |
| y0 | Copiar hasta el inicio de la línea |
| y$ | Copiar hasta el final de la línea |
| y^ | Copiar hasta el primer carácter imprimible |
| yiw | Copiar la palabra bajo el cursor |
| yip | Copiar el párrafo bajo el cursor |
| ygg | Copiar hasta el inicio del archivo |
| yG | Copiar hasta el final del archivo |
| Atajo | Acción |
|---|---|
| p | Pegar después del cursor |
| P | Pegar antes del cursor |
| N p | Pegar N veces después del cursor |
| N P | Pegar N veces antes del cursor |
| Atajo | Acción |
|---|---|
| x | Cortar el carácter bajo el cursor |
| dd | Cortar la línea actual |
| N dd | Cortar N líneas |
| d<space> | Cortar el carácter bajo el cursor |
| d0 | Cortar hasta el inicio de la línea |
| d$ | Cortar hasta el final de la línea |
| d^ | Cortar hasta el primer carácter imprimible |
| diw | Cortar la palabra bajo el cursor |
| dip | Cortar el párrafo bajo el cursor |
| dgg | Cortar hasta el inicio del archivo |
| dG | Cortar hasta el final del archivo |
Note
En Vim/Neovim, eliminar (delete) en realidad corta el contenido al
registro predeterminado ". Por eso dd seguido de p mueve una línea.
Note
x y d<space> cortan el carácter bajo el cursor, pero con una diferencia:
x no acepta un operador de movimiento, mientras que d<space> sí forma
parte de la gramática d{movimiento}, por lo que su comportamiento es
estrictamente equivalente a dl.
| Atajo | Acción |
|---|---|
| cw | Cortar desde el cursor hasta el fin de palabra e insertar |
| ciw | Cortar la palabra bajo el cursor e insertar |
| C | Cortar hasta el final de la línea e insertar |
| cc | Cortar la línea entera e insertar |
| Atajo | Acción |
|---|---|
| u | Revertir |
| <ctrl> + r | Rehacer |
| Atajo | Acción |
|---|---|
| /[patrón] | Busca hacia adelante coincidencias del patrón |
| ?[patrón] | Busca hacia atrás coincidencias del patrón |
| /\v[patrón] | Patrón very magic: los caracteres no alfanuméricos son interpretados como símbolos especiales de RegEx (no es necesario escaparlos) |
| n | Salta a la siguiente coincidencia en la dirección de búsqueda |
| N | Salta a la anterior coincidencia en la dirección de búsqueda |
Note
El modificador \v no es un atajo independiente; se escribe como parte del
patrón de búsqueda, e.g., /\vfoo(bar)+. También se puede utiliza en los
comandos de reemplazo.
Tip
Para aprender más sobre los patrones de búsqueda (expresiones regulares de Vim), véase Vim Regular Expressions 101.
El modo insert (inserción) es el modo que nos permite editar el archivo, equivalente al modo por defecto de la mayoría de editores de texto.
| Atajo | Nombre | Acción |
|---|---|---|
| i | insert | Entra al modo insert posicionándose antes del cursor |
| a | append | Entra al modo insert posicionándose después del cursor |
| I | Insert | Entra al modo insert en el primer carácter imprimible de la línea |
| A | Append | Entra al modo insert al final de la línea |
| o | Entra al modo insert abriendo una nueva línea debajo | |
| O | Entra al modo insert abriendo una nueva línea encima |
El modo visual nos permite seleccionar texto para copiarlo, eliminarlo, sustituirlo, etc. Existen tres variantes:
| Atajo | Acción |
|---|---|
| v | Modo visual por carácter |
| V | Modo visual por línea |
| <ctrl> + v | Modo visual en bloque (selección rectangular) |
Una vez seleccionado el texto, se pueden ejecutar los siguientes comandos:
| Atajo | Acción |
|---|---|
| y | Copiar el texto seleccionado |
| d | Cortar el texto seleccionado |
| u | Convertir el texto a minúsculas |
| U | Convertir el texto a mayúsculas |
| > | Indentar el texto seleccionado |
| < | Desindentar el texto seleccionado |
El modo replace (reemplazo) permite sobrescribir caracteres sin entrar al modo insert.
| Atajo | Acción |
|---|---|
| r | Reemplaza el carácter bajo el cursor y vuelve al modo normal |
| R | Entra al modo replace: sobrescribe carácter a carácter |
Note
Los atajos s y S pertenecen al modo normal y son atajos de change:
s equivale a cl (cortar carácter e insertar) y S equivale a cc (cortar
línea e insertar). No constituyen un modo separado.
El modo comando nos permite ejecutar comandos dentro de Vim/Neovim. Para ejecutar un comando podemos seguir los siguientes pasos:
- Entrar al modo normal presionando
<Esc> - Presionar
: - Escribir el comando
- Presionar
<Enter>para ejecutarlo
| Comando | Acción |
|---|---|
| :w [archivo] | Guarda el archivo actual (o en [archivo] si se especifica) |
| :q | Cierra el buffer actual |
| :qa | Cierra todos los buffers abiertos |
|
:wq [archivo] :x [archivo] |
Guarda y cierra el buffer actual |
| :wa | Guarda todos los buffers abiertos |
|
:wqa :xa |
Guarda y cierra todos los buffers abiertos |
| :e [archivo] | Abre o crea un archivo en el buffer actual |
| :e! | Recarga el archivo desde disco, descartando cambios no guardados |
| :!{comando} | Ejecuta un comando de shell y muestra el resultado en Vim/Neovim |
| ZZ | Guarda solo si hubo cambios y cierra (equivale a :x) |
| ZQ | Cierra sin guardar (equivale a :q!) |
Tip
Para forzar un comando, agrega ! después de él, e.g., :q! para salir sin
guardar cambios.
El comando de reemplazo nos permite buscar y reemplazar texto dentro de un archivo mediante expresiones regulares (RegEx), permitiendo desde sustituciones literales hasta patrones complejos.
Tip
Para aprender más sobre el comando de reemplazo y las expresiones regulares de Vim, véase Vim Regular Expressions 101.
La sintaxis para la búsqueda y reemplazo es la siguiente:
:[rango]s[ubstitute]/patrón/string/[flags]
Donde para cada línea dentro del rango se reemplaza una coincidencia (match)
del patrón con la string. Las flags disponibles son:
-
c— Confirma cada sustitución interactivamente -
g— Reemplaza todas las ocurrencias en la línea (sing, solo la primera) -
i— Aplica case-insensitive para el patrón -
I— Aplica case-sensitive para el patrón (anulai)
| Especificador | Descripción |
|---|---|
| número | Número absoluto de una línea |
| . | La línea actual |
| $ | La última línea del archivo |
| % | El archivo completo; equivalente a 1,$ |
| 't | Posición de la marca t
|
| /patrón/ | La siguiente línea donde hay coincidencia con el patrón |
| ?patrón? | La línea anterior donde hay coincidencia con el patrón |
| \// | La siguiente línea que coincida con el patrón de búsqueda usado anteriormente |
| \?? | La línea anterior que coincida con el patrón de búsqueda usado anteriormente |
| \& | La siguiente línea que coincida con el patrón de sustitución usado anteriormente |
| Comando | Acción |
|---|---|
:s/foo/bar/ |
Reemplaza la primera ocurrencia de foo por bar en la línea actual |
:s/foo/bar/g |
Reemplaza todas las ocurrencias de foo por bar en la línea actual |
:%s/foo/bar/g |
Reemplaza todas las ocurrencias de foo por bar en todo el archivo |
:%s/foo/bar/gc |
Igual que el anterior, pero confirma cada sustitución |
:5,12s/foo/bar/g |
Reemplaza todas las ocurrencias entre las líneas 5 y 12 |
| Comando | Acción |
|---|---|
:%s/\<foo\>/bar/g |
Reemplaza foo solo como palabra completa (límites de word en Vim: \<\>) |
:%s/foo/bar/gi |
Reemplaza foo de forma case-insensitive en todo el archivo |
:%s/\(foo\)\(bar\)/\2\1/g |
Intercambia foo y bar usando grupos de captura |
:%s/^/ / |
Añade dos espacios al inicio de cada línea |
:%s/\s\+$// |
Elimina los espacios en blanco al final de cada línea |
- Neovim in 100 Seconds
- Vim Cheat Sheet
- Taller de Neovim
- Vim Regular Expressions 101
- Neovim Distributions Ranking
- My Neovim Dotfiles
-
Oficina de Software Libre Universidad de Granada (29 de septiembre de 2021). Taller de Neovim 2021. https://www.youtube.com/watch?v=LFIp7-TGmNU
-
Raisky, O. (2002). Vim Regular Expressions 101. https://vimregex.com/
-
Akamai (s.f.). The vim Command Reference. Operating Systems Fundamentals. https://www.coursera.org/learn/akamai-operating-systems/supplement/K2RPq/the-vim-command-reference
-
rtorr. (s.f.). Vim Cheat Sheet. https://vim.rtorr.com/
- Definición y Estructura de un Shell
- Los Diferentes Tipos de Shell
- Definición y Sintaxis de un Comando
- Variables, Alias y Funciones
- Comandos de Utilidad y Consulta
- Linux como Sistema Multiusuario
- Introducción a los Usuarios y Grupos
- Gestión de Usuarios
- Gestión de Grupos
- Gestión de Contraseñas
- Búsqueda de Información de Usuarios y Grupos con
getent
- Atributos de Archivos: Propiedad y Permisos de los Archivos
- Cambio de Propiedad y Permisos
umask: Permisos Predeterminados de Archivos- Cambio de Identidad y Privilegios
- Gestión de Paquetes (Package Management)
- Compresión y Archivado de Archivos
- Optimización y Conversion de Archivos