Destacados

Más
Domingo, 14 de diciembre, 2008

Manual para aprender a utilizar VIM

34 +100K

Vim es un editor de ficheros de textos muy versátil, que dispone de una gran flexibilidad a la hora de escribir scripts, modificar ficheros de texto, etc... pero sobretodo, a la hora de programar.

Publicidad

Vim es un editor de ficheros de textos muy versátil, que dispone de una gran flexibilidad a la hora de escribir scripts, modificar ficheros de texto, etc... pero sobretodo, a la hora de programar.

A mi criterio, es el mejor editor que existe, sin embargo, a sus usuarios normalmente le suele pasar como a la Pepsi: o te encanta, o lo odias.

Sus detractores engloban las desventajas de vim en dos, muy comunes:

  • Poco «amistoso»: Es cierto. En cuanto a primeras impresiones, Vim tiene las de perder. Muchos usuarios se asustan sin darle ni una oportunidad. A pesar de su muy dura curva de aprendizaje, una vez se aprende sus funciones básicas, la productividad asciende de una manera notable.
  • Atajos dificiles: Vim es muy potente, pero carece de menús o botones. Todo se hace a través de comandos y atajos que son secuencias de letras y signos. Esto resulta muy frustrante para muchos usuarios que olvidan o no recuerdan con facilidad. Para ello recomiendo alguna chuleta como VIMRefCard.

Las ventajas, sin embargo, son múltiples. VIM ocupa muy poco y existe en prácticamente todos los Linux o Unix disponible. Al ser un programa que se ejecuta en entorno de texto es útil para accesos remotos y edición vía terminal.

Así pues, vamos a darle un breve repaso a su uso básico desde cero, para perder ese miedo y comprobar lo útil que es aprender a usarlo.

VIM: Introducción

Arrancar el vim es muy sencillo. Sólo hay que escribir en una terminal vim, seguido del nombre del fichero a editar. Nos aparecerá una ventana en negro, donde nos aparecerá el contenido del fichero (o en negro si está vacío). En la parte inferior, nos aparecerán los mensajes o comandos que escribamos para manejar el editor, así como la línea en la que estamos, porcentaje del fichero, etc.

Lo primero que hay que aprender de Vim (muy importante) es que tiene varios modos de uso:

  • Nada más entrar en vim a editar un fichero, estamos en el modo normal, en el que podremos introducir atajos para realizar operaciones (borrar linea, deshacer, etc...). IMPORTANTE: En este modo no podemos escribir en el fichero. Las teclas que pulsemos probablemente estarán asociadas a una operación determinada. Muchos de estos comandos (no todos) comenzarán por :.
  • Para escribir texto en el fichero tendremos que entrar en el modo edición, que es tan fácil como pulsar la tecla insert (o i). Sabrás que has entrado en este modo porque abajo aparecerá el texto -- INSERTAR --. Ahora todo lo que tecleemos se estará escribiendo en el fichero de texto. Para volver al modo normal sólo hay que pulsar la tecla ESC (Escape).

Todo esto puede parecer muy lioso al principio, pero conforme comiences a utilizarlo con frecuencia, verás que resulta cómodo y lo haces de forma automática.

Primeras impresiones

Vim reconoce automáticamente por la extensión del fichero, el lenguaje en el que estamos programando (.C, .sql, .pl, .latex, .php...), por lo tanto nos hará un resaltado de sintaxis con colores, que nos resultará bastante agradable.

Esta opción puede no estar disponible en algunos linux con versiones minimalistas de Vim. Sólo tenemos que instalar la versión completa de vim con apt-get install vim-common y escribir (en el modo normal del Vim) :syntax on.

Sin duda, el resaltado de sintaxis es algo muy valioso para el programador.

Operaciones básicas del editor

Una vez tengamos nuestro texto escrito, necesitaremos saber como realizar algunas operaciones como guardar fichero, salir del editor, etc...

Como hemos dicho antes, para realizar operaciones que no son de escribir en el fichero, necesitamos entrar en el modo normal (pulsando ESC si estamos en el modo edición) y a continuación los atajos que queramos:

Secuencia Significado ¡Mnemotécnica!
:q Salir del editor sin guardar quit
:q! Salir del editor sin guardar ni pedir confirmación quit ya!
:wq! Salir del editor guardando sin pedir confirmación write & quit ya!
:w f2.txt Guardar en un fichero llamado f2.txt y seguir write en f2.txt
:e f1.txt Cierra el fichero actual y abre f1.txt edit f1.txt

Operaciones básicas de texto

En Vim como en cualquier editor, necesitaremos manipular rapidamente texto, y algo que enseguida se echa en falta en VIM, son las famosas opciones Cortar, Copiar y Pegar.

Con los cursores nos desplazamos por el contenido del fichero hasta llegar al inicio de la zona que queremos copiar. Pulsamos ESC (si estamos en el modo edición) y la tecla V para entrar en el modo visual y nos desplazamos hacia el final de la zona que queramos copiar. Se verá que se remarca en otro color la zona seleccionada.

Una vez tengamos la zona a copiar seleccionada, sólo tenemos que pulsar C (para cortar) o Y (para copiar). Nos aparecerá abajo un mensaje X lineas copiadas.

Ahora sólo tenemos que desplazarnos a donde queramos pegar ese fragmento y pulsar (como siempre, en el modo normal, no en el modo edición) la tecla P (pegar).

Existen otras formas de copiar (por método de buffer, por ejemplo) con la secuencia "buffernyy para copiar y "bufferp para pegar, pero suelen ser más complejas.

Veamos más operaciones de texto:

Secuencia Significado ¡Mnemotécnica!
dd Suprimir línea actual al buffer (p para pegar) delete
u Deshacer el último cambio en el fichero undo
CTRL+R Rehacer el último cambio en el fichero redo
guu Convertir a minusculas la línea actual lowercase
gUU Convertir a mayúsculas la línea actual UPPERCASE
:num Posicionarse en la línea num del fichero
gg Posicionarse al principio del fichero
G Posicionarse al final del fichero
ga Muestra código ASCII, hex y octal del caracter actual

Operaciones de búsqueda y sustitución

Otra función que solemos echar de menos enseguida es la de buscar algún texto, reemplazar, etc. En vim no puede faltar esa opción, con sus respectivas mejoras y añadidos:

Para buscar un texto, escribimos (en modo normal, pulsando antes ESC si estamos en modo edición) la secuencia /palabra. Veremos que se resalta la palabra encontrada (o nos avisa de que no existe). Entonces podemos seguir buscando la próxima coincidencia pulsando n o buscarla hacia detrás pulsando N.

Para sustituir un texto debemos escribir la secuencia :%s/texto1/texto2/g, donde texto1 es el texto a buscar y texto2 el texto que será reemplazado. Si incluimos la g final (global), sustituirá todas las coincidencias que encuentre, sino sólo la primera que encuentre.

Preferencias

Hay ciertas opciones que denominamos preferencias porque son detalles que podemos fijar permanentemente (o no) como por ejemplo que queremos mostrar el numerado de línea (como en los ejemplos de imagen), el resaltado de sintaxis, etc...

Ello lo podemos hacer mediante comandos desde el modo normal o en el fichero ~/.vimrc (sin el símbolo :), donde se guardan las preferencias del usuario.

Comando Significado
:set ts=3 Fija los tabulados a 3 espacios
:set sw=3 Fija los indentados a 3 espacios
:set number/nonumber Activa/desactiva el numerado en los ficheros
:set backup/nobackup Activa/desactiva la copia de seguridad automática
:set directory=dir Fija la carpeta donde se harán las copias
:syntax on/off Activa/desactiva el resaltado de sintaxis
:color esquema Cambia color del vim (evening, darkblue, desert, elflord, koehler, morning...)
:set cindent Activa indentado automático
:set mouse=a/mouse= Activa/desactiva el uso del ratón
:set paste/nopaste Activa/desactiva el modo pegar texto literalmente
:spell Activa el corrector ortográfico
:setlocal spell spelllang=es Activa el idioma español del corrector ortográfico
:set spellfile=~/.vimdic Fija diccionario de palabras desconocidas

Ejecución y comandos externos

Es posible que mientras estamos editando un fichero, necesitemos ejecutar un comando (por ejemplo, un ls para ver los archivos), esto se puede hacer escribiendo en el modo normal :!comando, en nuestro ejemplo: :!ls.

También se puede hacer una pausa en la edición escribiendo :shell para realizar alguna operación y cuando la terminemos, escribir exit y volver al editor. Incluso los comandos :make y :cc se pueden utilizar para ahorrarnos el estar saliendo del editor para hacer makes o ver el último error que nos dió.

Características avanzadas

En Vim podemos realizar una separación visual de forma que podamos editar dos (o más) ficheros simultaneamente. Para ello escribiremos :split fichero.ext con lo que dividirá la pantalla mostrando los dos ficheros para edición.

Es posible realizar un :vsplit fichero.ext para realizar una división vertical en lugar de horizontal, e incluso realizar más divisiones posteriormente, alternando para conseguir más divisiones, siempre y cuando nuestra resolución nos permita.

Para cambiar entre subdivisiones, pulsamos CTRL+W y presionamos la flecha de los cursores a donde queramos dirigirnos.

También es posible crear pestañas (tal como lo hace Firefox) para tener varios ficheros. Para ello escribimos :tabnew seguido del nombre del fichero a crear. Para movernos entre pestañas escribimos :tabn, pulsando gt o utilizando el ratón (activando el previo set mouse=a) para usar los iconos de texto superiores.

Como se puede ver, Vim tampoco carece de un sistema de autocompletado, por si no recordamos los nombres de nuestras variables o de las funciones que queremos utilizar. Basta con escribir el caracter inicial y pulsar CTRL+N. Nos aparecerá un panel de sugerencias coincidentes para elegir.

Otras operaciones avanzadas pueden ser:

Comando Significado
=G Indenta automáticamente todas las líneas de un fichero
{} Detecta donde está la llave mal cerrada del párrafo actual
:g/^\s*$/d Elimina las líneas en blanco de un fichero

Existen muchísimas operaciones útiles que no están en este manual, todo es cuestión de ir indagando un poco.

Para aquellos que les haya picado la curiosidad pero no se atreven a utilizar aplicaciones que no tienen entorno gráfico, Vim tiene un hermano gemelo, llamado gVim (graphic vim), una aplicación gráfica para windows, que ayudará a aquellos que quieran iniciarse con este magnífico editor.

Comparte este artículo
Sobre el autor de Emezeta

Escrito por , más conocido como Manz. Es Ingeniero-Técnico en Informática de Gestión por la Universidad de La Laguna y residente en Santa Cruz de Tenerife.

34 comentarios de lectores
Interesante
Marino Marino Domingo, 14 de diciembre de 2008, 10:40
1
Magnífica guía sobre el VI Mejorado (VI Improved). Soy un declarado fan de él, y ahora descubro cosas como el "ir al final de fichero" que comentas. Soy de los que utilizan el $ para ir al final de la linea, o el :$ para ir al final del fichero. Otra característica importante es la posibilidad de cuantificar cuantas acciones a realizar: por ejemplo, si "x" es borrar el siguiente carácter, escribir 8 y luego pulsar la "x", borrará los 8 siguientes caracteres. Creo que vi (o vim, dependiendo del UNIX) es el primer paquete que instalo en cualquier UNIX al entrar por primera vez, y es que no me acostumbro a los nano o pico que tan de moda se han puesto en los linux.
Responder Permalink URL · Safari 3.2.1 · Macintosh ·
Nemo Nemo Domingo, 14 de diciembre de 2008, 11:54
2
Muy buena guía del vim y muy currado el post. Enhorabuena!
Responder Permalink URL · Internet Explorer 7.0 · Windows XP ·
aladaris aladaris Domingo, 14 de diciembre de 2008, 12:00
3
God Bless Vim
Responder Permalink Mozilla Firefox 3.0.4 · Ubuntu Linux ·
Pablo Morales Pablo Morales Domingo, 14 de diciembre de 2008, 13:57
4
Hay varias cosas que le faltan a esta mini guia. Para un desarrollador algunas cosas importantes son. Dividir la pantalla en dos archivos. ctrl + w + n, y ctrl + w + v Te desplazas entre frames con ctrl + w +w Para cerrar todo o guardar todo :wall :xall :qall Algo importante tambien que falta es el famoso search and replace :1,% s/palabra_a_reemplazar/palabra_final/g El vim es bastante poderoso, hay varias guias de como convertirlo en un IDE, aunque si bien cumple con ciertas cosas el vim es un editor poderoso, pero nunca reemplazara a un IDE
Responder Permalink URL · Mozilla Firefox 3.0.4 · Ubuntu Linux ·
Manz Manz Domingo, 14 de diciembre de 2008, 14:16
5
@Pablo Morales: ¡Probablemente te has despistado! Las tres propiedades que comentas están incluidas en la guía.
Responder Permalink URL · Mozilla Firefox 3.0.4 · Windows Vista ·
rubendomfer rubendomfer Domingo, 14 de diciembre de 2008, 16:42
6
Gran manual :) Gracias!!
Responder Permalink URL · Mozilla Firefox 3.0.4 · Windows XP ·
Andrés M. Andrés M. Domingo, 14 de diciembre de 2008, 21:36
7
Muy buen post, no sabía que se podía hacer tanto con él. Gracias!
Responder Permalink URL · Internet Explorer 7.0 · Windows XP ·
Nesta Nesta Lunes, 15 de diciembre de 2008, 12:47
8
Supongo que si te acostumbras a usar atajos de teclado, es muy rápido de usar, pero no veo que aporte muchas cosas a otros editores de texto muy potentes existen. Para mi la opción más importante en un editor de código es el remarcado de sintaxis, y un punto fuerte a tener en cuenta es que cuando trabajamos con objetos, nos muestre las propiedades y métodos al escribir el carácter de acceso (el punto en Visual Basic, por ejemplo, field.height) en un desplegable.
Responder Permalink URL · Mozilla Firefox 3.0.4 · Windows XP ·
Manz Manz Miércoles, 17 de diciembre de 2008, 19:11
9
Otro detalle interesante (de los muchos existentes) no mencionado en la guía, es la posibilidad de "enrollar" (contraer y desplegar) funciones o métodos de nuestros códigos de programación para así facilitar la codificación de nuestros programas. Podemos activarlo con set foldmethod=syntax, o desactivarlo con set nofoldenable. syntax es un método de "enrollado", sin embargo hay más tipos: indent, expr, manual, etc...
Responder Permalink URL · Mozilla Firefox 3.0.4 · Ubuntu Linux ·
Jairo Jairo Jueves, 19 de febrero de 2009, 15:18
10
Hola que tal?. Soy novato en el arte VIM y he encontrado bastante útil este documento, sobretodo porque estaba buscando un editor versátil para crear mis scripts R y Python. Tal vez seria conveniente colocar una zona de descarga, sabes, para poder llevarlo a casa y estudiarlo mejor. Gracias por compartir esta información.
Responder Permalink URL · Mozilla Firefox 3.0.3 · Linux ·
yojota yojota Martes, 22 de septiembre de 2009, 04:37
11
Muy buen manaul la verdad una guia muy rapida para hacer cosas interesantes con vim
Responder Permalink URL · Mozilla Firefox 3.0.8 · Ubuntu Linux ·
eddiee99 eddiee99 Viernes, 12 de marzo de 2010, 02:56
12
Muy bueno el manual al fin algo que se puede entender, aunque complicado el uso empezare a practicar gracias
Responder Permalink URL · Mozilla Firefox 3.6 · Windows Vista ·
Seven Seven Viernes, 16 de abril de 2010, 13:26
13
Hola Manz, gracias a este manual empecé a usar VIM, así que primero que nada, gracias. También me gustaría agregar un link a la guía de la que me estoy valiendo ahora para aprender más funcionalidades (está en castellano): es.tldp.org/Tutoriales/doc-tutorial-vim/Guia-Vim.pdf (link a la descarga de la guía en formato PDF) Saludos.
Responder Permalink IceWeasel 3.5.2 · Linux ·
Luciano Hillcoat Luciano Hillcoat Jueves, 15 de julio de 2010, 18:58
14
Muchas gfacias por el manual! Está muy bueno. (tu manual y el VIM) Aunque te faltó poner el comando para abrir un archivo desde el VIM.
Responder Permalink URL · Desconocido · Linux ·
Uh Uh Viernes, 23 de julio de 2010, 05:57
15
Muy bueno. Para abrir un archivo: vim (nombre de archivo) Con cd llegas al directorio o carpeta donde está. Saludos y gracias.
Responder Permalink Mozilla Firefox 3.6.7 · Ubuntu Linux ·
Angelverde Angelverde Domingo, 1 de agosto de 2010, 07:02
16
Muy buen post. A pagar penitencia con VIM :D
Responder Permalink URL · Mozilla Firefox 3.6.8 · Ubuntu Linux ·
linux-genesis linux-genesis Domingo, 26 de septiembre de 2010, 06:25
17
Hola, gracias a este articulo pude encontrar una parte esencial de vim que son los menus desplegables de autocompletado. Trabajo con PHP, y estoy iniciandome con symfony. Me gustaria saber si tienes un material para utilizar symfony con VIM, me parece que existen algunos plugins de diccionarios de symfony con vim. Saludos.
Responder Permalink Mozilla Firefox 3.6.8 · Ubuntu Linux ·
Hb Hb Martes, 5 de octubre de 2010, 14:20
18
Exelente¡¡¡ =D
Responder Permalink Mozilla Firefox 3.6.10 · Linux ·
Juan de Dios Juan de Dios Viernes, 18 de marzo de 2011, 13:08
19
Deberias poner una cc para que tus post se vea que son tuyos cuando te los encuentras en otro sitio (p.e: http://yordanisp.blog.com.es/2010/01/18/vim-7777812/comment_ID/15328290/comment_level/1/#c15328290) que da un poco de penita que la misma comunidad de usuarios del software libre no tenga conciencia y solo postee haciendo copy-paste.. o en el caso de que sea al reves y tu te fusiles contenido de otro sitio, pues eso, que para eso estan las CC!! :) vim rulez!!! Un saludo
Responder Permalink URL · Mozilla Firefox 3.6.15 · Ubuntu Linux ·
Manz Manz Viernes, 18 de marzo de 2011, 19:24
20
@Juan de Dios: De hecho, la tiene, al final de la página, tanto en términos y condiciones, como en el enlace Creative Commons. Desgraciadamente, se siguen copiando artículos, a veces sin el conocimiento expreso del que copia (y sin mala intención) y otras veces, todo lo contrario.
Responder Permalink URL · Mozilla Firefox 3.6.15 · Windows 7 ·
Enrique Enrique Lunes, 27 de junio de 2011, 16:55
21
Una guía clarita y concisa para los que, como yo, quieren meterle mano a este potentísimo editor. Gracias Jose ;-)
Responder Permalink URL · Mozilla Firefox 4.0.1 · Macintosh ·
Marco Marco Martes, 5 de julio de 2011, 15:55
22
Me ayudo gracias!
Responder Permalink URL · Chrome 12.0.742.112 · Windows XP ·
Jorge Jorge Martes, 25 de octubre de 2011, 04:28
23
Hola hace un tiempo alguien me mostro cosas bien interesantes que se podían hacer con Vim como colocar texto al inicio de la linea entre un rango de líneas, borrar el primer caracter o el ultimo etc. Supongamos tengo el siguiente texto en vim Línea 1 Línea 2 Línea 3 con :%s/^/# Agrego el caracter # al principio de todas las líneas, ¿Como lo puedo hacer para agregar ese gato para un rango de líneas? me interesa especialmente eso para comentar archivos yaml Adicionalmente desupués como se podria hacer para quitar ese carácter
Responder Permalink Chrome 14.0.835.202 · Linux ·
JorgeRG JorgeRG Lunes, 3 de septiembre de 2012, 15:28
24
Hola, el post tiene un buen tiempo de creado pero aun así quiero decir que está muy bien hecho, aclara unas cuantas cosas que en el manual básico de vim no aparecen. Gracias por el aporte y suerte.
Responder Permalink Mozilla Firefox 15.0 · Windows 7 ·
choos choos Jueves, 15 de noviembre de 2012, 15:50
25
@Nesta: es verdad para los programadores de hoy en dia el resaltado de color es importante y si supieras usar vim sabrias que te da un resaltado de color dependiendo la sintaxis que uses y por otro lado podrias hacer tu propio script para la sintaxis que quieras o usa gvim , saludos
Responder Permalink Chrome 22.0.1229.94 · Linux ·
Ariel Jueves, 28 de marzo de 2013, 20:48
26
Muy buena guía!! Algunos de los tips no los conocía y me resultan muy utiles para trabajar. Muchas gracias por compartirla!
Responder Permalink Mozilla Firefox 19.0 · Ubuntu Linux ·
MrBlogger MrBlogger Miércoles, 17 de julio de 2013, 09:59
27
Definir marcas para saltar de una a otra o no perder el lugar donde estamos editando: m letra -- define una marca con esa letra (tenemos por lo tanto una veintena de marcas posibles) ' letra -- salta a la línea marcada con esa letra '' -- salta a la última linea desde la que se saltó Definir macros (muy potente): q letra -- comienza a grabar TODO lo que hagamos a partir de entonces (cambios de modo de escritura, inserciones, borrados, trabajo con buffers, creado de ventanas, movimientos por el texto, etc). q de nuevo para finalizar la grabación @ letra -- ejecuta la macro (se reproduce todo lo que hayamos hecho durante la grabación).
Responder Permalink URL · Mozilla Firefox 25.0 · Windows 7 ·
MrBlogger MrBlogger Miércoles, 17 de julio de 2013, 10:01
28
Ah, y el punto (.) te permite repetir la última acción que has hecho, que no sé si se mencionó por ahí arriba
Responder Permalink URL · Mozilla Firefox 25.0 · Windows 7 ·
MrBlogger MrBlogger Miércoles, 17 de julio de 2013, 10:13
29
Y por supuesto, el modo visual (se activa usando v -para carácteres- o V -para lineas- desde el modo de comandos), que permite delimitar visualmente el alcance de las acciones que vayamos a ejecutar (búsquedas, sustituciones, sangrados, etc) >> sangra la línea a la derecha 5> sangra 5 líneas a la derecha zt -- desplaza la pantalla de forma que la línea donde está el cursor situado se situe en la parte alta de la pantalla zz -- desplaza la pantalla para que la línea en la que está el cursor ocupe el centro zb -- lo mismo ocupando la líne del fondo
Responder Permalink URL · Mozilla Firefox 25.0 · Windows 7 ·
Juanjo Ironforge Juanjo Ironforge Martes, 23 de julio de 2013, 22:51
30
Te esfuerzas mucho por hacer llegar VIM al corazón de aquellos que le tenemos manía. Creo que voy a volver a darle una oportunidad... aunque ya estoy muy hecho a Nano.
Responder Permalink URL · Chrome 18.0.1025.166 · Android 4 Ice Cream ·
Jonathan Jonathan Lunes, 19 de agosto de 2013, 03:24
31
@Jorge: @Jorge: En lugar de :%s/^/# escribes :1,3%s/^/# y harías exactamente lo mismo pero en las lineas del 1 al 3 =D saludos y que andes bien!!
Responder Permalink Chrome 28.0.1500.95 · Linux ·
cio cio Miércoles, 27 de noviembre de 2013, 05:46
32
saludos, gracias por tan buenos aportes, vim es genial, gran simbolo del poder de la consola. viva el texto plano.
Responder Permalink Mozilla Firefox 27.0 · Linux ·
David Miércoles, 11 de diciembre de 2013, 14:26
33
No me puedo resistir... ¡C no es para cortar! c es para cambiar: borra el texto actual y entrar en modo de inserción. C es para cambiar hasta el final de la línea Para cortar (borrar en terminología Vim) se usa d. (Aunque el articulo es viejo creo que sería necesario corregirlo) (( :help d )) (( :help c )) Vim empieza a ser interesante cuando te sabes los comandos básicos y empiezas a usar plugins. Algunos ejemplos: vundle => Gestor de plugins :D ctrlp => Para abrir ficheros cuando no te sabes la ruta completa. tagbar => Lista de las funciones en el fichero actual vcscommand => Funciones para usar con git, svn, etc ( :VCSVimDiff ?™?) syntastic => Te marca los errores sintácticos en el código (?™?). nerdtree => Navegador de ficheros vim-airline => Barra de estado mejorada vim-signature => Muestra visualmente los marcadores definidos con m
Responder Permalink URL · Mozilla Firefox 25.0 · Linux ·
javier javier Sábado, 26 de julio de 2014, 20:46
34
no se aun como ejecutar con ubuntu
Responder Permalink Mozilla Firefox 30.0 · Ubuntu Linux ·
Publica tu opinión



Acepto las condiciones y políticas de privacidad de este sitio web.
Suscribirme a través de FeedBurner a los nuevos artículos del blog por email.

Previsualización

Aquí se previsualizará su comentario. Revise que sea correcto antes de publicarlo.