Comandos vi en Linux: Guía Completa (guardar, salir, copiar, buscar)
El Comando vi en Linux es un editor de textos ASCII poderoso y muy usado en la interfaz de caracteres de Linux para edición de archivos y programas. Su uso no es muy intuitivo a primera vista, pero la edición simple de textos puede hacerse usando pocos comandos.
Puede ser muy útil para pequeñas correcciones puntuales, principalmente en ambiente de producción. Entonces no es mala idea saber manejar este editor de textos universalmente disponible en las distribuciones Linux.
Básicamente tiene dos modos de trabajo: el modo de operación y el modo de inserción. En el modo de operación el vi espera comandos que van a realizar alguna acción. En el modo de inserción, todo lo que se escriba es considerado texto.

El modo de operación se accede a través de la tecla ESC. El vi siempre inicia en este modo. Para entrar en el modo de inserción, basta con presionar la tecla INSERT o el comando "i".
Para hacer la edición simple de archivos en vi:
$ vi nomedoarquivo
Cambie el modo a inserción con la tecla INSERT o presionando la tecla "i". El cursor puede moverse en este modo con las flechas de dirección. Al terminar de escribir presione la tecla ESC y escriba:
:w para guardar los cambios;
:wq para guardar y salir del vi;
:q! para salir sin guardar;
Vea a continuación la tabla de comandos aceptados por el vi. Todos los comandos deben darse en el modo de operación. El signo "+" indica teclas que deben presionarse simultáneamente. La coma indica que las teclas deben escribirse en secuencia. Vea también nuestro contenido con todos los principales procesos y comandos en linux.
| Acción | Comando |
| Abrir Archivo | :e archivo |
| Guardar Archivo | :w |
| Guardar Archivo Como | :w archivo |
| Guardar y Salir | :wq |
| Salir sin guardar | :q! |
| Grabar contenido si fue alterado | :ZZ |
| Para marcar un texto para copiar o cortar | v, flechas de dirección |
| Para copiar texto marcado | y |
| Para cortar texto marcado | c |
| Para pegar texto marcado | p |
| Copiar una línea | yy |
| Copiar hasta el final del archivo | yG |
| Borrar texto adelante (DEL) | x |
| Borrar texto hacia atrás (BACKSPACE) | X |
| Borrar una línea | dd |
| Borrar hasta el final del archivo | dG |
| Borrar hasta el final de la línea | D |
| Buscar texto adelante | /texto |
| Buscar nuevamente | / |
| Buscar texto hacia atrás | ?texto |
| Buscar nuevamente | ? |
| Deshacer cambios | u |
| Rehacer cambios | CTRL+r |
| Formatear Alineación Centrada | :ce |
| Alineación a la derecha | :ri |
| Alineación a la izquierda | :le |
| Abrir nueva ventana | :new |
| Dividir la ventana actual en dos | :split |
| Abrir archivo en nueva ventana | :split archivo |
| Ir a la ventana de arriba | CTRL+w, k |
| Ir a la ventana de abajo | CTRL+w, j |
| Ir al inicio de la línea | 0 |
| Ir al final de la línea | $ |
| Ir al final del archivo | G |
| Ir a la línea de abajo | j |
| Ir a la línea de arriba | k |
| Ir a la izquierda | h |
| Ir a la derecha | l |
| Ir al final de la pantalla | L |
| Ayuda | :help |
| Inserta texto antes del cursor | i |
| Inserta texto después del cursor | a |
| Inserta texto en una nueva línea | o |
Trucos de Programadores con Vi
El vi al ejecutarse busca por un archivo de configuración llamado ".vimrc" en el directorio HOME de los usuarios. No siempre existe este archivo, pero puede ser creado por el usuario para hacer algunas cosas interesantes con el vi, tales como:
Colorear la sintaxis
Para colorear la sintaxis de archivos con código fuente, se debe habilitar la directiva "sintax on" en el archivo .vimrc, con el comando:
$ echo 'sintax on' >> ~/.vimrc
De esta forma, el viwill color the text, recognizing various will color the text, recognizing various programming languages. Use las comillas simples en estos comandos, como se demuestra.

Enumerar las líneas
Otro recurso interesante en vim es la enumeración de las líneas, que permite depurar fácilmente un código fuente. Para habilitar este recurso se debe usar la directiva "set number" en el archivo .vimrc, con el comando:
$ echo 'set number' >> ~/.vimrc
De esta forma, el viwill enumerate the text, facilitando the depuración del código.

Depurador de Sintaxis
Esta opción del vi es muy interesante para los programadores. Permite que una tecla sea mapeada para activar un compilador o intérprete de lenguaje, con el objetivo de verificar la sintaxis, sin necesidad de salir del editor de textos.
En el ejemplo, se utiliza la opción "-l" de php, que hace solo una verificación de sintaxis. La combinación de teclas elegida fue CTRL B, que ejecuta el comando php -l en el archivo fuente.
$ echo 'map <C-B> :!php -l %<CR>' >>~/.vimrc
De esta forma, para verificar la sintaxis de un código php, basta con presionar CTRL B, quewill activate the php interpreter to verify the syntax:

En este ejemplo, induje un error de falta de ";". Al presionar CTRL B, el php will indicate that there is a syntax error:

Esta facilidad del vim es extremadamente útil en lenguajes interpretados, que permiten verificar la sintaxis sin la necesidad de abandonar el editor.
Para otros lenguajes, se puede usar el mismo concepto, alterando la opción de verificación de sintaxis:
- PERL: echo 'map <C-P> :!perl -c %<CR>' >>~/.vimrc
- PYTHON: echo 'map <C-Y> :!python -d %<CR>' >>~/.vimrc
Deshacer infinito
La tecla "u" en el modo de comandos del vi permite volver al texto anterior, deshaciendo los cambios. Sin embargo, al salir del vi, la capacidad de deshacer cambios se pierde. Por lo tanto, si estás editando un código fuente y sales del editor, ya no podrás usar el recurso de deshacer cambios.
Pero hay una solución para que el vi mantenga un historial de cambios, considerada un verdadero salvador de vidas.
Él permite que el vi mantenga un historial de cambios de archivos en un directorio especial en el HOME del usuario.
Para habilitar este recurso, se deben ejecutar los siguientes comandos:
Primero se crea el directorio para almacenar el historial en el HOME del usuario:
$ mkdir -p ~/.vim/undodir
Después se debe habilitar el recurso de undofile:
$ echo 'set undofile' >>~/.vimrc
Por último, se configura el directorio para almacenar estos archivos, creado en el primer paso:
$ echo 'set undodir=~/.vim/undodir' >>~/.vimrc
De esta forma, el vi mantendrá el historial de cambios, posibilitando deshacer cambios con la tecla "u".
De vez en cuando, es interesante limpiar el contenido del directorio ~/.vim/undodir.
Cambiar texto (reemplazar)
El recurso de reemplazar un texto por otro en vim también ayuda mucho para hacer reemplazos de código en vi.
Para hacer un reemplazo, entra en el modo de comando con la tecla ESC y después escribe:
:%s/texto a ser procurado/texto a ser substituído/g
De esta forma, vim buscará por todas las ocurrencias del texto a buscar y cambiará por texto a reemplazar en todo el documento.
Si quieres que el vi solo reemplace la primera ocurrencia, el comando es el mismo, pero sin la "g" al final:
:%s/texto a ser procurado/texto a ser substituído/
Si el texto a buscar o reemplazar contiene una barra simple "/", se debe usar una barra invertida "\" antes, para que el vi sepa que la "/" en el texto no sea interpretada como un separador.
En este ejemplo, la ocurrencia de "/etc" será reemplazada por "/var":
:%s/\/etc/\/var/g
Otro reemplazo interesante es colocar todas las líneas dentro de una etiqueta HTML, como por ejemplo, de párrafo:
:s/.*/<p>\r&\r<\/p>/
La expresión .* indica el inicio de la línea, y el "\r" el "return" (final de la línea).
Buscar texto
Para buscar un texto en vi, basta con presionar la barra "/" en el modo de comando y escribir el texto. De esta forma, el vi buscará las ocurrencias del término buscado una a una, presionando nuevamente la tecla "/".
Un recurso para potenciar las búsquedas de texto en vi es habilitar el resaltado del término, así como habilitar el "case insensitive", posibilitando búsquedas ignorando si el texto está en mayúsculas o minúsculas:
Para habilitar el resaltado de texto buscado:
$ echo 'set hlsearch' >> ~/.vimrc
Para ignorar si el término está en mayúsculas o minúsculas:
$ echo 'set ignorecase' >> ~/.vimrc
Para buscar un texto respetando las mayúsculas, si el término contiene una letra en mayúscula:
echo 'set smartcase' >> ~/.vimrc
Indentación
Un truco interesante del vi es la indentación automática del texto.
Para arreglar un código fuente con indentación, escribe en el modo de comando:
gg=G
De esta forma, el vi formateará el código, haciéndolo más legible.
También es posible determinar que el vi indente el código mientras programas, variando el espaciado dependiendo del tipo de código fuente.
Para habilitar este recurso:
$ echo 'filetype indent plugin on' >> ~/.vimrc
Después, se debe crear un directorio llamado ".vim" en el directorio HOME, si este aún no existe:
$ mkdir ~/.vim
En este directorio, se debe crear un archivo para cada tipo de código fuente, como en el ejemplo:
$ cat ~/.vim/php.vim
setlocal shiftwidth=2
setlocal tabstop=2
En este ejemplo, hay un archivo php.vim dentro del directorio ~/.vim.
Y en él hay dos directivas:
- shiftwidth=2 Determina que el número de espacios para auto indentación sean 2. El padrão son 8 espacios.
- tabstop=2 Determina el número de espacios que la TAB contiene. El padrão son 8 espacios.
Para python, por ejemplo:
$ cat ~/.vim/python.vim
setlocal expandtab
setlocal shiftwidth=4
setlocal softtabstop=4
En este ejemplo, las directivas expandtab y softtabstop son para:
- expandtab No hace el cambio de TAB por espacios;
- softtabstop permite fingir que los TABS son espacios en el momento de la edición.
Quitar los ^M al final de los archivos
Generalmente después de copiar un archivo de texto de Windows a Linux y editarlo en vi, el archivo aparece con códigos "^M" al final de cada línea.
De esta forma, se puede hacer el ajuste del archivo en vi, utilizando el comando a continuación, en el modo de comandos:
:e ++ff=dos
El comando de reemplazo también funciona bien:
:%s/<Ctrl-V><Ctrl-M>/\r/g
Aprende mucho más sobre Linux en nuestro curso en línea. Puedes realizar la inscripción aquí. Si ya tienes una cuenta, o quieres crear una, simplemente inicia sesión o crea tu usuario aquí.
¿Te gustó? Comparte
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.