Vim, el $EDITOR (.vimrc)

Estándar

Continuamos con nuestra serie de posts sobre vim, el que espero que sea vuestro editor por excelencia (o por lo menos le hayáis dado una oportunidad). Esta vez me gustaría hablaros sobre algo muy importante para trabajar a gusto con vim, su fichero de configuración, a través del cual modificamos ciertos comportamientos del editor así como sus preferencias principales.

Este fichero se aloja en nuestra carpeta personal en Linux/Unix (no se exactamente dónde está en windows, ya que no lo uso…) y se llama .vimrc. Inicialmente vim trae una configuración que no es muy cómoda (tabuladores de 8 espacios, por ejemplo) y para esto es para lo que nos sirve, además de otra muchas cosas, el fichero de configuración. Las opciones que os adjunto son las que tengo yo configuradas en mi propio .vimrc (cuya dirección está al final de post) y por tanto son las que me parecen más útiles.

Opciones generales

set nocompatible

Esta opción deshabilita el comportamiento que tenía vi para resultar más cómoda y útil la escritura en el editor.

filetype plugin indent on

Activa el uso de plugins en función del tipo de fichero que estemos editando (del lenguaje) además de la indentación basada en ese tipo de lenguaje.

set showmode

Activa en la línea de información de vim un mensaje donde se nos dice en qué modo estamos.

set ruler

Muestra en la línea de estado la línea y la columna del fichero en la que estamos.

set statusline=<formato>

Muestra en la línea de estado un mensaje con el formato que nosotros indiquemos. Tiene mayor prioridad que la información del ruler.

set backup

set writebackup

Si estas opciones están habilitadas, vim creará una copia del fichero original abierto si el buffer en el que está cargado cambia. Cuando el fichero es guardado de formal satisfactoria, el backup antiguo se borra y se crea uno nuevo cuando se vuelve a modificar el fichero.

set backupdir=<directorios>

set backupskip=<expresiones>

set directory=<directorios>

El primero es el directorio en el cual se van a guardar los ficheros backup, aquellos con la ~ en su nombre. A mi no me gusta tenerlos en el sitio donde estoy editando por lo que le hago apuntar a otro directorio. El segundo son una lista de expresiones (comodines de shell aceptados) de ficheros sobre los cuales no quieres tener una copia de seguridad. Por último, la última opción es para decir dónde queremos tener los ficheros swap que crea vim. Estos ficheros son creados con historiales de modificaciones y cambios recientes por si ocurre algún cierre inesperado de vim o se edita el fichero en dos sitios a la vez, para no perder posibles cambios.

set hidden

Activa la posibilidad de que un buffer esté oculto. Es decir, que cuando no se esté viendo en ningún sitio siga estando en la lista de buffers.

set wildmenu

set wildmode=<modo>

Activa el menú avanzado de autocompletado en la línea de ejecución de comandos. Útil cuando estamos abriendo un fichero y no sabemos exactamente su nombre. El otro comando indica el modo en el cual el autocompletado se va a realizar y cómo se va a mostrar la lista de coincidencias.

set mouse=a

Activa el soporte de ratón siempre que sea posible. Nos permite de esta manera seleccionar texto en modo visual con el ratón o cambiar de tab con el propio ratón si la interfaz nos lo permite.

Opciones de búsqueda

set incsearch

Activa la búsqueda incremental, muestra resultados de búsqueda según se escribe.

set nohlsearch

Desactiva el resaltado de todas las opciones coincidentes con el patrón de búsqueda, lo que a mi me parece bastante molesto.

Opciones de escritura de código

syntax enable

Activa el resaltado de código automático.

colorscheme <esquema>

Configura el esquema de colores ha usar en el editor. El esquema que queramos deberá estar instalado en el sistema, habitualmente un fichero alojado en la carpeta ~/.vim/colors o en la carpeta del sistema asignada a vim.

set guifont=<fuente>\ <tamaño>

Establece la tipografía a usar y el tamaño de ésta.

set autoindent

set smartindent

 La primera activa el alineado automático en función de cómo esté alineada la línea anterior, es decir continúa el nivel de indentación. El segundo, sin embargo, trata de aplicar una indentación inteligente en base a palabras clave o inicios de bloque de líneas posteriores. Es decir, si comenzamos un bloque con, por ejemplo, una llave la línea posterior estará tabulada un nivel más.

set showmatch

Activa el resaltado de una pareja de caracteres de apertura y cierre.

set nowrap

Desactiva el comportamiento que hace que las lineas, a pesar de que sean más largas que ancho máximo establecido, se vean completas, pero en líneas distintas. Esta opción va a gustos, pero a mi personalmente me parece bastante confuso tener una línea completa en varias líneas, pero actuando como una única. Si no está activada, sólo se vera en pantalla la parte visible.

set tabstop=n

set softtabstop=n

set shiftwidth=n

set expandtab

Estas son las opciones que más necesitamos cambiar y que más me han costado entender de todas las que os voy a contar hoy, así que intentaré explicarme bien. Tabstop es el número que indica cuantos espacios en el texto se insertarán cuando la tecla tabulador sea pulsada.

Softtabstop es el número que indica cuantos espacios serán eliminados cuando pulsemos la tecla de borrado.

Shiftwidth es el número de espacios colocados por el autoindentado de vim y cuando realizamos los comandos >> y << de sangrado manual de código.

La última de estas opciones nos indica que lo que escribiremos cuando pulsemos el tabulador serán espacios en el texto realmente.

En mi configuración tengo los tres valores a 4 y la opción expandtab activada por lo que no existe ningún tabulador en el texto y cuando se pulsa la barra espaciadora cuatro veces y se pulsa una la tecla de retroceso, se borra un bloque completo de cuatro espacios.

Mapeos de teclas

En la configuración de vim, además de todas estas opciones, podemos definir combinaciones de teclas asociadas a comandos que realicemos muy a menudo. Existen varios tipos de mappings, distinguidos por lo modos en los que surten efecto, entre los cuales destacan:

  • map (equivalente a noremap): funciona en todos los modos.
  • nmap: modo normal.
  • vmap: modo visual.
  • omap: funciona en el momento de espera de un operando, es decir cuando pulsamos un comando que espera un motion (por ejemplo, d).

Todos estos mapeos tienen una sintaxis común: map <combinación> <comando>. Las combinaciones se escriben de la siguiente manera: <C-S-s> sería el equivalente a pulsar Control+Shift+s. Las teclas especiales reciben nombres especiales, algunos útiles son <BS> para retroceso, <CR> para intro, <Space> para tecla espaciadora o <ESC> para escape.

Una de los mapeos que nunca faltan en mis configuraciones de vim es el siguiente:

imap jj <ESC> -> Este mapeo hace que se salga del modo de inserción cuando se pulse dos veces consecutivas la tecla j. Como decía un lector en un comentarios en el post anterior, la tecla escape está muy lejos de la homerow del teclado, por lo que jj es una combinación muy poco habitual de escribir en un fichero de texto y además siempre a mano.

Como veis, la configuración de vim es altamente flexible y nos permite configurar casi cualquier parámetro imaginable. Además mediante el uso de plugins, que veremos en el siguiente post sobre vim, podemos aumentar aún más sus capacidades.

Como referencia podéis encontrar aquí mi fichero .vimrc, además de otros ficheros de configuración, para que le echéis un vistazo o podáis copiaros su contenido como punto de partida para crear el vuestro.

Anuncios

6 comentarios en “Vim, el $EDITOR (.vimrc)

  1. @alex952; Muchas gracias por compartir tus conocimientos, me ha encantado mucho esté tutorial sobre vim. Yo soy una persona amante al modo texto y vim es la ostia, he aprendido mucho con tus apuntes… La verdad es que con netbeans me dormía y estaba buscando algo potente en modo texto. Conocía vim pero debo reconocer que andaba muy verde xD , me haz ayudado mucho con estos apuntes. Vim es lo mio, gracias colega 😉

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s