Vim teksto redaktorius: produktyvumo paslaptys

Kodėl verta mokytis Vim 2024-aisiais?

Kai pirmą kartą atidariau Vim, pajutau panašų jausmą kaip bandydamas suprasti, kaip veikia rubiko kubas – viskas atrodė sudėtinga, nelogiška ir tiesiog bauginanti. Bet štai dabar, po kelių metų, sėdžiu ir rašau šį tekstą būtent Vim redaktoriuje, o mano pirštai šoka per klaviatūrą greičiau nei bet kada anksčiau. Taip, Vim turi mokymosi kreivę, kuri labiau primena statų skardį nei laiptus, bet rezultatas tikrai vertas pastangų.

Daugelis programuotojų klausia: kam mokytis šį senovinį redaktorių, kai turime VSCode, Sublime Text ar JetBrains produktus? Atsakymas paprastas – Vim nėra tik redaktorius, tai filosofija, kaip dirbti su tekstu maksimaliai efektyviai. Kai išmoksti Vim, pradedi galvoti apie teksto redagavimą visiškai kitaip. Nebereikia nuolat siekti pelės, nebereikia kartoti tų pačių veiksmų dešimtis kartų – viskas tampa greitu, sklandžiu judesiu.

Modal redagavimas: kas tai ir kodėl tai genialus išradimas

Pirmasis ir svarbiausias dalykas, kurį reikia suprasti apie Vim – tai modal redaktorius. Skirtingai nei įprasti redaktoriai, kur klavišai visada įveda simbolius, Vim turi kelis režimus. Normal režimas navigacijai ir komandoms, Insert režimas tekstui rašyti, Visual režimas teksto žymėjimui, Command režimas sudėtingesnėms operacijoms.

Pradžioje tai atrodo kaip nereikalingas komplikavimas. Kodėl negaliu tiesiog pradėti rašyti? Bet štai kur slypi magija – kai nebereikia rašyti, jūsų pirštai lieka pagrindiniame klaviatūros bloke ir gali atlikti šimtus skirtingų operacijų nepajudinę rankų. Norite ištrinti žodį? dw. Pakeisti visą sakinį? cis. Nukopijuoti 5 eilutes? 5yy. Viskas vyksta ten, kur jūsų pirštai ir taip yra.

Kai pradėjau mokytis Vim, man užtruko apie savaitę, kol nustojau automatiškai siekti pelės. Dar savaitę, kol pradėjau galvoti „Vim komandomis”. Bet po mėnesio jau negalėjau įsivaizduoti, kaip anksčiau dirbau kitaip. Tai kaip išmokti aklai spausdinti – pradžioje lėčiau, bet ilgalaikėje perspektyvoje neįtikėtinai efektyviau.

Judesiai ir operatoriai: Vim kalba

Vim turi savo kalbą, ir ji tikrai logišką. Komandos susideda iš operatoriaus ir judėjimo. Operatorius sako, ką daryti (trinti, keisti, kopijuoti), o judėjimas – su kuo tai daryti. Pavyzdžiui, d reiškia „delete” (trinti), o w – „word” (žodis). Sujunkite juos – dw – ir ištrinsite žodį.

Štai keletas bazinių judėjimų, kuriuos naudoju kasdien: h, j, k, l – kairė, žemyn, aukštyn, dešinė (taip, pamirškit rodykles). w ir b – į priekį ir atgal per žodžius. 0 ir $ – eilutės pradžia ir pabaiga. gg ir G – failo pradžia ir pabaiga. f ir t – rasti simbolį eilutėje ir šokti prie jo.

Dabar sujunkime tai su operatoriais. d (delete), c (change), y (yank/copy), v (visual select). Galite sukombinuoti bet kurį operatorių su bet kuriuo judėjimu. d$ – ištrinti iki eilutės pabaigos. c3w – pakeisti tris žodžius. y} – nukopijuoti iki pastraipos pabaigos. Matote logiką? Tai kaip lego kaladėlės – išmokus pagrindines dalis, galite kurti beveik bet ką.

Yra ir specialūs operatoriai, kurie veikia su objektais: i (inside) ir a (around). diw – ištrinti žodį, kuriame esate. ci" – pakeisti tekstą tarp kabučių. da{ – ištrinti viską tarp riestinių skliaustų įskaitant juos pačius. Kai pradedi galvoti tokiais „tekstiniais objektais”, redagavimas tampa neįtikėtinai greitas.

Makrokomandos ir kartojimas: automatizacija savo rankose

Viena galingiausių Vim funkcijų, kurią daugelis ignoruoja – makrokomandos. Jei pastebite, kad kartojate tą pačią veiksmų seką, tiesiog įrašykite ją į makrokomandą. Paspauskite q, tada bet kurį raidę (tai bus jūsų makrokomandos pavadinimas), atlikite veiksmus, ir vėl paspauskite q. Dabar galite pakartoti tuos veiksmus su @a (jei įrašėte į „a” registrą).

Pavyzdžiui, dirbu su CSV failu ir noriu kiekvieną eilutę apgaubti kabučių bei pridėti kablelį gale. Įrašau makrokomandą: qa (pradėti įrašymą į „a”), I" (įterpti kabutę pradžioje), Esc, A", (pridėti kabutę ir kablelį pabaigoje), Esc, j (nusileisti žemyn), q (baigti įrašymą). Dabar galiu paleisti 100@a ir automatiškai apdoroti 100 eilučių.

Bet yra dar paprastesnis būdas kartoti veiksmus – taškas (.). Tai vienas mano mėgstamiausių Vim klavišų. Jis pakartoja paskutinį pakeitimą. Jei ką nors ištrinote su dw, galite spausti . ir tas pats veiksmas kartosis. Skamba paprastai, bet praktikoje tai neįtikėtinai galingas įrankis. Esmė – atlikti pakeitimus taip, kad juos būtų galima kartoti. Tai pakeičia mąstymą apie teksto redagavimą.

Paieška, pakeitimas ir regex: tekstinė chirurgija

Vim paieškos ir pakeitimo galimybės – tai kitas lygis. Paprasčiausia paieška – / ir įvedate, ko ieškote. n ir N šokinėja tarp rezultatų. Bet tikroji galia atsiskleidžia su reguliariosiomis išraiškomis ir pakeitimo komandomis.

Komanda :s (substitute) leidžia keisti tekstą. Bazinė sintaksė: :s/kas/kuo/. Bet galite pridėti modifikatorius: g (global – visoje eilutėje), c (confirm – patvirtinti kiekvieną), i (ignore case – ignoruoti didžiąsias raides). Pavyzdžiui, :%s/foo/bar/gc – pakeisti visus „foo” į „bar” visame faile su patvirtinimu.

Reguliariosios išraiškos Vim yra šiek tiek kitokios nei įprastose regex sistemose, bet principas tas pats. Galite ieškoti sudėtingų šablonų ir atlikti masines transformacijas. Neseniai turėjau pakeisti visus email adresus viename faile į nuorodas. Vietoj to, kad rankiniu būdu redaguočiau kiekvieną, parašiau vieną komandą: :%s/\(\w\+@\w\+\.\w\+\)/[\1](mailto:\1)/g. Viena eilutė, ir viskas padaryta.

Dar vienas naudingas dalykas – :g komanda (global). Ji leidžia atlikti operacijas su eilutėmis, kurios atitinka šabloną. :g/TODO/d – ištrinti visas eilutes su „TODO”. :g/error/normal @a – paleisti makrokomandą „a” kiekvienoje eilutėje su „error”. Tai kaip turėti SQL WHERE sąlygą savo teksto redaktoriuje.

Langų valdymas ir failų navigacija

Kai dirbi su keliais failais, Vim langų valdymo sistema tampa neįkainojama. Galite skaidyti ekraną horizontaliai (:split) ar vertikaliai (:vsplit), atidaryti kelis bufferius, naudoti skirteles. Aš paprastai dirbu su trimis vertikaliais langais – kairėje failų medis (naudoju NERDTree pluginą), viduryje pagrindinis failas, dešinėje testai ar dokumentacija.

Tarp langų judėti paprasta: Ctrl+w ir tada rodyklė arba h/j/k/l. Norite padidinti langą? Ctrl+w _ (vertikaliai) arba Ctrl+w | (horizontaliai). Sugrąžinti vienodą dydį? Ctrl+w =. Viskas vyksta nepaliečiant pelės.

Bufferiai – tai atidaryti failai atmintyje. Galite turėti dešimtis bufferių ir greitai tarp jų perjunginėti. :ls parodo visus bufferius, :b su numeriu ar failo dalimi perjungia. Aš naudoju fzf pluginą, kuris leidžia fuzzy search per visus bufferius ir failus projektoje. Tiesiog Ctrl+p, pradedu rašyti failo pavadinimo dalį, ir per sekundę esu reikiamame faile.

Dar vienas naudingas dalykas – žymės (marks). Galite pažymėti vietą faile su m ir raide, o vėliau grįžti su ' ir ta raide. Pavyzdžiui, ma pažymi vietą kaip „a”, o 'a grąžina ten. Yra ir automatinės žymės – '' grąžina į ankstesnę vietą, '. – į paskutinio pakeitimo vietą. Tai kaip turėti laiko mašiną savo redaktoriuje.

Pluginai ir konfigūracija: padarykite Vim savo

Vanilla Vim yra galingas, bet tikroji magija prasideda su pluginais ir konfigūracija. Mano .vimrc failas augo kelerius metus ir dabar jame apie 300 eilučių. Kiekviena eilutė ten yra dėl priežasties – arba tai kažkas, kas man sutaupė laiko, arba pagerinė patirtį.

Pluginų valdymui naudoju vim-plug – paprastas ir greitas. Štai keletas pluginų, be kurių nebegaliu gyventi: fzf.vim – fuzzy file finder, neįtikėtinai greitas failų paieškos įrankis. vim-surround – lengvai keisti apgaubiančius simbolius (kabutes, skliaustelius). vim-commentary – komentuoti kodą su gc. ale – asinchroninis linting ir fixing. coc.nvim – LSP palaikymas, autocomplete, go-to-definition ir kitos IDE funkcijos.

Konfigūruojant Vim, svarbu suprasti, kad nebūtina viską nukopijuoti iš kažkieno kito .vimrc. Pradėkite su minimalia konfigūracija ir pridėkite dalykus, kai jų reikia. Kai susiduri su problema ar nepatogu, ieškoti sprendimo. Taip jūsų konfigūracija augs organiškai, ir žinosite, kam skirta kiekviena eilutė.

Keletas esminių nustatymų, kuriuos rekomenduoju: set number relativenumber – rodo eilučių numerius ir santykinius numerius (lengviau šokinėti). set ignorecase smartcase – paieška ignoruoja didžiąsias raides, nebent jas naudojate. set incsearch hlsearch – rodo paieškos rezultatus realiu laiku ir paryškina. set expandtab shiftwidth=4 tabstop=4 – naudoja tarpus vietoj tab ir nustato įtrauką.

Kaip išmokti Vim: praktiniai žingsniai

Gerai, įtikinau jus pabandyti? Štai mano rekomendacijos, kaip pradėti mokytis Vim nesustabdant viso savo darbo. Pirmiausia, paleiskite vimtutor terminale. Tai interaktyvi pamoka, kuri užtrunka apie 30 minučių ir išmoko pagrindų. Praeikite ją bent kartą, geriau du.

Nepameskite savo produktyvumo iškart perjungdami visą darbą į Vim. Vietoj to, įdiekite Vim pluginą savo dabartiniam redaktoriui. VSCode turi puikų Vim pluginą, IntelliJ IDEA turi IdeaVim. Taip galite mokytis Vim komandų, bet išlaikyti visas IDE funkcijas, prie kurių pripratę. Naudokite tai kelias savaites.

Kai jaučiatės patogiai su baziniais judėjimais ir operatoriais, pabandykite atlikti visą dieną darbo su Vim pluginu. Nestabdykite, kai sunku – tai normalu. Pirmą dieną būsite lėtesni. Bet po savaitės pastebėsite, kad jau nebegrįžtate prie pelės. Po mėnesio Vim komandos taps automatinės.

Dabar galite pabandyti tikrąjį Vim. Pradėkite su minimalia konfigūracija ir vienu projektu. Pridėkite pluginus ir nustatymus, kai jų reikia. Skaitykite kitų žmonių .vimrc failus, bet nekopijuokite aklai – supraskite, ką pridėjote. Žiūrėkite Vim screencasts YouTube’e – yra puikių kanalų, kurie rodo praktines technikas.

Svarbiausias patarimas – būkite kantrūs su savimi. Vim mokymosi kreivė yra statūs, bet kiekviena diena darys jus šiek tiek greitesnį. Po kelių mėnesių žiūrėsite į žmones, naudojančius pelę redaguoti tekstą, ir stebėsitės, kaip jie gali taip lėtai dirbti. Tai kaip Matrix – kai išmoksti, matai kodą visur.

Kai Vim tampa gyvenimo būdu

Po kelių metų su Vim, pastebiu, kad bandau naudoti jo komandas visur. Naršyklėje naudoju Vimium pluginą, kuris leidžia naršyti su klaviatūra. Gmail’e įjungiau klaviatūros trumpinius. Net terminale naudoju vi režimą bash’e. Vim mąstymas tampa universalus – efektyvus judėjimas, minimalūs rankų judesiai, maksimali automatizacija.

Ar Vim tinka visiems? Tikriausiai ne. Jei jums patinka grafinė sąsaja, pelės naudojimas ir vizualūs elementai, galbūt modernūs IDE bus geresnis pasirinkimas. Bet jei vertinate greitį, efektyvumą ir pilną kontrolę, Vim yra neįkainojamas įrankis. Tai investicija į save, kuri atsipirks tūkstantis kartų per karjerą.

Gražiausia Vim dalis – jis niekur nedingsta. Tai ne kažkoks naujas framework’as, kuris bus pasenęs po metų. Vim egzistuoja nuo 1991-ųjų ir bus čia dar ilgai. Įgūdžiai, kuriuos išmokstate, išliks aktualūs. Galite SSH į bet kurį serverį ir rasti ten vi ar vim. Tai universalus įrankis, kuris veikia visur.

Taip kad, jei vis dar svarstote, ar verta mokytis Vim – atsakymas yra taip. Pradėkite šiandien su vimtutor, skirkite 30 minučių. Po mėnesio parašykite man ir pasakykite, kaip sekasi. Lažinuosi, kad jau negalėsite įsivaizduoti darbo be Vim. Sėkmės jūsų kelionėje į produktyvumo nirvana!

Daugiau

Python dataclasses: struktūrizuoti duomenys