27. lokakuu 2010, 18:18

Vim-REPL -liityntä

Emacsin Slime on kaikkien huulilla, kun puhe kääntyy Lispien koodailemiseen. Se on yksinkertaisesti mainiosti toteutettu integraatio, jossa editorissa pyöriteltävää lispiä voi näppärästi muokkauksen jälkeen kääntää vain muokatun funktion verran, ja kokeilla sitä REPLin puolella. Sen toteuttaminen onkin yllättävän näppärää Vimin puolella, kun käytetään hienoa kikkaa, josta en ollut tietoinen.

Ennen kuin kukaan sanoo mitään, REPL ei tarkoita pelkästään tulkattavien kielten interaktiivista shelliä, vaan periaatteessa miltei mikä tahansa kieli voisi halutessaan toteuttaa REPLin. Toiminnallisesti REPLin ja interaktiivisen shellin välillä ei liene mitään eroa, mitä käyttäjään tulee.

Vimille paras yleistys on käyttää screeniä apuna. Yksinkertaisesti käynnistetään nimetty screen-istunto ja sille hyvänniminen ikkuna, ja nyt vimistä voidaan syöttää tähän screen-istuntoon tekstit sellaisenaan ilman leikepöydällä vekslaamista. Törmäsin tähän Clojuren ja eritoten VimClojure-lisäosan myötä, mutta kyseistä osaa en ole vielä asentanut. Pitäisi kyllä, sillä vim ei tunne Clojure-murretta, tai ainakaan en löytänyt sellaista.

Mutta tämä kikka toimii kaiken kanssa! Bash, perl, PHP, Python, Haskell, ruby, lispit… Hitto soikoon, tästä tulee hienoa aikaa. Tämä blogikirjoitus kertoo salat, ja erityisesti slime.vim hoitaa homman kotiin.

Toistan ratkaisun perusidean tässä suomeksi:

  • Käynnistetään shellissä screen-istunto, annetaan sille sessiotunniste -S -flagilla
  • Käynnistetyn istunnon ikkunannimi vaihdetaan <C-a> A -komennolla
  • Käynnistetään istuntoon sitten haluttu REPL tai interaktiivinen shelli, tai vaikka jätetään se bash/zsh päälle, jos sille on määrä koodata
  • Vimin puolella voidaan kirjoittaa koodia, ja kopioida se: "ryap kopioisi kursorin alla olevan kappaleen rekisteriin r
  • Screen ottaa vastaan komentoja, jotka se välittää eteenpäin, joten vimissä kutsumme screeniä:
:call system("screen -S sessio -p ikkuna -X stuff '" . @r . "'")

Screenin lisäkomennot ovat näemmä tuolla -X -flagin, joista en ollut tietoinenkaan, takana. Rekisterin sisältö kannattaa tietenkin escapettaa lainausmerkkien takia, mutta linkitetty slime.vim hoitaa sen kotiin. Se hoitaa myös pari kivaa näppäinyhdistelmää Emacsin Slimen hengessä, joilla on näppärä kyllä tehdä koodia.

VimClojure

Emacsin Slime kääntää koodin jossain vaiheessa, joten en siitä tiedä, miten tämä köyhän miehen Slime sitten oikeasti toteuttaa asiat. Vai pitääkö tässä sitten oikeasti ottaa se VimClojure käyttöön? Onneksi Planet Clojuren käyttäjissä on paljon vimistejä, ja ainakin nämä kaksi postausta auttavat kovasti saamaan jotain aikaiseksi!

Tageja: ,

---
---

---

Aiheen vierestä