Olen tässä viime päivinä aika ajoin pohtinut suhdettani Vimiin, ja että ehkäpä tarvitsen tehokkaamman alustan käyttöä varten. Ainut järkevä vaihtoehto Vimille olisi EMACS.
Teatraalinen ingressi on ehkä iltapäivälehtien tasoa, mutta mikäpäs minua estäisi. Tilanne kehittyi alunperin blogipostauksesta, jossa Lisp-kehittäjä sanoi vaihtaneensa Vimistä Emacsiin paremman Lisp-kehitysympäristön toivossa. Mikäpä olisi Emacsia parempi Lisp-ympäristö indeed? Ei sitä vimscriptiäkään kannata Emacsista käsin kirjoitella. Hän tykästyi siihen varsin kovasti. Mikäs siinä, antaa miehen käytellä.
Googlasin sitten simppeleillä hakusanoilla muutaman blogikirjoituksen, toivoakseni löytää eri ihmisten syitä vaihtaa editoria. Löysin oikein hyviä kirjoituksia, joita luen ja ehkäpä suoraan reflektoin omia mietteitäni tänne. Paras lukutyyli: lue ensin linkistä asia, ja sitten minun “kommenttini” tekstiin.
Emacs-mies testasi Vimiä, eikä tykännyt
Herra, jonka nimi ei nyt artikkelissa näy missään, on Emacs-mies, mutta testaillut Vimiä 8 kuukauden ajan, ja todennut Emacsin paremmaksi. Hän listaa monia hyviä syitä kokemuksilleen.
Ensin hän kuitenkin esittelee syitä ja hypetystä, miksi häntä kiinnosti kokeilla Vimiä. Otetaan esille tuo minun henkilökohtainen suosikkini, Vi-näppäimet. Hän arvostaa ergonomiaa kuten minäkin, mutta kuitenkin nähtävästi 8 kuukaudessa ei aivan omaksuta kotirivin hienoutta. Tai kyseessä on mielipidekysymys.
Hän nostaa Vimin isoiksi puutteiksi huonon koodikontekstin, erityisesti syntaksivärjäyksen ja automaattisen sisennyksen. Olen ymmärtänyt siis asian oikein: Emacsin voimakas funktionaalinen moottori, Lisp, mahdollistaa enemmän ja helpommin. Vimin vimscript varmasti kykenisi vaikka minkälaiseen, mutta se olisi sama kuin kirjoittaa C:llä isoa ohjelmistoprojektia. Funktionaalisella kielellä olisi helppo kirjoittaa mukautuvia parsereita ymmärtämään koodia. Proseduraalinen paradigma ei helpota.
Ja yksi erityisen tärkeä asia: Emacs todella osaa avata useita (oikeita) ikkunoita saman serverin päälle. Tämä olisi asia, johon kiivaasti haluaisin parannusta Vimin saralla. Jakaa bufferit, rekisterit ja muut tauhkat helposti.
Kaiken kaikkiaan herra on tehnyt hyvän taustatutkimuksen Vimin saralle. Emacsissa on valtavasti potentiaalia, mutta kaikki tämä vaatii Lispin omaksumista. Vähän kuten tämän Xmonadin käyttö vaatii Haskellia. Ja hyvin olen pärjännyt.
Toinen, vastaavanlainen tapaus
Kolmisen vuotta sitten kirjoitettu vertailu Emacs and Vim sisältää samanlaisen lähtökohdan kuin ensimmäinen kirjoitelma. Emacs-mies käyttää viikon ajan Vimiä, ja on kirjoittanut hyvän tekstin sitten eroista.
Kirjoittaja kehuu tekstin editoimista ja simppeliä liikkumista superina. En voi väittää vastaankaan. Emacs ei vain pääse samalle tasolle, ja tämän voin sanoa ilman, että olen sitä käyttänyt paria tuntia pidempään. Modaalisuutta ei päihitetä. Emacs Viper-moodin kanssa onkin sitten eri asia…
Kuten edellinen kirjailija, taas autosisennys saa moitteita vimissä. Puutteelliset kehitysvälineet, ja tähän on viime vuosina ainakin vimin postituslistoilla otettu kovasti kantaa. Ja on saatu parannuksia: nykyisin vim tukee perliä, rubya ja pythonia, pian myös javascriptiä vaihtelevin integroinnein. Ja nämä kaikki toisaalta hankaloittavat vimin käyttöä rajoitetuissa ympäristöissä (esimerkiksi jo niinkin vapaassa paikassa kuin yliopiston shellissä vimin tuotteliaisuutta parantavat plugarit voivat jäädä hyllylle, jos se vaatii vaikka python-tulkin ja vielä käännetyn tuen vimille), niin kuitenkin näillä eväillä päästään kohti Emacs-Lispin tasoa.
Kirjailija mainitsee Vimin foldauksen erityisen hienoksi ominaisuudeksi, emacsin vastaaviin nähden. En näe foldinkeja niin hyödyllisiksi itse.
Puhutaan ensin siitä, että Vim noudattaa Unix-filosofiaa paremmin, ja samaan hengenvetoon kehutaan, kuinka Vim sisältää kaiken itsessään: oikoluvut, grepit sun muut. Viimeisenä mainitaan suuri hienous: täydennys. Vimin täydennys on ainakin loistava, ja varmasti Emacs kykenee samoihin toiminallisuuksiin osaltaan.
Ehta tapaus
Kaksi edellistä kirjailijaa ovat kovasti Emacs-miehiä, jotka vain kokeilivat Vimiä, ja kertoivat näistä kokemuksista sitten ihan kiitettävästi. Mutta entäs ne tapaukset, joita minä alunperin olin googlailemassa?
On onneksi ainakin yksi kirjailija, joka on kirjoittanut kahden postauksen parin loistavaa tekstiä aiheesta. Vannoutunut Vim-mies on käyttänyt Emacsia ja jopa vaihtanut siihen. Ensimmäisessä viestissä hän listaa joitain syitä, miksei Emacs ole kiinnostanut aiemmin. Neljässä pallukassa on vähän stereotypiaa ja muutama kuollut pointti: en edes tiennyt, että Emacsin kehitys oli melko jäissä 2000-luvun alkuvaiheessa, kunnes nyttemmin se on ottanut tuulta alleen. Unicode-tuki on toki iso homma, joka on fiksattu vastikään.
Kirjoituksessa paistaa hyvä kokeneisuus ja loistava tulevaisuus. Kuka tahansa tehokäyttäjä, vaihtaessaan editoria toiseen ei tee sitä perättömistä syistä. En voi olla kuin iloinen, jos joku saa parannettua työtehoaan entisestään. Emacsin nätti kustomoitavuus (kaikelle on selkeästi nimetyt lisp-funktiot valmiina bindattavaksi) ja tehokkaat toiminnot (kuten kauniit sisennykset ja toimivat syntaksivärjäykset) toki kiinnostaa minuakin. Lispin opiskelu ja emacsin sisäisen rakenteen omaksuminen taasen vaatii enemmän ja nostaa kynnystä.
Toisessa viestissä kirjailija viestii Vimin puutteita. Näitähän pitää syynätä tarkkaan, ja itse asiassa Zack on monessa asiassa samoilla linjoilla kuin minäkin.
Kirjailija listaa vimin hankalimmat seikat ihan näppärästi: kun Vim aikoinaan noudatti Vi:n jalanjäljillä Unix-filosofiaa, ei se enää voi saada puhtaita papereita tästä. Kieliopit, grepit, nämä kaikki. Miksi? Ja sitten prosessienvälinen kommunikointi, kirjailjan mukaan, on tavattoman vaikeata. Hyviä Vim-Debugger -konnektioita on yritetty tehdä, ja kai ne jotenkin toimivat. Mutta Emacsin voittanutta oheisohjelmistointegraatiossa ei taida näkyä.
Zack antaa noottia vimscriptille. Se toki selvästi häviää Emacs-Lispille joustavuudessa ja monikäytettävyydessä, mutta simppeleissä asioissa oma sisäinen kieli on ihan hyvä. Sitä on hyvin käytetty esimerkiksi syntaksitiedostoihin ja väriteemoihin. Vasta lisäosien kirjoittamisessa sen rajat tulevat vastaan, jonka kirjailijakin oli tiedostanut. Jättäisin vimscriptin perusversion sisään, ja panostaisin esimerkiksi Pythonin parempaan integrointiin lisäosien suhteen. Tämä onkin hyvällä mallilla, mikäli olen nyt asian ymmärtänyt oikein. Python 3:n käyttöä on listoilla paljon pohdittu, en ole sen tarkemmin tutkinut. Pari vuotta tässä asiassa tulee näyttämään ihmeitä. En kyllä pidä siitä, että nykyisellään ollaan lisäilemässä kaikenlaisia kieliä mukaan. Se vain lisää dependenssien lukumäärää ja monimutkaistaa koodirunkoa.
Kirjailija mainitsee Emacsin saavuttamasta asemasta kokonaisena jakeluna. Se toimii Emacsille tosi hyvin, en vain osaa kuvitella Vimiä sellaisena. Kolmannen osapuolen skriptit ovat aina jäljessä tavalla tai toisella. Siitä ei pääse mihinkään.
Loppukaneetti
On todettu, että moderni Emacs syö vähemmän kuin Gvim usein hienoin pluginein. Se myös käynnistyy nopeammin kuin Gvim, jos keskuspalvelin on viritelty toimimaan. Emacsin syntaksivärjäykset ja automaattisisennykset toimivat keskimäärin vimin vastaavia paremmin. Lisäksi Emacsin integraatio ulkomaailman kanssa on parempi, sisäinen skriptaus on tehokkaampaa ja monipuolisempaa, ja lisäksi graafinen puoli tukee useita fontteja samanaikaisesti (asia, jota esimerkiksi LaTeX-koodeissa arvostaisi).
Tiedättekö mitä? Minun pitää asentaa Emacs ja siihen Viper-moodi, ja sitten pohtia ehkä lisää. Kuka tietää, jospa minustakin tulee Emacs-mies jonain päivänä.