Vim para escribir

Muy buenas,

Hoy vengo otra vez con mis dotfiles, de los que ya hablé en una entrada anterior pero quiero tocar un poco en concreto el caso de Vim.

Veis la estructura de directorio aquí:

~/projects/dotfiles/vim (master)$ tree . -a
.
├── .vim
│   ├── ftplugin
│   │   ├── css.vim
│   │   ├── c.vim
│   │   ├── groovy.vim
│   │   ├── html.vim
│   │   ├── javascript.vim
│   │   ├── markdown.vim
│   │   ├── perl.vim
│   │   ├── python.vim
│   │   ├── sh.vim
│   │   └── tex.vim
│   └── spell
│       ├── en.utf-8.spl
│       ├── en.utf-8.sug
│       ├── es.utf-8.spl
│       └── es.utf-8.sug
└── .vimrc

Y podéis navegar aquí:

https://github.com/ekaitz-zarraga/dotfiles/tree/master/vim

Bien partiendo de esto entro un poco a lo que os quiero contar. En lugar de tener modos de ejecución como puede tener Emacs, yo baso mi configuración en el tipo de archivo que estoy editando. Hay muchas formas más de hacerlo, es lo bueno de esto, si tenéis otras me comentáis y las investigo.

Para poder gestionar todo basándome en el tipo de archivo utilizo el plugin filetype que automáticamente cargará los archivos de la carpeta ftplugin dependiendo del tipo de archivo que se abra. Normalmente se basa en la extensión, aunque sabemos que en UNIX no hacen falta, al programar se utilizan y a mí me gusta mantenerlas para saber qué tipo de archivo tengo sin tener que abrirlo (cuando no añado extensión considero que es texto plano sin marcado).

Bien ahora al grano, quiero hablaros del archivo que define el tipo MarkDown. Seguro que ya he hablado de MarkDown antes (aquí, y aquí, por ejemplo) así que no digo nada más del tema. Lo que quiero mencionar es que lo uso para escribir, tanto documentación como texto normal, por lo que me gusta que quede bonito y bien. Me interesa porque puedo convertir a PDF, HTML o cualquier otro formato manteniendo una gran legibilidad en el archivo fuente de MarkDown. Para no perderte en la sintaxis como puede pasar en LaTeX (que también me gusta pero sufre mucho de este efecto, leer fuente se vuelve complicado) y para mantener una experiencia de escritura agradable, trato de mantener varias cosas. Os las desgloso en desde el archivo markdown.md:


Líneas de 80 caracteres como máximo

Así los párrafos no son infumables líneas únicas cuando muestras el archivo. Para enlaces y otro tipo de cosas hay excepciones.
En MarkDown los saltos de línea únicos no se consideran, por lo que nuestro archivo puede tener saltos para hacer el texto más estrecho sin afectar al resultado.
Es cierto que en las tablas afectarían y en otras cosas también, pero se puede desactivar la opción para esos casos.

Esto se realiza de la siguente manera:

" Textwidth for automatic wrap `gq` is formatting operation
setlocal textwidth=79
setlocal formatoptions+=t
setlocal formatoptions-=l

Y además, añado una linea vertical verde para saber cuándo me estoy pasando:

" Highlight where the lines are more than 80 characters wide
setlocal colorcolumn=80
highlight ColorColumn ctermbg=LightGreen

Comprobación de ortografía

Ya hablé de esto aquí.

" Spellcheck in markdown (automatic to english)
setlocal spelllang=en
setlocal spell

Mayúsculas automáticas

Esto se debe a un pique con mi hermana, que me dijo que hay un modo de mayúsculas automáticas en Emacs, e incluso lo publicó en su blog. Pues también se puede hacer en Vim, aunque no es una cosa por defecto, puede configurarse.

" Auto-capitalize script
augroup SENTENCES
au!
autocmd InsertCharPre * if search('\v(%^|[.!?]\_s+|\_^\-\s|\_^title\:\s|\n\n)%#', 'bcnw') != 0 | let v:char = toupper(v:char) | endif
augroup END

Este caso, como casi todo, está cogido de internet. Este lo explico menos y os enseño la fuente porque lo he añadido hace muy poco y no es tan evidente. Esta es la fuente. Básicamente captura las teclas y si la anterior es un punto o encuentra un cambio de párrafo cambia la letra pulsada a mayúsculas.

Syntax Highlighting de Markdown

Nada que decir, te marca con colores lo que haces o te formatea el texto un poco. Muy poco pero ayuda para saber si lo has puesto bien y ayuda a leer, aunque no hace falta. Esta entrada la estoy escribiendo en el editor de wordpress en Markdown y no tengo highlight.

setlocal syntax=markdown

No hay mucho que decir de esta parte del archivo, la verdad. Bastante evidente.

Cosas genéricas para todos los lenguajes

Esto se encuentra en el archivo .vimrc porque es genérico.

Marcado en rojo de los Trailing Spaces y eliminación de sobrantes.

highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

Highlight en búsquedas.

" HighLight search and map CarrierReturn to remove highlight
set hlsearch
nnoremap :noh

Las tabulaciones

Me las coge de forma automática así que no las he configurado, pero suelo hacerlo en el resto de lenguajes.
Están configuradas a dos espacios. Como se suele hacer en HTML u otros. Podría ser algo así:

set tabstop=2 softtabstop=0 expandtab shiftwidth=2
set autoindent

Con esta configuración puedo escribir bastante tranquilo. Podría añadir cosas seguramente pero de momento voy bastante bien. Voy añadiendo cuando se me ocurren o me cuentan y va creciendo, creo que es la mejor manera.

Así da gusto escribir documentos de texto, la verdad.

Espero que os guste por lo menos el enfoque. Recordad, la entrada es estática pero los links no, puede que si venís otro día el archivo de configuración haya cambiado y no coincida con esto.

Si se os ocurren más cosas, tenéis la sección de comentarios más abajo.

Un saludo.

No os pongo links, creo que tenéis para investigar un rato sólo con lo que hay. 😉

Anuncios

4 pensamientos en “Vim para escribir

  1. ¡Interesante entrada! Vim es casi tan chulo como Emacs por lo que veo 😛 En Emacs lo que habría que hacer es asignarle ciertas extensiones a un modo concreto (en este caso sería el modo texto) y luego personalizar el modo con *hooks* para que se activen modos menores automáticamente (autofill, autocapitalize, ispell…). Todo eso, por supuesto, hay que escribirlo en el archivo de configuración. En Lisp :O

    • Porlo que te he entendido dices que tendrías una forma similar a la que yo tengo con el `ftplugin`, ¿no?
      Que sería básicamente arrancar configuraciones por defecto dependiendo del tipo de archivo que estés abriendo.
      Gracias por comentar, a ver si te clavas una entrada así de loca tú y lo ponemos in common. O quizás en un libro?
      😉

      • Es eso exactamente, pero le llaman hook para ir de guays. Lo tengo repartido en diferentes entradas, igual lo combino en una entrada loca 😀

  2. Compilación: escribir en Emacs | Onda Hostil

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