VIM kaip skaičiuoklė

2010 spalio 12 d. VIM

Ne kartą yra tekę su VIM’u atidarinėti įvairius ne tik programavimui skirtus failus, bet ir CSV, XML ir kitus dokumentus, kuriuose būdavo tekstai su įvairiais skaičiais, sumomis, kiekiais, PVM’ais. Taip pat ir iš interneto atsiųstas HTML ataskaitas, kuriose kartais tam tikrus duomenis tekdavo pačiam paskaičiuoti.

Dažnai tokius dokumentus sunku įkelti į Excel/Spreadsheet programas, ir ten dar kartą perskaičiuoti, palyginti skaičius. Tad vieną dieną pasidomėjau ar pats VIM’as neturi tokių skaičiavimų galimybių tiesiog rašyti lygtis ir gauti atsakymus.

Ir pasirodo turi!

Labai paprastus ir nesudėtingus skaičiavimus galima padaryti su VIM rašymo režime (insert mode) paspaudus Control+R ir = simbolį. Tuomet galima įvesti nesudėtingą lygtį ir VIM’as parodys atsakymą (pvz 20+180*2 parašys į kursioriaus poziciją atsakymą 380). Tačiau tokie skaičiavimai per daug paprasti ir kartais sudėtingesnėms operacijoms to neužtenka.

Tačiau sudėtingesniems skaičiavimams panaudosime VIM’ą ir bc komandą. Prieš pradedant, pasitikrinkite, ar tikrai pas jus instaliuota bc programa (bc – An arbitrary precision calculator language). Su ja galima paskaičiuoti labai tiksliai po kablelio, jeigu reikia, žinoma. Ubuntu operacinėje instaliuoti galite pasinaudoję “Ubuntu Software Center” arba komandinėje eilutėje parašę:

apt-get install bc

Pirmiausia pradėkime nuo paprasto uždavinuko kaip ir prieš tai turėjome (tik kitais skaičiais):

(2 * 250) + 100

Pažymėkime su ‘v’ komanda visą operaciją ir paspauskite ‘!bc’. Tuomet pažymėtas tekstas bus perduotas į bc komandą kuri grąžins mums atsakymą vietoje pažymėto teksto:

600

Internete taip pat esu radęs labai įdomią komandą, kuri gali suskaičiuoti visą eilutę ir parašyti atsakymą nieko nepažymint ir po lygybės ženklo (šią komandą įveskite VIM redaktoriuje):

map gbc yypkA = <Esc>jOscale=2<Esc>:.,+1!bc<CR>kJ

Tarkime turime:

10 + 20 + 30 + 40 + 50

Kursorių palikite bet kur eilutėje kurioje norite atlikti skaičiavimus ir paspauskite ESC klavišą, dvitaškį ir gbc. Jums iš kart bus duotas rezultatas:

10 + 20 + 30 + 40 + 50 = 150

Mano duoti pavyzdžiai yra patys paprasčiausi. Šios komandos gali suskaičiuoti daug rimtesnius uždavinius:

2 * sqrt (2) = 2.82
3 * (2 - 1) + 4.0 ^ 6 = 4099.00
4 / 3 = 1.33
3 + 4 - 2 * (1 / (3 + 2)) = 6.60

Kadangi net pačiame programavime tenka milijonus kartų atsidaryti skaičiuoklę, tai manau man ir tiems kurie programuoja su VIM’u naudinga žinoti, kaip išsisukti be jos.