Vim - brzi priručnik

1

Vim - brzi priručnik

offline
  • Fil  Male
  • Legendarni građanin
  • Pridružio: 11 Jun 2009
  • Poruke: 14644

VIM



* vi je Visual Editor (otud stoji "vi" - VIsual).
* vim stoji za vi IMproved

Moto: "The best way to learn vi is by using it"

Ko želi da se igra u Windowsovom terminal emulatoru, neka preuzme ovu verziju: gVim 7.4
Link: http://www.vim.org/download.php#pc
* Isprobano i na Windows 8.1 x64

Neće biti uvoda, idemo odmah na akciju bez filozofiranja, sve je isprobano na Linux Mint 16 "Petra", XFCE edicija, u distro je podrazumevano uključena varijanta vim-tiny.


~


Arrow Jednostavno pokretanje vi editora:
vi
vi nekiFajl.txt (otvaranje datoteke unutar vi editora)
vi -r nekiFajl.txt (za oporavak kroz upotrebu swap datoteke)


Arrow Režimi rada:
1) Command Mode - [default] na njega se prelazi pritiskom na taster ESC
2) Insert Mode - na njega se prelazi, između ostalog, pritiskom na taster i. Pored i (koji ubacuje tekst pre kursora), još jedna od varijanti je da se pritisne taster a (ubaciće tekst nakon kursora). U tekstu će biti pomenuto još par komandi koje mogu da aktiviraju insert režim.

* Napomena: prilikom prelaska u ova dva režima nema nikakvog obaveštenja o prelazu: generalno, slabo stoje sa obaveštenjima, podrazumeva se da znaš šta radiš.

Jasno razlikovanje ova dva režima rada je ključ za pravilno razumevanje rada u VIM-u. Spremite se, dakle, na mnogo pritiskanja tastera Escape, jer se gotovo sve radi iz komandnog režima. Režim insert služi samo za ubacivanje teksta, i ništa više, zaboravite stare navike iz drugih editora. Primer radi, ako ste u režimu insert za kucanje i probate da uradite sledeće, to neće biti baš kako ste očekivali:
- pritisak strelice gore daje slovo A, dole-B, levo-D, desno-C (pri čemu se ne napušta insert režim); dakle, nema navigacije po tekstu iz režima insert.
- taster backspace neće da briše tekst ulevo, već će pomerati kursor ulevo, sekvencijalno, pritisak po pritisak tastera, do prvog unetog teksta tekuće sesije (trenutnog insert režima). Ako se tako pozicioniramo na prvi karakter tekuće sesije, tasterom backaspace i probamo da unesemo neki tekst, isti će biti prepisan novim tekstom.
- skrol točkićem miša ne radi kako ste možda očekivali, skrol gore daje 5 puta vrednost A, na dole - 5 puta vrednost B, a srednji taster ubacuje 5 praznih redova (u komandnom režimu radi skrol gore-dole, ali klik na srednji taster menja početna prva slova paragrafa u vrednosti od linija! Laughing )
- pritisak na Home dugme daje slovo H,
- pritisak na dugme Delete iz režima insert, menja "case" prethodnog karaktera (veliko/malo slovo menja u malo/veliko slovo) + aktivira komandni režim. U komandom režimu Delete briše znakove ulevo!


Arrow Navigacija unutar komandnog režima:
- Navigacija kursora (ako ne rade strelice kursora na tastaturi): h-levo ; j-dole ; k-gore ; l-desno
//radi i batch mode: 20k čini da se pomeriš 20 linija na gore. Batch mode, u principu, se može kombinovati sa komandama, eksperimentišite.

- Navigacija, reči: w-početak sledeće reči ; e-kraj sledeće reči ; b-početak prethodne reči.
//napomena: ovaj režim skače i na specijalne karaktere, ako želimo samo da skače na reči, koriste se uppercase varijante (W, E, B).

- Navigacija, skakanjem:
#G, gde "#" predstavlja neki broj, čini da skočimo na liniju (red) pod tim brojem. Na primer, 45G skače na liniju 45; Samo G skače na zadnju liniju dokumenta.
#|, gde "#" predstavlja neki broj, skače na kolonu, naznačenu tim brojem. Simbol iz komande nije veliko "i", već pipe. Na primer 45| odlazi na 45 kolonu tekuće linije. Kucanjem samo |, dolazimo na početak linije.
( i [ se koriste za skok na prethodni paragraf, a ) i ] za skok na sledeći paragraf.
0 (nula) - skače na početak tekuće linije; $ skače na kraj tekuće linije.
:$ - pozicionira kursor na poslednju liniju u fajlu.
% - skače na zagrade u tekućoj liniji


Arrow Umetanje novih linija:
o - umeće novu praznu liniju (red) ispod tekuće linije i nakon toga aktivira insert režim!
O - umeće novu liniju (red) iznad tekuće linije i nakon toga aktivira insert režim!
// vidi način i sa srednjim tasterom miša iz insert režima.


Arrow Brisanje teksta
a) Brisanje znaka: ESC ; naciljas karakter (strelice ili hjkl ili backspace) ; X ; i (za nastavak pisanja)
b) Batch brisanje karaktera: #x (#-neki broj, pa potom odmah "x" --> obrisaće se ukupno # karaktera nadesno od tekuće pozicije)
c) Brisanje linije: dd //radi i batch mode; 5dd brise sledecih 5 linija (nadole). Radi i kombinacija: dj brise liniju dole (ili d5j - brise 5 linija ispod). Ukoliko držiš taster d, automatski ćeš brisati linije na dole. d radi i sa strelicama na tastaturi d+levo briše znak levo, d+desno briše taster desno i sl.
d) cc briše tekuću liniju (bez markiranja za prepisivanje!) i aktivira insert režim.
e) dw-brisanje jedne reci
f) brisanje ostatka linije uključujući i poziciju na kojoj se nalazi kursor: D (veliko d). Ukoliko smo pozicionirani na kraju linije, brisaće se postepeno karakteri unazad Smile
// Sličan efekat se postiže i komandom d$.
g) :a,bd (gde su a i b dva broja) - briše linije od a zaključno sa b (:1,8d briše prvu liniju, zaključno s osmom, a vidiće se i napomena: 8 fewer lines u donjem levom uglu ekrana).
h) :24,$ d - briše linije od 24 do kraja dokumenta, inkluzivno (dakle, briše se i linija 24).


Arrow Prepisivanje (overwrite) / teksta, karaktera, ...
C (veliko c) markira ostatak linije spremnim za prepisivanje i aktivira insert režim. Napomena, ako pritisnem taster ESC, nakon C, obrisaće se tekst (neće se aktivirati komandni režim Exclamation ). Inače, kada smo u režimo insert i pritisnemo taster ESC, aktivira se komandni režim s kursorom na prethodnom karakteru (sukcesivnim pritiskanjem i + ESC, ćete moći doći do početka linije Laughing ).

c markira neki segment teksta za prepisivanje i aktivira insert režim. Na primer, ako se pozicioniramo na početak neke reči i pritisnemo cw markira se ta reč za prepisivanje. Kada kucamo tekst, prepisuje se samo ta reč, nakon prepisivanja se ostatak pomera udesno.
Za razliku od većine ostalih komandi, gde nema obaveštenja kada se izvrši neka komanda, pri aktiviranju ovde komande se na kraju reči vidi dolar znak ($). cc briše tekuću liniju (bez markiranja za prepisivanje!) i aktivira insert režim.

r prepisivanje karaktera na kome je kursor sa sledećim utipkanim (ne napušta se komandni režim).
R prepisuje sve karaktere tekuće linije (aktivira i insert režim).



Arrow Pretraga (karaktera/teksta...)
f[karakter] - pozicionira kursor na sledeći [karakter] u liniji (kad se dođe do kraja linije, ne prelazi se na sledeću liniju). Na primer, fc će potražiti pojavljivanje karaktera c u tekućoj liniji. Ukoliko želimo da pretražujemo unazad, koristi se uppercase verijanta: F[karakter]
E sad, da ne bi non stop ponavljali fc ili Fc, upotrebićemo ; za ponavljanje pretrage unapred ili , za ponavljanje pretrage unazad.

* - traži sledeće pojavljivanje reči na kojoj je kursor pozicioniran. Nije ograničeno na tekuću liniju, tražiće do kraja fajla (kad dođe do kraja, opet otpočetka).
# - traži prethodno pojavljivanje reči na kojoj je kursor. Nije ograničeno na tekuću liniju, tražiće do početka fajla (a nakon početka, opet otpozadi).

/nekiTekst - pretraga teksta unapred (// ponavlja zadnju pretragu)
?<text> - pretraga teksta unazad (?? ponavlja zadnju pretragu)

Ukoliko želite da tražite dalje zadati pojam, ne pritiskate Enter već n (i to u smeru kako je prvobitno zadato; ukoliko želite obrnut smer, koristite N).


Arrow Zamena (replace)

Biće pomenuta dva tipa, koja sam nazvao S-način i G-način smešak .

[1] S-način

Opšti oblik: :[opseg]s/stari_termin/novi_termin/[cgi]

Opseg:
- brojevi linija (ili opseg dva broja, razdvojenih zarezom ili dvotačkom),
- $ (kraj datoteke),
- . (tekuća lokacija),
- % (tekuća datoteka),
- .,+5 (sledećih 5 linija).

Parametri [cgi] //jedno od ova tri ili ništa
- c, prikaz prompt prozora pre izmena
- g, izmena svih pojavljivanja na liniji
- i, neosetljivost na velika i mala slova pri pretrazi

Primer: :s/stari_termin/novi_termin/g
// tekuća linija

Primer: :%s/stari_termin/novi_termin/g
// celi dokument

[2] G-način

Najbolje ga je objasniti primerom:
:g/Linux/s/nux/ndza/g

Pretražujemo za zadati termin "Linux", i menjamo ga u Lindza. U ovom slučaju ostale reči tipa "Panux" ne diramo, tj. ne menjamo ih Smile

Izuzetak (nisam probao ovo): ako se Panux pojavi na istoj liniji kao i Linux, i on će se izmeniti.

Takođe, mogu se koristiti i specijalne sekvence, regular expression i tako te fensi stvarčice, ali to neće biti obrađeno u ovom tekstu, možda u nekom od dopuna ove teme.


Arrow Iseci, kopiraj i zalepi (cut, copy and paste)

yy - kopira ("yanks") tekuću liniju u bafer.
3yy će da "jakne" 3 linije u bafer počevši od tekuće

p - lepi sadržaj bafera u liniju ispod tekuće.
P - lepi sadržaj bafera u liniju iznad tekuće.

Napomena: linije obrisane komandom dd, odnosno reči obrisane komandom dw takođe završavaju u baferu, pa se mogu zalepiti.

Neko će se zapitati zašto se koristi termin bafer, a ne klibord (clipboard). Caka je u tome što postoji 26 slovno označenih bafera (od a do z) i 9 numeričkih bafera (1-9), tako da ovo treba imati u vidu (u Windowsu prepišete sadržaj clipboarda ako kopirate opet u clipboard, osim ako se ne koristi neki 3rd party clipboard manager). Preko karaktera ", pristupa se ovim lokacijama:

Primer1: "a3yy - jekne tri linije u bafer a, počevši od tekuće (u donjem levom uglu će pisati notifikacija 3 lines yanked).
Primer2: "bp - lepi sadržaj bafera b ispod tekuće linije.


Što se tiče numeričkih bafera, oni imaju malo drugačiju logiku - bafer na lokaciji 1 odnosi se na onaj sadržaj koji je poslednji put kopiran/isečen. Nakon sledećeg sečenja/kopiranja, poslednji sadržaj se ubacuje u poziciju 1, a prethodni sadržaj iz pozicije 1 se prebacuje na poziciju 2.

Shvatili ste, dakle, ako opet štogod kopiramo/isečemo, sadržaj iz lokacije 2 se pomera na lokaciju 3, sadržaj iz lokacije 1 se prebacuje na lokaciju 2, a na lokaciji 1 ostaje sveže kopiran/isečen sadržaj.
Da, i to ste shvatili - na ovaj "numerički način" ne možete birati numerisanu lokaciju da ubacite kopirani/isečen sadržaj - za to služe samo slovni baferi.

Idea Dobra je ideja koja se krije iza ovoga. Ako nešto "jeknete" u memoriju, i zatreba vam kasnije, imate 9 pokušaja da se setite da zalepite Cool Do not forget anything 9 times Mr. Green


Arrow Često korištene "dvotačka-komande" (Colon Commands, Ed/Ex Commands):
:w imeDatoteke --> čuvanje datoteke
:q --> izlazak iz datoteke
:q! --> izlazak iz datoteke poništavajući izmene
:e! --> ponovo učitava dokument, bez čuvanja izmena
:set nu --> prikazuje brojeve linija
:set nonu --> poništava prikaz s brojevima linija
:a,bd (gde su a i b dva broja) - briše linije od a zaključno sa b (:1,8d briše prvu liniju, zaključno s osmom, a vidiće se i napomena: 8 fewer lines u donjem levom uglu ekrana).
:set all - pregled svih podešavanja
:#',#'' co #''' - kopira linije od #' do #'' na lokaciju ispod #''' ; na primer 1,8 co 84 kopira linije od prve do osme, ispod linije 84.
:#',#'' m #''' - premešta linije od #' do #'' na lokaciju ispod #''' ; na primer :1,8 m 99 premešta linije od 1 do 8, na mesto ispod 99.
:n - otvara sledeću datoteku za obradu (ako je otvoreno više datoteka); ako dođemo do kraja niza, :rew "premotava" pokazivač na prvu datoteku.
:args - prikazuje ime tekućeg fajla (ako je otvoren), odnosno sve otvorene fajlove, redom.
:set ic - postavlja pretragu, zadatu preko komande "/" da ignoriše velika i mala slova (/mycity će da pronađe za rezultat i mycity i MyCity i sl.)
:!neka_komanda - izvršavanje komandi bez napuštanja Vi(m)-a.
Primer: :!dir će izlistati direktorijum bez napuštanja programa, :!date će izvršiti shell komadu i prikazati datum...
:sh - pokreće shell. Da bi se vratili u Vim, kucamo exit.


Arrow Još malo komandi

u - poništava (undo) poslednju komandu (ponovni pritisak na taster u će uraditi redo, dakle, poništiti undo)
U - poništava promene nad linijom u kojoj se nalazimo, u tekućoj sesiji !
. (tačka) - ponavljanje zadnje akcije (može se koristiti i batch mode, tipa 10.)
Važi i za uneti tekst, ukoliko ukucamo "MyCity forum" pa Esc i pritiskamo . , tekst će se prikazati više puta kroz linije.
mneko_slovo - markira tekuću liniju pod slovom neko_slovo (od a do z). Na primer ma markira tekuću liniju kao a. Poenta je da možete skoknuti na tu liniju u svaka doba koristeći 'a (tilda+tilda+a) ili umesto broja te linije iskoristiti tu referencu (primera radi, ako ukucamo d'a, briše se ta linija ili ako ukucamo y'a - janknućemo tu liniju u bafer i posle moći da je zalepimo preko p ).
~ (tilda) menja slovni karakter, označen kursorom, iz malog slova u veliko i obrnuto.
ZZ - spašava promene nad fajlom i izlazi iz fajla.
// dok ne bude ostalih dopuna, iščitajte dole literaturu



Arrow LITERATURA za geekove cap cap


Tutorial in flash
Vim documentation
Vi For Smarties + quizz: 1, 2
VIM DE
VIM tutorial
Reference card & Cheat sheet: 1, 2, 3, 4
Video & screencast: 1, 2

~
~
~


Arrow Napomene i Bonus:


- Prazne linije se prikazuju kao tilde (~). Dakle, ne vide se u dokumentu, te ne pokušavajte da ih obrišete.

- Koji su sve klonovi editora vi?
--> STvi (STevie), elvis, vile, vim, nvi, xvi... (evo linkova: 1, 2).

- + U kom smo režimu rada?

- Mnemonik za pamćenje j/k - dole/gore: kada pišemo rukom - j zadire i ispod linije (dakle, kursor dole), a k iznad linija sveske (dakle, gore).

- + Reformatiranje teksta



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12235
  • Gde živiš: Južni pol

Ovaj članak je bio neočekivan. Smile Bravo.

Kaži jesi li pisao ispočetka ili si koristio ono što je Brok ranije radio? Wink

-----------

Samo ne znam kako deluje početnicima. Lično bih to pokušao da malo saberem. Za početak ono najosnovnije, pa onda polako mic po mic ostatak. Može neka osnova da se relativno jednostavno objasni/nauči. Ali i ovo je kul.

-----------

Napomena: ako vim pokrećeš sa "vi" velika je verovatnoća da će se pokrenuti u "vi" kompatibilnom režimu. "vi" kompatibilni režim isključuje mnoge od dodatnih "vim" mogućnosti. Preporuka je da se "vim" pokreće kao "vim". A kad se već pominje pokretanje vima, nije loše pomenuti i mogućnost pokretanja više dokumenata u tabovima.



offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4449

Izvanredno, ovo će mi dobro doći pri nekim sitnijim ispravkama fajlova na Linux-u (da ne bih morao stalno da pokrećem gedit ili neki drugi grafički urednik teksta) Ziveli

offline
  • Fil  Male
  • Legendarni građanin
  • Pridružio: 11 Jun 2009
  • Poruke: 14644

Nisam koristio nista od broka.
Druzio sam se malo s ovim editorom,koristeci Putty preko ssh protokola i dosta stvari se zavrsi uz Vi.Pa reko' - da saberem malo informacija u jednu temu.

Koga ovo zanima,u Literaturi ima flash tutorijal koji pokriva osnove,a direktno na web formi se moze provezbati.

Naravno,knjige i knjige su pisane o ovom mocnom alatu,ovo je prirucnik bez uvoda (za razliku od mojih proslih kilometarskih clanaka) koji time provocira da ga odmah probate i kucate komande uz moto - najbolji nacin za njegovo ucenje je njegova upotreba! Smile

Tako da,bice jos price o ovome,ovde se mogu kaciti i zanimljive kombinacije komandi ili trikovi koje zelite da podelite.

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12235
  • Gde živiš: Južni pol

Ma, opušteno. Samo kažem da je ovo ok kao podsetnik za nekoga ko već ima iskustva sa vi/vim-om, ali nije za početnike. Inače, vim != vi. Čak je i u vi kompatibilnom režimu vim napredniji od tradicionalne vi varijante. Tradicionalni vi izmenjen tek toliko da ga je moguće pokrenuti na modernim Juniks operativnim sistemima se nalazi ovde. Možda nije loša ideja upoznati se direktno sa razlikama.

Koje su tačno razlike? Postoji ih mali milion (Vim dokumentacija se sastoji od stotinjak tekstualnih dokumenata). Jedna od bitnijih je da vi nema mogućnost višestruke undo operacije. Naravno, tradicionalni vi takođe ne podržava horizontalnu/vertikalnu podelu ekrana, označavanje sintakse, tabove, itd, itd. Vim je previše unapređen da bi ga poistovećivali sa tradicionalnim vi editorom. Wink Nvi je, s druge strane, mnogo bliži tradicionalnom vi editoru. A i veća je verovatnoća da se nalazi u repoima popularnih distribucija od tradicionalne vi varijante iz Heirloom projekta pomenute iznad.

Evo da ne bude da samo gunđam:

Slika: Graphical vi-vim Cheat Sheet

offline
  • Fil  Male
  • Legendarni građanin
  • Pridružio: 11 Jun 2009
  • Poruke: 14644

Napisano: 09 Okt 2014 23:44

Tema je tu pa ud'rite,ja cu da pisem kako budem imao inspiracije.A naravno da je Vim miljama iznad tradicionalnog Vi-a. Smile
Sledece na meniju moze biti "visual mode",pa lagano,a ako se jos ko ukljuci u temu,tim bolje.

Inace,tekst je s neba pa u rebra,odmah se moze na razne nacine provezbati ovo dosad napisano,cak i za Linuksase bez iskustva! Smile

Dopuna: 10 Okt 2014 7:31

Osim toga, mozemo da dobijemo feedback iz prve ruke - ELITE, kad nadjes vremena, upali Lindzu i probaj nesto da radis s ovim. Sve je razvrstano po kategorijama sta zelis da uradis, procitaj jednom celi tekst, a drugi put trazi samo ono sta te interesuje (pretraga, brisanje, menjanje case-a, ... ) pa javi utiske kako si se snasao kroz igranje s ovim.

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4449

Prvi put kad sam ušao u Vim bio sam u fazonu , 'wtf, kako se uopšte piše ovde?!' Very Happy

Super članak, skinuću gVim pa ću da vežbam na Vindousu. Jedino mi je komplikovano ovo zamenjivanje Confused

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12235
  • Gde živiš: Južni pol

Vimtutor

Jedan od načina kako se upoznati sa osnovnim vi komandama je i vimtutor (ili gvimtutor za GUI verziju). Vimtutor ima ulogu da vas upozna sa osnovnim vi komandama u interaktivnom okruženju za vežbanje. Kažem "vi", pošto je tutorijal originalno napisan za "vi", a tek kasnije je upakovan za korišćenje sa "vim".

Vim za Windows može imati malo drugačije iskustvo od Vima na drugim platformama. Vim konfiguraciona datoteka za Windows sadrži neka CUA podešavanja koja menjaju ponašanje editora. Srpski prevod za Vim za Windows je već godinama nefunkcionalan. Pa ako planirate da ga koristite, morate obrisati srpski prevod i koristiti ga na, recimo, engleskom. Btw, Vim za Windows dolazi i sa tekstualnom vim varijantom. Instalacija bat datoteka koje omogućavaju njihovo jednostavno korišćenje iz Windows komande linije je jedna od opcija u instaleru. Tačne procedure vam ne mogu napisati u ovom trenutku, ali rekoh da napišem koju reč. Wink

-----------

7 navika za efektivno uređivanje teksta (eng.)



Autor Vima Bram Molenar priča o uređivanju teksta i Vim editoru. Sadrži neke korisne trikove. Inače ovo je nastavak na priču koju je Molenar započeo ovde.

-----------

More Instantly Better Vim

I još. Smile


Damian Conway, "More Instantly Better Vim" - OSCON 2013

offline
  • Binary Panda
  • Pridružio: 21 Okt 2014
  • Poruke: 10
  • Gde živiš: Srbija

Ovo je odličan interaktivan tutorial za Vim: openvim.com/tutorial.html
Takođe, ovo je zanimljiva stvar za učenje samo što je free samo jedan deo, za ostatak treba da se plati, ali opet, mogu se naučiti osnove na zabavan način: vim-adventures.com/

offline
  • Fil  Male
  • Legendarni građanin
  • Pridružio: 11 Jun 2009
  • Poruke: 14644

Primetićeš da sam prvi link okačio u literaturi Smile
A i drugi je zanimljiv Smile

Hvala na doprinosu i dobrodošao na forum Ziveli

Ko je trenutno na forumu
 

Ukupno su 599 korisnika na forumu :: 34 registrovanih, 6 sakrivenih i 559 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 1567 - dana 15 Jul 2016 19:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, 8u47, A.R.Chafee.Jr., AMCXXL, aramis s, bane.gr, comi991, darios, dekao, dragoljub11987, DragonRider, ekser222, Filip Marinković, imperator10, indja, ivica976, KUZMAR, liman, Mali Veseljak, milandlc84.wow, milanstankovic087, Nikica Marinkovic, nikoladi, nuke92, panticstefan53, S-lash, sakota79, shaja1, Skywhaler, stug, vasa.93, Vlad000, vlvl, Wisdomseeker