EDITOR VI
1.- Introducción
Vi es un editor de texto que fue creado para sistemas UNIX y que posteriormente se implantó en sistemas GNU/Linux.
Vi fue escrito originalmente en la Universidad de California en Berkeley por William Joy en 1976, con la intención de mejorar y potenciar dos editores de texto previos: ed y ex.
Es posiblemente el único editor que se encuentra en la mayoría de sistemas UNIX y GNU/Linux.
Aunque Vi no es muy fácil de usar ni muy autoexplicativo, es tan común en Linux y Unix que muchas veces se hace necesaria su utilización. Digamos que se convierte en casi indispensable en la administración de sistemas de la rama Unix/Linux.
Es importante saber que también existe una versión mejorada de Vi (VIM VI Improved).
Además, se ha de señalar que en gran parte de las distribuciones GNU/Linux Vi no es más que un enlace simbólico al ejecutable Vim, así que nos da lo mismo teclear Vi que Vim, ya que el programa que arranque probablemente será siempre el mismo, Vim.
2.- ¿Tenemos instalado Vi?
Normalmente tendremos instalado este editor en nuestra distribución GNU/Linux, sea cual sea. De todas maneras, antes de ejecutarlo, podemos saber con total certeza si está instalado o no con el siguiente comando:
~
~ VIM - VI Mejorado
~ versión 6.3.82
~ por Bram Moolenaar et al.
~ Vim es código abierto y se puede distribuir libremente
~ ¡Patrocine el desarrollo de Vim!
~ escriba :help sponsor<Intro> para más información
~ escriba «:q<Intro>» para salir
~ escriba «:help<Intro> o <F1>» para obtener ayuda
~ escriba «:help version6<Intro>» para información de la versión
|
o, también con
Que nos dice donde está ubicado el ejecutable de Vi (por convenio, todo el software adicional del sistema se almacena en /usr/, y en bin/ sus archivos ejecutables)
En el hipotético caso de no tener instalado Vi, lo instalaremos en nuestro sistema de una forma u otra dependiendo del gestor de paquetes con el que trabaja.
Para sistemas con gestor de paquetes tipo APT (sistemas Debian)
* Instalación:
Como root ejecutamos:
Para sistemas con gestor de paquetes tipo RPM (sistemas Red-Hat, Fedora, Suse, OpenSuse, Mandriva, etc...)
Primero, conseguimos el paquete RPM adecuado para nuestra distribución (hay que tener en cuenta la versión del sistema operativo), sabiendo que la tipología de un paquete RPM es:
<name>-<version>-<release>.<arch>.rpm
* ¿Donde conseguirlo?:
http://rpmfind.net/.
http://rpm.pbone.net/
http://www.rpmhelp.net/
* Instalación:
Como root ejecutamos:
- Yum (Yellow Dog Updater, Modifier para Fedora Core). Yum es un gestor de paquetes que deriva de RPM, pero que le hace más potente ya que utiliza repositorios (como Apt-get) y se encarga de las dependencias.
* Instalación:
Como root ejecutamos:
- Yast (sistemas Suse) Yast es una herramienta gráfica de instalación y configuración para sistemas SuSE
- Urpm (sistemas Mandriva). También es un gestor de paquetes muy similar a Yum, con la diferencia que trabaja con repositorios oficiales de Linux Mandriva.
* Instalación:
Como root ejecutamos:
Instalación por código fuente
Escogeremos esta opción si queremos instalar Vi o Vim por medio de sus fuentes.
Nos bajamos de la página oficial (http://www.vim.org/) el fichero fuente, por ejemplo
vim-7.0.tar.bz2. Lo vemos:
Nota: el fichero fuente esta comprimido con bzip2. Deberemos tener en nuestra distribución bzip2 para descomprimirlo. Alternativamente, nos podemos bajar la versión comprimida con gzip y descomprimirlo con
tar -xvzf vim-7.0.tar.gz
|
alex@alexDebian:~$wget ftp://ftp.vim.org/pub/vim/unix/vim-7.0.tar.bz2
--19:43:07-- ftp://ftp.vim.org/pub/vim/unix/vim-7.0.tar.bz2
=> `vim-7.0.tar.bz2'
Resolviendo ftp.vim.org... 192.87.102.36
Conectando con ftp.vim.org[192.87.102.36]:21... conectado.
Identificándose como anonymous ... ¡Dentro!
==> SYST ... hecho. ==> PWD ... hecho.
==> TYPE I ... hecho. ==> CWD /pub/vim/unix ... hecho.
==> PASV ... hecho. ==> RETR vim-7.0.tar.bz2 ... hecho.
Longitud: 6,575,205 (probablemente)
100%[==================================================================================>] 6,575,205 66.55K/s ETA 00:00
19:44:00 (124.96 KB/s) - `vim-7.0.tar.bz2' guardado [6575205]
|
Lo descomprimimos:
alex@alexDebian:~$bunzip vim-7.0.tar.bz2
alex@alexDebian:~$tar -xvf vim-7.0.tar
vim70
vim70/README.txt
vim70/runtime
vim70/runtime/bugreport.vim
vim70/runtime/doc
vim70/runtime/doc/makehtml.awk
.....
|
Hacemos la precompilación:
alex@alexDebian:~$cd vim70
alex@alexDebian:~/vim$ ./configure
configure: creating cache auto/config.cache
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
.....
|
Lo compilamos:
alex@alexDebian:~/vim70$ make
Starting make in the src directory.
If there are problems, cd to the src directory and run make there
cd src && make first
make[1]: Entering directory `/download/vim70/src'
mkdir objects
CC="gcc -Iproto -DHAVE_CONFIG_H " srcdir=. sh ./osdef.sh
gcc -c - I. -Iproto -DHAVE_CONFIG_H -g -O2 -o objects/buffer.o buffer.c
gcc -c - I. -Iproto -DHAVE_CONFIG_H -g -O2 -o objects/charset.o charset.c
gcc -c - I. -Iproto -DHAVE_CONFIG_H -g -O2 -o objects/diff.o diff.c
......
|
Y por último, como root lo instalamos:
root@alexDebian:~/vim70#make install
Starting make in the src directory.
If there are problems, cd to the src directory and run make there
cd src && make install
make[1]: Entering directory `/download/vim70/src'
if test -f /usr/local/bin/vim; then
mv -f /usr/local/bin/vim /usr/local/bin/vim.rm;
rm -f /usr/local/bin/vim.rm;
fi
cp vim /usr/local/bin
strip /usr/local/bin/vim
chmod 755 /usr/local/bin/vim
/bin/sh ./mkinstalldirs /usr/local/share/vim
.....
|
Y ya tendríamos instalado VIM en nuestra máquina.
NOTA: El directorio por defecto donde se encuentran los ejecutables creados por medio de la compilación del código fuente (make y makeinstall) es /usr/local/bin. En este caso la ruta absoluta de vim versión 70 será /usr/local/bin/vim,.
|
NOTA : la instalación se ha hecho bajo una distribución debian testing
|
3.- Modos de vi
Vi tiene tres modos de utilización :
- El modo normal. En este modo Vi interpretará todo lo que escribamos para realizar acciones determinadas. Es el modo predeterminado de Vi cuando arranca.
- El modo inserción. Este modo se utiliza para modificar el contenido de un archivo, es decir, escribir texto, eliminarlo o desplazarnos por él. Es el modo que más se utiliza. Para volver al modo normal desde este modo, presionaremos siempre la tecla ESC.
- El modo ultima línea o línea de comandos. Modo para dar órdenes extendidas a Vi. Mientras se escriben las órdenes, éstas aparecen en la última línea de la pantalla, de ahí su nombre. Entraremos en este modo pulsado la tecla : y seguidamente escribimos las ordenes.
4.- Teclas para cambiar entre modos
ESC
|
Activa el modo normal. También sirve para interrumpir una acción que se está ejecutando
|
i
|
Activa el modo inserción
|
:
|
Activa el modo ultima línea
|
5.- Objetos de texto
Vi reconoce objetos de texto estándar: palabras, frases, párrafos y bloques.
Es importante saber que para cada objeto se usa una letra identificativa del mismo:
w
|
Para palabras
|
s
|
Para frases
|
P
|
Para párrafos
|
b
|
Para texto encerrado entre paréntesis ()
|
B
|
Para texto encerrado entre corchetes []
|
6.- Sintaxis de Vi
vi [opciones] [fichero(s)]
- Opciones: aquí pondremos las opciones admitidas por Vi. Veremos todas en su página man (ejecutamos man Vi)
- Fichero: Si el archivo tecleado existe, se mostrará, sino crearemos un archivo en blanco con el nombre especificado.
Podemos especificar más de un fichero separados por espacios en blanco
Ejemplo. En este caso el fichero pedro no existe
1|
~
~
"pedro" [Fichero nuevo] 0,0-1 Todo
|
El símbolo | le indica donde está el cursor.
7.- Trabajar con Vi
Inserción de texto.
Estando en el modo normal, presionamos:
a
|
Inserta después del carácter donde estamos situados
|
i
|
Inserta antes del carácter donde estamos situados
|
A
|
Añade al final de la línea actual
|
I
|
Añade al principio de la línea actual
|
R
|
Reemplazar texto
|
o
|
Añade una línea en blanco debajo de la línea donde estemos posicionados y pasa al modo inserción
|
O
|
Añade una línea en blanco encima de la línea donde estemos posicionados y pasa al modo inserción
|
Para finalizar la inserción, pulsamos la tecla ESC (retorna al modo normal)
Ejemplo, insertamos una nueva línea en blanco debajo de la posición del cursor pulsando o:
Borrado de texto
Estando en el modo normal, presionamos:
x
|
Borra el carácter que está debajo del cursor
|
nº x
|
Borra el carácter que está debajo del cursor y todos los demás n-1 caracteres situados a la derecha del cursor
|
D
|
Borra desde la posición actual al final de la línea
|
dd
|
Borra la línea actual
|
nº dd
|
Borra n líneas
|
Dw
|
Borra desde la posición actual al final de la palabra
|
dnº$
|
Borra desde la posición actual al final de la palabra y todas las n líneas que están debajo
|
dG
|
Borra desde la posición actual hasta el final del fichero
|
Ejemplo, borramos desde la posición actual del cursor hasta el final del párrafo, es decir, borramos la última frase pulsando la secuencia de teclas d2$. Lo vemos:
Movimiento. Desplazarnos por el archivo.
Estando en el modo normal, presionamos:
h
|
Hacia la izquierda
|
j
|
Hacia abajo
|
k
|
Hacia arriba
|
l
|
Hacia la derecha
|
Esto se debe a que cuando nació vi, las teclas de flechas no existían. Lógicamente, utilizaremos éstas para movernos.
|
w
|
Nos movemos al principio de la siguiente palabra
|
B
|
Nos movemos al principio de la palabra anterior
|
0
|
Nos movemos al principio de la línea actual
|
$
|
Nos movemos al final de la línea
|
E
|
Nos movemos al final de la siguiente palabra
|
E
|
Nos movemos al final de la siguiente palabra antes de un espacio
|
vi +10 mi_fichero
|
Abrimos mi_fichero para edición y nos situamos al principio de la linea 10 del mismo
|
[[
|
Nos movemos al inicio del archivo
|
]]
|
Nos movemos al final del archivo, también pulsando la tecla G
|
nºG
|
Nos movemos a la línea n
|
Ctrl+F
|
Pantalla siguiente (Tecla Av Pag)
|
Ctrl+B
|
Pantalla anterior (Tecla Re Pag)
|
Ctrl+D
|
Media pantalla siguiente
|
Ctrl+U
|
Media pantalla anterior
|
|
|
|
Ejemplo, estando en la línea número 10, nos situamos en la 50 pulsando la secuencia de teclas 50G
Operaciones con los ficheros
Estando en el modo normal, presionamos: (entramos en el modo linea de comandos)
:w
|
Guardamos el fichero
|
:w Nombre de archivo
|
Guardamos el fichero con el nombre indicado
|
:wq
|
Guardamos el fichero y salimos del editor (también :x)
|
:q
|
Salimos si no ha habido cambios
|
:q!
|
Salimos sin guardar los cambios
|
:e archivo
|
Si no hemos realizado cambios o los hemos guardado, cerramos el archivo actual y editamos el archivo indicado
|
:e! archivo
|
Cerramos el archivo actual perdiendo los cambios si los hubiera y, editamos el archivo indicado
|
:r archivo
|
Añadimos el archivo indicado después de la linea actual
|
:nºr archivo
|
Añadimos el archivo indicado después de la linea N
|
:sh
|
Abrimos un intérprete de comandos sin salir del editor. Para salir de él escribimos exit
|
:N,Mw archivo
|
Añadimos desde la linea N hasta la M (inclusive las dos) al archivo indicado
|
CTRL+G
|
Muestra el estado del fichero
|
Ejemplo, añadimos las 18 primeras líneas a un nuevo archivo llamado cabeceraSamba.conf . Lo vemos:
Copiar, pegar, buscar y reemplazar
Estando en el modo normal, presionamos:
yy
|
Copiamos la linea actual (también con la tecla Y)
|
nºyy
|
Copiamos N líneas desde la posición actual y hacia abajo
|
yw
|
Copiamos la palabra situada en la posición actual
|
y$
|
Copiamos desde la posición actual hasta el final de la linea
|
p
|
Pegamos lo copiado debajo de la linea actual
|
P
|
Pegamos lo copiado encima de la linea actual
|
/cadena
|
Buscamos la cadena a partir de la posición actual y hasta el final de fichero. Utilizaremos la tecla n para ir hacia delante y N para ir hacia detrás
|
?cadena
|
Buscamos la cadena a partir de la posición actual y hasta el principio de fichero.
Utilizaremos la tecla n para ir hacia delante y N para ir hacia detrás
|
La cadena puede contener
|
[]
|
Busca exactamente uno de los caracteres incluidos entre los corchetes
|
~
|
El carácter que sigue a ~ debe estar al principio de la linea
|
$
|
El carácter que precede a $ se busca al final de la linea
|
[-]
|
Busca un rango de caracteres
|
Ejemplo, copiamos desde la posición actual hasta el final de la línea (secuencia de teclas y$), y pegamos en la línea 19 (tecla p). Lo vemos:
Deshacer cambios, rehacer
Estando en el modo normal
U
|
Deshace todos los cambios que se han producido en la linea actual
|
u
|
Deshace el último cambio
|
Control+R
|
Rehacer un cambio
|
Ejemplo, deshacemos el pegado anterior. Lo vemos:
Comandos varios
Desde el modo normal
:help [argumento]
|
Ayuda
|
:history
|
Mostrar histórico de comandos
|
Personalizar Vi
Estando en el modo normal
:set number
|
Numerar las líneas
|
:set nonumber
|
Quitar la numeración de las líneas
|
:syntax on/off
|
Activar/Desactivar el coloreado de sintaxis en archivos de código fuente
|
:set ic
|
Realizamos búsquedas ignorando las mayúsculas/minúsculas
|
:set noic
|
Realizamos búsquedas con mayúsculas/minúsculas
|
Si queremos que algunas de estas sentencias estén siempre activas al ejecutar Vim, deberemos crear un archivo llamando .vimrc en nuestro directorio home (para saber cual es ejecutar echo $HOME)
Ejemplo de .vimrc para establecer color de sintaxis y numeración de las líneas
Ventanas
Con Vim podemos dividir la pantalla en diferentes zonas, de tal modo que cada una de ellas se edite un archivo diferente, o incluso, mostrar dos partes diferentes de un mismo fichero.
o Crear dos ventanas mostrando partes diferentes de un mismo archivo
Desde modo normal
:split
|
Crear una ventana horizontal
|
:vsplit
|
Crear una ventana vertical
|
o Crear dos ventanas una para cada archivo
Desde la linea de comandos
vi -o archivo1 archivo2
Ejemplo, abrimos dos archivos (ejecutamos vi o smb.conf.ORIGINAL .bash_profile). Lo vemos:
Moviéndose entre ventanas
Ctrl+w, Ctrl+w
|
Para moverte entre vistas/ventanas
|
Ctrl+w, j
|
Para mover la vista hacia abajo
|
Ctrl+w, k
|
Para mover una vista hacia arriba
|
Ctrl+w, h
|
Para mover una vista hacia la izquierda
|
Ctrl+w, l
|
Para mover una vista hacia la derecha
|
Ctrl+w, =
|
Le indica a Vim que ponga las vistas al mismo tamaño
|
Ctrl+w, -
|
Reduce la vista activa en una línea
|
Ctrl+w,+
|
Aumenta la vista activa en una línea
|
Ctrl+w,q
|
Cierra la ventana activa
|
Ctrl+w,r
|
Gira la ventana hacia la derecha
|
Ctrl+w,R
|
Gira la ventana hacia la izquierda
|
Teniendo de referencia el ejemplo anterior, nos movemos entre las ventanas teniendo pulsada la tecla Ctrl y pulsando dos veces la tecla w. Lo vemos:
Ahora en la ventana de abajo
|
Ahora en la ventana de arriba
|
8.- Referencias
o http://www.vim.org
o http://www.wikipedia.es
o http://es.opensuse.org
o http://www.marblestation.com/
o http://www.FreeUOC.org Proyecto LPI
o Vim: Referencia rápida. Autor: Joaquín Ataz López. Murcia, Diciembre de 2004
o G.L.U.P. Guía de Linux Para El Usuario. Larry Greenfield
o GNU/Linux: Instalación y primeros pasos. Autores: Matt Welsh, Phil Hughes. Julio de 2002
o Sistema Operativo GNU/Linux básico. UOC. Autores: Roger Borg Viñas. Francesc Aulí Llinas
o Apuntes Sistema Operativo Linux Universidad Politécnica de Madrid. Noviembre 2004
; |