vi za preživljavanje — režimi, kretanje i deset komandi koje su dovoljne
Pre nego što bilo šta drugo pročitaš, zapamti ovo:
Esc :q! Enter — izlazak bez čuvanja izmena Esc :wq Enter — snimi i izađi
To je devedeset odsto razloga zbog kojih ljudi traže pomoć oko vi-ja. Ako
si trenutno zaglavljen u editoru koji se otvorio sam od sebe — pritisni
Esc, otkucaj :q! i pritisni Enter. Ostatak lekcije
možeš u miru.
A zašto uopšte učiti editor koji izgleda neprijateljski? Zato što uvek postoji. Na svežoj instalaciji, na minimalnom kontejneru, na tuđem serveru u tri ujutru — nano možda nije instaliran, vi jeste. Ovo nije lekcija o tome kako da postaneš vim korisnik. Ovo je onaj minimum koji te izvlači iz svake situacije.
Zašto je vi čudan: režimi
Skoro svi editori koje znaš imaju jedan režim rada: kucaš i slova se pojavljuju. vi ima više režima, a razlog je istorijski — nastao je kad tastature nisu imale pouzdane Ctrl i Alt kombinacije, pa su same tipke morale da budu komande.
Za preživljavanje su ti dovoljna tri:
- Komandni režim — u njemu editor startuje. Slova nisu tekst, nego
naredbe.
dbriše,xbriše znak,iprebacuje u unos. - Režim unosa — kucanje radi kako očekuješ. Ulaziš sa
i, izlaziš saEsc. - Ex režim — kucaš
:i komanda se ispisuje u dnu ekrana. Tu žive:w,:q, pretraga i zamena.
Esc uvek vraća u komandni režim. Kad ne znaš gde si, pritisni Esc
dvaput. To je nulti refleks — kao pwd kad ne znaš gde si u
fajl sistemu.
Moderni vim u dnu ekrana ispiše -- INSERT -- kad si u režimu
unosa. Ako te dva reda nema, u komandnom si režimu.
Otvaranje fajla
$ vi beleske.txt
Ako fajl ne postoji, vi otvara prazan bafer i napraviće ga tek kad snimiš. Na dnu piše ime i status:
"beleske.txt" 12L, 284B
Na većini distribucija vi je zapravo simbolički link na vim
ili na vim-tiny — što je i lep primer linkova iz lekcije
Inode-ovi i linkovi. Proveri
sa:
$ readlink -f $(which vi) /usr/bin/vim.basic
Deset komandi koje su dovoljne
Sve što sledi kucaš u komandnom režimu. Ako nisi siguran da si u njemu — Esc.
1. i — počni da kucaš
Ubacuje tekst ispred kursora. Postoji i a (iza kursora) i
o (otvara nov red ispod), ali ti je dovoljan i.
2. Esc — prestani da kucaš
3. Strelice — kretanje
Klasični hjkl je efikasniji, ali strelice rade u svakom
modernom vi-ju i jedna briga manje. Ako te zanima: h levo,
j dole, k gore, l desno.
4. x — obriši jedan znak
5. dd — obriši ceo red
Ispred se može staviti broj: 5dd briše pet redova. Obrisano
ide u međumemoriju, pa se sa p ubacuje ispod kursora — što je
zapravo premeštanje reda.
6. u — poništi poslednju izmenu
Može više puta zaredom. Vraćanje poništenog je Ctrl+r.
7. /tekst Enter — pretraga
Traži unapred. n ide na sledeće pojavljivanje,
N na prethodno. Ovo je najbrži način da se nađeš u dugom
konfiguracionom fajlu.
8. :w — snimi
Snima i ostavlja te u editoru. Korisno usred dužeg rada.
9. :q i :q! — izlaz
:q radi samo ako nema nesnimljenih izmena. Ako ih ima,
dobićeš:
E37: No write since last change (add ! to override)
Uzvičnik znači „znam šta radim, odbaci izmene".
10. :wq — snimi i izađi
Isto radi i ZZ u komandnom režimu, bez dvotačke.
To je to. Sa ovih deset komandi možeš da izmeniš bilo koji konfiguracioni fajl na bilo kom serveru.
Još pet koje se brzo isplate
gg— na početak fajlaG— na kraj fajla:42Enter — skoči na 42. red (ovako se lovi red iz poruke o grešci)0i$— početak i kraj reda:%s/staro/novo/g— zameni svuda u fajlu
Poslednja komanda ima istu logiku kao
sed, i to nije slučajnost — sed je nastao iz
istog porodičnog stabla. Ako želiš potvrdu za svaku zamenu, dodaj
c:
:%s/8080/9090/gc
Situacije u kojima ćeš zaista naleteti na vi
Otvorio se sam, a ti nisi tražio
Najčešće preko visudo, crontab -e ili git commit
poruke. Sve troje podrazumevano koriste vi ako promenljiva
EDITOR nije postavljena:
$ echo $EDITOR $ export EDITOR=nano
Prazan ispis znači da nije postavljena. Ako hoćeš trajno, red ide u
~/.bashrc. Ali savet: nemoj bežati od vi-ja na tuđim serverima,
jer tamo tvoj .bashrc ne postoji.
Fajl je samo za čitanje
Otvorio si sistemski fajl bez sudo, sve si izmenio i onda:
E45: 'readonly' option is set (add ! to override)
Ne moraš da izgubiš posao. Ovaj red snima kroz sudo, iz samog vi-ja:
:w !sudo tee % > /dev/null
Zvuči kao magija, ali su to poznate komande: % je ime tekućeg
fajla, sadržaj se šalje kroz tee pokrenut sa
sudo pravima, a ispis se odbacuje u /dev/null. Posle toga vi
pita da li da ponovo učita fajl — odgovori L. Ovo je i lep
podsetnik na lekciju
Piping i redirekcija.
Poruka o swap fajlu
E325: ATTENTION Found a swap file by the name ".sshd_config.swp" Swap file ".sshd_config.swp" already exists! [O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Ovo znači da je prethodna sesija prekinuta — pukla veza, zatvoren terminal, pao server. vi je čuvao radnu kopiju izmena.
- Ako si siguran da niko drugi ne uređuje fajl i da ti izmene ne trebaju:
Dpa nastavi normalno. - Ako su ti izmene bitne:
R, pa snimi, pa obriši.swpfajl. - Ako neko drugi trenutno uređuje isti fajl:
OiliQ, i pitaj kolegu.
Zaostale swap fajlove nalaziš ovako:
$ ls -a /etc/ssh . .. .sshd_config.swp sshd_config ssh_config
Slova se ne kucaju, nego se dešavaju čudne stvari
U komandnom si režimu. Pritisni i. Ako si u međuvremenu
napravio štetu — u više puta.
Druga varijanta: uključen Caps Lock. U vi-ju velika i mala slova su
različite komande, pa J spaja redove umesto da ide dole, a
D briše do kraja reda. Ako se editor „ponaša neobjašnjivo“,
proveri Caps Lock pre svega ostalog.
Kopiranje iz browsera pravi stepenice
ime:
prvo
drugo
trece
Krivo je automatsko uvlačenje koje se primenjuje i na već uvučen tekst. Rešenje pre lepljenja:
:set paste
Nalepi, pa :set nopaste. Neophodno kod YAML fajlova, gde
uvlačenje nosi značenje.
Minimalni ~/.vimrc
Na sopstvenoj mašini, ova četiri reda čine razliku:
set number set hlsearch set ignorecase syntax on
Redom: brojevi redova, isticanje rezultata pretrage, pretraga bez razlike velikih i malih slova, i bojenje sintakse. Namerno ništa više — poenta je da ti vi radi isto i tamo gde ovog fajla nema.
Isključivanje isticanja posle pretrage: :noh.
Kad si zaista u nevolji
Neke sisteme prati samo vi iz busybox-a, bez vim proširenja.
Tamo ne rade ni u kroz istoriju ni :set paste. Ipak
rade: i, Esc, x, dd,
:w, :q! — dakle sve iz spiska od deset.
Ako te zanima da naučiš više, u sistemu već postoji kompletan kurs:
$ vimtutor
Traje oko trideset minuta i radi se direktno u editoru. Nema boljeg utrošenog pola sata za nekoga ko će raditi po serverima. Podsetnik na to kako se čita ostatak dokumentacije je na stranici man.
Kratka referenca
Esc— nazad u komandni režimi— unos tekstax— obriši znak ·dd— obriši red ·p— nalepiu— poništi ·Ctrl+r— vrati poništeno/tekst— traži ·n/N— sledeće / prethodnogg/G— početak / kraj fajla ·:42— na 42. red:%s/staro/novo/g— zameni svuda:w— snimi ·:q— izađi ·:wq— snimi i izađi:q!— izađi bez čuvanja:w !sudo tee % > /dev/null— snimi fajl otvoren bez sudo
Vežba
Napravi bezopasnu kopiju pravog konfiguracionog fajla i radi na njoj:
$ cp /etc/ssh/sshd_config ~/vezba.conf $ vi ~/vezba.conf
Redom:
- Skoči na kraj fajla, pa na početak.
- Pronađi red koji sadrži
Port, bez pomeranja strelicama. - Obriši taj red, pa ga vrati.
- Dodaj na kraj fajla red
#moja izmena. - Zameni svako pojavljivanje reči
yessano, pa sve to poništi. - Izađi bez čuvanja — pa proveri sa diff da fajl zaista nije diran:
$ diff ~/vezba.conf /etc/ssh/sshd_config $
Prazan ispis znači da si sve uradio kako treba.
Poređenje vi-ja sa nano editorom i kad koji ima smisla ima na stranici Tekstualni editori.
Cela lekcija je deo vodiča Linux osnove.
Comments
Post a Comment