Vim: Referencia rápida
Vim (Vi IMproved) es un editor de textos de consola, aunque también existen versiones para
las XWindow. Es una mejora del vi tradicional de UNIX y actualmente se encuentra en la
mayoría de sistemas, por tanto, el saber utilizar esta herramienta facilita la administración
de cualquier entorno UNIX. También es una muy buena alternativa para editar y desarrollar
código en cualquier lenguaje.
Para editar un archivo con Vim ejecutaremos:
vim archivo
Puede ser interesante hacer que cuando ejecutemos "vi", en lugar de ejecutar el vi tradicional
se llame realmente a Vim ya que este es mucho mejor que el anterior. Para esto es posible definir
un alias de la siguiente forma:
alias vi='vim'
Este texto puede ser introducido directamente en la consola o incluido en los archivos
.bashrc y .bash_profile del directorio personal del usuario (cd $HOME).
Una vez tenemos abierto vim y estamos editando un archivo debemos conocer diversos comandos
para poder utilizar el entorno. El editor se puede encontrar en 3 modos diferentes:
- Modo normal (Normal mode): Se pueden utilizar ciertas combinaciones de teclas para
realizar ciertas acciones. Para acceder a este modo presionar escape.
- Modo inserción (Insertion mode): Se puede insertar (insert) o sobreescribir el texto (append).
Para acceder a este modo presionar 'i', 'a' o la tecla 'insert' (1 vez = insert, 2 veces = append).
- Modo comando (Command mode): Se puede utilizar cualquier comando SED además de funciones propias de Vim.
Para acceder a este modo se debe estar en modo normal y pulsar ':', a continuación se escribirá
nuestra petición.
- Modo visual (visual mode): Se puede selecionar texto para tratarlo en conjunto. Para acceder
a este modo se debe estar en modo normal y pulsar 'v'.
Modo Normal:
- Desplacamiento con los cursores del teclado o con h (izquierda), j (arriba), k (abajo)
y l (derecha)
- Ir a la línea N
N gg (e.g 10gg)
- Avanzar saltando de palabra en palabra
w
- Deshacer
u
- Rehacer
CTRL+r
- Buscar un texto
/texto[ENTER]
- Repetir última búsqueda
n
- Repetir última búsqueda en sentido contrario
N
- Marcar posición actual y asociarlo a una letra entre a-z,A-Z
m{a-z,A-Z} (e.g. ma)
- Ir a la posición marcada con la letra X
`X (e.g. `a)
Se debe pulsar espacio despues de ` porque sino escribiriamos à y no seria efectivo
- Dividir la pantalla horizontalmente en 2:
CTRL+ws
- Dividir la pantalla verticalmente en 2:
CTRL+wv
- Crear un nuevo archivo en una pantalla dividida horizontalmente:
CTRL+wn
- Salir (solo funcionará si no se ha realizado ningún cambio en el archivo)
CTRL+q
- Hacer de la ventana actual la única eliminando divisiones
CTRL+o
- Moverse a la ventana de arriba (j), abajo (k), izquierda (h) o derecha (l):
CTRL+w{j,k,h,l} ó CTRL+w{cursores del teclado}
- Hacer todas las ventanas del mismo tamaño
CTRL+w=
- Incrementar/Decrementar la altura de la ventana actual
CTRL+{+,-}
- Poner toda la línea actual en mayúsculas
guu
- Poner toda la línea actual en minúscula
gUU
- Mostrar el valor ascii, hexadecimal y octal del caracter sobre el que estamos situados
ga
Modo Inserción:
- Autocompletar palabra en base al texto ya existente
CTRL+N y CTRL+P (e.g. "hola hCTRL+N" resultado "hola hola")
- Autocompletar línea entera
CTRL+NL
Modo Comando: Pulsar [ENTER] después de cada comando
- Salir
:q
- Salir cerrando todos los ficheros abiertos
:qa
- Guardar
:w
- Salir guardando
:wq
- Salir sin guardar
:q!
- Guardar en fichero de solo lectura (sólo root)
:w!
- Guardar con otro nombre
:w archivo
- Visualizar archivo
:view archivo
- Editar archivo
:e archivo
- Mostrar las marcas establecidas en el texto
:marks
- Iniciar una shell
:shell
- Ejecutar un comando
:!comando
- Dividir pantalla horizontalmente
:split
- Dividir pantalla verticalmente
:vsplit
- Crear nueva pantalla dividida
:new
- Quedarse solo con la ventana actual y ocultar el resto
:only
- Listar todos los ficheros abiertos (buffers)
:files ó :buffers
- Ir al buffer X (los numeros aparecen al hacer un :files o :buffers *en plural*)
:file X ó :buffer X
- Añadir un archivo a la lista de buffers
:badd archivo
- Substituir una cadena de texto A por B (si alguna de estas cadenas contiene caracteres
que tengan algun significado especial como por ejemplo '/' se debe anular antes la funcionalidad
de este con \, por ejemplo, substituir los '/' por '.' seria :s/\//./)
:%s/A/B/ (e.g. :s/hola/adios)
- Substituir una cadena de texto A por B en todo el texto
:%s/A/B/g
- Substituir una cadena de texto A por B entre la linea 2 y 10
:2,10s/A/B/g
- Guardar archivo y movernos al siguiente
:wn
- Ayuda
:help ó :help termino
- Activar uso de ratón (es necesario tener GPM en marcha o estar en las XWindow), se podrá
utilizar para cambiar entre ventanas, seleccionar texto (modo visuaL), etc...
:set mouse=a
- Desactivar uso de ratón
:set mouse=
- Activar la inserción en "modo paste", esto permite pegar cosas al documento (usando el ratón)
de forma que no tabule lo que pegamos, ya que si ese texto ya esta tabulado lo único que hace
es pegar desordenando el texto.
:set paste
- Desactivar la inserción en "modo paste"
:set nopaste
Archivo configuración Las siguientes sentencias pueden ser ejecutadas en modo comando o
incluidas en el archivo de configuración de vim, de forma que se ejecuten automáticamente al
iniciar el editor. Este fichero se debe crear en el directorio del usuario ($HOME) con el nombre
".vimrc", se colocará cada instruccion en una linea diferente y estas no deben llevar
los dos puntos iniciales. Por ejemplo:
set nobackup
set syntax=on
- Hacer que una tecla activa/desactive el "modo paste"
:set pastetoggle=
- Activar/Desactivar el coloreado de sintaxis en archivos de código fuente
:set syntax=on
:set syntax=off
- Espacios de la indentacion/tabulación
:set sw=3
:set tabstop=3
- Activar tabulación elegante
:set smarttab
- Ignorar las mayúsculas/minúsculas en las búsquedas de texto
:set ic
- Resaltar texto encontrado en las búsquedas
:set hls is
- Mostrar la "regla" que indique en que fila/columna se encuentra el cursor
:set ruler
- Substituir tabulaciones por espacios
:syntax on
- No reproducir beep al cometer un error pero si mostrar una señal visual
:set vb
- No reproducir beep ni mostrar señal visual al cometer un error
:set vb t_vb=
- No realizar backups al guardar un archivo
:set nobackup
- Abreviaciones
:abbr #i #include
:iab yfechahora =strftime("%A %d %B %Y %T %Z")
:iab yfecha =strftime("%A %d %B %Y")
:iab yhora =strftime("%H:%M")
- Remapeos para corregir errores en el modo comando
:nmap :W :w
:nmap :Q :q
:nmap :WQ :wq
- Mapear teclas a funcionalidades
:map :w
:map :wq
- Activar/Desactivar el uso del raton
:set mouse=a
:set mouse=
Modo Visual:
- Seleccionar texto utilizando h(izquierda), j (arriba), k (abajo) y l (derecha) o con los
cursores del teclado.
- Es posible aplicar las mismas instrucciones vista en el modo comando y modo normal, pero esto
solo se realizará sobre el texto seleccionado.
- Si seleccionamos texto y pasamos a modo comando pulsando ':' se nos mostrar una linea como esta
":' <,'>", no debemos borrar estos símbolos ya que es la forma de reconocer vim que estamos
aplicando el comando al texto seleccionado.
- Copiar el texto selecionado
y
- Cortar el texto seleccionado
d
- Pegar el texto copiado o cortado. Debemos estar en modo normal, se pasará automáticamente
a ese modo despues de copiar o cortar con 'y' o 'd'.
p
En la página de Vim se puede encontrar más información,
incluso scripts que añaden funcionalidades interesantes como tener pestañas con los diferentes
archivos abiertos, tener una ventana lateral con el listado de las funciones/métodos del código
que se esta editando, corrector de ortografía, etc...