25. kesäkuu 2011, 12:13

Vimin kimpussa

Tänään olen viritellyt lisää Vim-alustaa reStructuredText-kirjoittamista ajatellen. Sitä luulisi, että tiivistä tekstiä on helppoa tuottaa ilman kummempia apuja? Sittenpä siirrytään virittelemään entistä enemmän! Vim-debuggeriakin tuli taas käyteltyä. Luulin sen olleen uusi kokemus, mutta jotenkin deja vu vaivasi.

Indent-parannuksia fieldlisteihin rST:ssä

Fieldlist on siis eräänlainen simppeli taulukkorakenne, jossa on helppoa esittää key-content -tyylistä tietoa. Tai minun tapauksessani dialogia. Sen rakenne on seuraavanlaista:

:nimi:     Mikael
:maa:      Suomi
:valuutta: euro

reStructuredText osaa myös useampiriviset selitykset, ja sisäkkäisiä koodilohkoja sun muuta. Ja Vim ei osannut oletusasetuksilla (rST:lle tuli kyllä indent-skripti mukaan) jatkaa sisennystä, jos ensimmäinen rivi alkaa nollasta. Nyt oli minun suunnitelmissa kirjoittaa 80-levyistä tekstiä ja käyttää muotoilijoita (gqgq) hyväkseni. Tätä varten automaattisen sisennyksen pitää olla kunnossa. Ja kyllä näyttää hyvältä, kun tappelin asian kanssa vähän aikaa. Kun laitan vielä textwidth -asetuksen päälle, niin kyllä rivittää tyydyttävästi.

Omia sisennysfunktioita siis rakennellaan ihan funktioiksi, joka palauttaa lukuarvon: montako merkkiä sisennetään. Se käyttää hyväkseen vimin perustyökaluja: hae nykyinen tai edellinen rivi. Loput tehdään tyypillisesti regexpillä.

Täydensin Nikolai Weibullin rst-skriptiä viiden vuoden takaa seuraavalla lisäyksellä suunnilleen sinne keskelle:

" So we'll match lines beginning with a :field: and some whitespace.
" Don't match if 1) no text after field, or 2) text ends with sent-ender.
if line =~ '^:.\+:\s\{-1,\}\S.\+[^.!?:]$'
    return matchend(line, '^:.\{-1,}:\s\+')
endif

Tämä siis päättää sen, että jos repliikkirivi jää kesken (ei pääty lauseeksi) niin sisennetään seuraavaa riviä. Myös tyhjät sisällöt jätetään sellaisenaan. Oletuksena vaikkapa se, että joku hahmottelee puhujia/elementtejä. Vimin oma autoindent ottaa sen jälkeen ohjat muissa tapauksissa, tehden perustason hyvää työtä.

Kamalannäköistä regexpiä, mutta useiden testien jälkeen se näyttää olevan kattava tapaus. Regexpejä testattaessa moni käyttää incsearch -asetusta, minä yleensä luotan :match Error /<pat>/ -kutsuihin. Lopputuloksena on perin tyydyttävä täydennys. Kunpa voisin ottaa siitä helpon videon. Pitäisiköhän aloittaa Youtube-kanava vimcasteille? No ei ehkä tämän takia vielä.

Localvimrc

Localvimrc on hyvä idea, ja toimiikin. Se on hyvin piilotettuja modelinejä; hakemistokohtaisia vimrc-tiedostoja. Toki se aiheuttaa kovan turvallisuusriskin, mutta joskus pitää vain ajatella omaakin etua. Skripti on erinomainen tämmöisiin kirjajuttuihin, joihin haluaa vaikkapa päähenkilöiden nimet maalattuna erottuvaksi. Ei sellaista viitsi globaaleihin konffeihin sulloa.

Mitähän vielä tänään tekisi vimin hyväksi?

Tageja: ,

---
---

---

Aiheen vierestä