% Linux Installation and Getting Started    -*- TeX -*-
% vi.tex
% Copyright (c) 1992, 1993 by Matt Welsh <mdw@metalab.unc.edu>
%
% This file is freely redistributable, but you must preserve this copyright 
% notice on all copies, and it must be distributed only as part of "Linux 
% Installation and Getting Started". This file's use is covered by
% the copyright for the entire document, in the file "copyright.tex".
%
% Copyright (c) 1998 by Specialized Systems Consultants Inc. 
% <ligs@ssc.com>

\section{Uporaba urejevalnika \texttt{vi}}\label{sec-vi}
%\markboth{Učbenik Linuxa}{Uporaba urejevalnika \texttt{vi}}

\index{vi@\texttt{vi}|(}
\index{tekstovni urejevalnik!definicija}
\index{urejevalnik!definicija}
\textbf{Urejevalnik besedil} (angl.\ text editor) je program, ki se
uporablja za urejanje datotek, ki so sestavljene iz besedila: pismo,
program v C-ju ali sistemska nastavitvena datoteka.  Medtem ko je za
Linux na voljo veliko takšnih urejevalnikov, je edini urejevalnik, ki
ga boste zajamčeno našli na vsakem sistemu Unix ali Linux, urejevalnik
\texttt{vi} -- tako imenovani >>vizualni urejevalnik<< (angl.\ visual
editor).  Urejevalnik \texttt{vi} ni najpreprostejši urejevalnik za
uporabo niti uporaba ni zelo samoumevna.  A ker je \texttt{vi} tako
pogost v svetu Unixa/Linuxa in včasih nujno potreben, si zasluži
tukajšnji opis.

\index{tekstovni urejevalnik!primerjava}
\index{Emacs}
Izbira vašega urejevalnika je predvsem vprašanje osebnega okusa in
stila.  Veliko uporabnikov ima najraje baročni, samoumevni in
zmogljivi \texttt{emacs} -- urejevalnik z več zmožnostmi kot
katerikoli drugi posamični program v svetu Unixa.  Na primer, Emacs
ima vgrajeno lastno narečje programskega jezika LISP in ima mnogo
razširitev (ena od njih je program umetne inteligence, podoben Elizi).
Vendar ker je Emacs s svojo podporo relativno velik, morda na
nekaterih sistemih ne bo nameščen.  Urejevalnik \texttt{vi}, po drugi
strani, je majhen in zmogljiv, a zapleten za uporabo.  A ko ga enkrat
obvladate, je \texttt{vi} pravzaprav zelo enostaven.

Ta razdelek predstavlja uvod v \texttt{vi} -- ne bomo razlagali vseh
njegovih značilnosti, le tiste, ki jih potrebujete, da začnete.
Pogledate lahko stran referenčnega priročnika o \texttt{vi}, če bi se
radi naučili več o značilnostih tega urejevalnika.  Ali pa preberete
knjigo \emph{Learning the vi Editor} založbe O'Reilly and Associates
ali \emph{VI Tutorial} založbe Specialized Systems Consultants (SSC)
Inc.  Glejte dodatek~\ref{app-info} za informacije.

\subsection{Pojmi}
Ko uporabljate \texttt{vi}, ste v kateremkoli času v enem od treh
načinov delovanja.  Ti načini se imenujejo \emph{ukazni način} (angl.\
command mode), \emph{način za vstavljanje} (angl.\ insert mode) in
\emph{način zadnje vrstice} (angl.\ last line mode).

\index{vi@\texttt{vi}!ukazni način}
Ko poženete \texttt{vi}, ste v \emph{ukaznem načinu}.  Ta način vam
omogoča uporabo ukazov za urejanje datotek ali spremembo v druga dva
načina.  Na primer, če v ukaznem načinu pritisnete \key{x}, pobrišete
znak pod kazalcem.  Tipke s puščicami med urejanjem premikajo kazalec
po datoteki.  V splošnem so ukazi, uporabljani v ukaznem načinu, dolgi
en ali dva znaka.

\index{vi@\texttt{vi}!urejevalni način}
Besedilo zares vrivate ali urejate v \emph{načinu za vstavljanje}.  Ko
boste uporabljali \texttt{vi}, boste verjetno preživeli večino vašega
časa v tem načinu.  Način za vstavljanje poženete z uporabo ukaza, kot
je \key{i} (iz angl.\ >>insert<<, vstavi) iz ukaznega načina.  Dokler
ste v načinu za vstavljanje, lahko vstavljate besedilo v spis na
trenutnem mestu kazalca.  Za konec načina za vstavljanje in vrnitev v
ukazni način, pritisnite \key{Esc}.

\index{vi@\texttt{vi}!način zadnje vrstice}
\emph{Način zadnje vrstice} je poseben način, ki daje določene
razširjene ukaze urejevalniku \texttt{vi}.  Ko vpisujete te ukaze, se
prikazujejo v zadnji vrstici zaslona (odtod ime).  Na primer, ko
vpisujete v ukaznem načinu >>\texttt{:}<<, skočite v način zadnje
vrstice in lahko uporabljate ukaze, kot sta >>\texttt{wq}<< (iz angl.\
write \& quit, za zapis datoteke in izhod iz \texttt{vi}), ali
>>\texttt{q!}<< (za izhod iz \texttt{vi} brez shranjevanja sprememb).
Način zadnje vrstice se v splošnem uporablja za ukaze v \texttt{vi},
ki so daljši kot en znak.  V načinu zadnje vrstice lahko vnesete
enovrstični ukaz in pritisnete \key{Enter} za njegovo izvajanje.

\subsection{Zagon \texttt{vi}}
\index{vi@\texttt{vi}!zagon}
Najboljši način za spoznavanje teh pojmov je, da zaženete \texttt{vi}
in pričnete urejati datoteko.  Primeri >>zaslonov<< spodaj kažejo le
nekaj vrstic besedila, kot da bi bil zaslon visok le šest vrstic,
namesto štiriindvajset.

Skladnja za klic \texttt{vi} je
\begin{tscreen}
vi \cparam{datoteka}
\end{tscreen}
kjer je \textsl{datoteka} ime datoteke za ureditev.

Poženite \texttt{vi} z vnosom
\begin{tscreen}
/home/larry\$ \emph{vi test}
\end{tscreen}
za urejanje datoteke \texttt{test}.  Videti bi morali nekaj kot
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
\underline{\~{}} \\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
"test" [New file]
\end{minipage}}\end{tscreen}%endfbox

Stolpec znakov >>\texttt{\~{}}<< nakazuje, da ste na koncu datoteke.
Podčrtaj >>\underline{\texttt{~}}<< predstavlja kazalec.

\subsection{Vstavljanje besedila}

\index{vi@\texttt{vi}!vstavljanje besedila|(}
Program \texttt{vi} je zdaj v ukaznem načinu.  Vnesite besedilo v
datoteko s pritiskom \key{i}, kar postavi urejevalnik v način za
vstavljanje, in začnite tipkati.
% --- dodal
Morda boste trenutno imeli še probleme z vnosom šumnikov, odvisno od
vaše distribucije in tega, kako ste nastavili tipkovnico.  Če imate
tovrstne težave, pišite >>\texttt{CSZ}<< namesto >>\texttt{ČŠŽ}<<.
Ureditev vnosa slovenskih znakov je podrobno opisana v spisu Slovenian
HOWTO, glejte dodatek~\ref{app-info} za informacije o tem, kje ga
dobite.

\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
Zdaj je čas za vse dobre može, da pridejo pomagat zabavi\underline{.} \\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{} 
\end{minipage}}\end{tscreen}%endfbox

Vpišite toliko vrstic, kot želite (po vsaki pritisnite \key{Enter}).
Napake lahko popravite z \key{Backspace}.

Za konec načina za vstavljanje in vrnitev v ukazni način pritisnite
\key{Esc}.

V ukaznem načinu lahko uporabljate tipke s puščicami za premikanje po
datoteki.  (Če imate le eno vrstico besedila, bo poskus uporabe tipk s
puščicama navzgor ali navzdol verjetno povzročil le, da vam bo
\texttt{vi} zapiskal.)

Poleg ukaza \texttt{i} obstaja še precej drugih načinov za vstavljanje
besedila.  Ukaz \texttt{a} vstavi besedilo, začenši za trenutnim
položajem kazalca, namesto na trenutnem položaju kazalca.  Na primer,
uporabite levo puščico za premik kazalca med besedi >>dobre<< in
>>može<<.
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
Zdaj je čas za vse dobre\underline{\ }može, da pridejo pomagat zabavi.\\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{} 
\end{minipage}}\end{tscreen}%endfbox
Pritisnite \key{a} za začetek načina za vstavljanje, napišite
>>\texttt{figa}<< in potem pritisnite \key{Esc} za vrnitev v ukazni
način.
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
Zdaj je čas za vse dobre figa\underline{m}ože, da pridejo pomagat zabavi.\\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{} 
\end{minipage}}\end{tscreen}%endfbox

Za začetek vstavljanja besedila v naslednjo vrstico uporabite ukaz
\texttt{o}.  Pritisnite \key{o} in vnesite še vrstico ali dve:
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
Zdaj je čas za vse dobre figamože, da pridejo pomagat zabavi.\\
Potem bomo šli ven na pizzo in pivo\underline{.} \\
\~{} \\
\~{} \\
\~{} \\
\~{}
\end{minipage}}\end{tscreen}%endfbox

% Remember that at any time you're in command mode (where commands such
% as \texttt{i}, \texttt{a}, or \texttt{o} are valid), in insert mode (where
% you're inserting text, followed by \key{esc} to return to command
% mode), or in last line mode (where you're entering extended commands,
% as discussed below).
\index{vi@\texttt{vi}!vstavljanje besedila|)}

\subsection{Brisanje besedila}
\index{vi@\texttt{vi}!brisanje besedila|(}
Ukaz \texttt{x} v ukaznem načinu pobriše znak pod kazalcem.
Če petkrat pritisnete \key{x}, boste končali z:
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
Zdaj je čas za vse dobre figamože, da pridejo pomagat zabavi.\\
Potem bomo šli ven na pizzo in\underline{\ } \\
\~{} \\
\~{} \\
\~{} \\
\~{} 
\end{minipage}}\end{tscreen}%endfbox
Zdaj pritisnite \key{a} in vstavite nekaj besedila, nato pa \key{Esc}:
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
Zdaj je čas za vse dobre figamože, da pridejo pomagat zabavi.\\
Potem bomo šli ven na pizzo in dietno kokto\underline{.}\\
\~{} \\
\~{} \\
\~{} \\
\~{} 
\end{minipage}}\end{tscreen}%endfbox

Celotne vrstice lahko pobrišete z ukazom \texttt{dd} (se pravi,
dvakrat zaporedoma pritisnite \key{d}).  Če je kazalec na drugi
vrstici in vpišete \texttt{dd}, boste videli:
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
\underline{Z}daj je čas za vse dobre figamože, da pridejo pomagat zabavi.\\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{} 
\end{minipage}}\end{tscreen}%endfbox

Za izbris besede, na kateri je kazalec, uporabite ukaz \texttt{dw}.
Postavite kazalec na besedo >>dobre<<, in vtipkajte \texttt{dw}.
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
Zdaj je čas za vse \underline{f}igamože, da pridejo pomagat zabavi.\\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{}
\end{minipage}}\end{tscreen}%endfbox
\index{vi@\texttt{vi}!brisanje besedila|)}

\subsection{Spreminjanje besedila}
\index{vi@\texttt{vi}!spreminjanje besedila|(}
Razdelke besedila lahko nadomestite z uporabo ukaza \texttt{R}.
Postavite kazalec na prvo črko v >>zabavi<<, pritisnite \key{R}, in
vpišite besedo >>lačnim<<.
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
Zdaj je čas za vse figamože, da pridejo pomagat lačnim\underline{.} \\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{} 
\end{minipage}}\end{tscreen}%endfbox
Uporaba \texttt{R} za urejevanje besedila je podobna ukazoma
\texttt{i} in \texttt{a}, toda \texttt{R} prepiše besedilo, namesto,
da bi ga vstavljal.

Ukaz \texttt{r} nadomesti en sam znak pod kazalcem.  Na primer,
postavite kazalec na začetek besede >>Zdaj<<, in pritisnite \texttt{r},
ki mu sledi \texttt{K}.  Videli boste:
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
\underline{K}daj je čas za vse figamože, da pridejo pomagat lačnim.\\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{} 
\end{minipage}}\end{tscreen}%endfbox

Ukaz >>\texttt{\~{}}<< spremeni velikost črk pod kazalcem iz velikih v
male in obratno.  Na primer, če postavite kazalec na >>d<< v >>Kdaj<<,
zgoraj, in zaporedoma pritiskate \key{\~{}}, boste končali z:
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
KDAJ JE čAS ZA VSE FIGAMOžE, DA PRIDEJO POMAGAT LAčNIM\underline{.} \\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{} 
\end{minipage}}\end{tscreen}%endfbox

Če se velikost slovenskih črk >>čšž<< pri tem ohrani, kot v zgornjem
primeru, jih popravite na roke, denimo z ukazom \texttt{r}.  V tem
primeru boste najbrž želeli prikrojiti svoj sistem po navodilih iz
spisa \emph{Slovenian HOWTO} (glejte dodatek~\ref{app-info}) --
ključna sta predvsem izvoz\index{lupinske spremenljivke!izvoz v
okolje} in nastavitev okoljske spremenljivke, ki določa uporabo
slovenske abecede (\verb|export LC_CTYPE=sl_SI| v lupini
\texttt{bash}).
\index{vi@\texttt{vi}!spreminjanje besedila|)}


\subsection{Ukazi za premikanje kazalca}
\index{vi@\texttt{vi}!premikanje kazalca}
Veste že, kako uporabljati tipke s puščicami za premikanje po spisu.
Poleg tega lahko uporabljate ukaze \texttt{h}, \texttt{j}, \texttt{k}
in \texttt{l} za premikanje kazalca levo, dol, gor in desno, po vrsti.
To je pripravno, če (zaradi nekega vzroka) vaše tipke s puščicami ne
delujejo pravilno.

Ukaz \texttt{w} premakne kazalec na začetek naslednje besede; ukaz
\texttt{b} ga premakne na začetek prejšnje besede.

Ukaz \texttt{0} (to je tipka z ničlo) premakne kazalec na začetek
trenutne vrstice, in ukaz \texttt{\$} ga premakne na konec vrstice.

Ko urejate velike datoteke, se boste želeli pomikati po datoteki po en
zaslon hkrati navzgor ali navzdol.  Pritisk \key{Ctrl-F} premakne
kazalec en zaslon naprej, \key{Ctrl-B} ga premakne zaslon nazaj.

Za premik kazalca na konec datoteke pritisnite \texttt{G}.  Lahko ga
tudi premaknete na poljubno vrstico; na primer, vnos ukaza
\texttt{10G} bi premaknil kazalec na vrstico 10 v datoteki.  Za premik
na začetek datoteke uporabite \texttt{1G}.

Premikalne ukaze lahko združujete z drugimi ukazi, kot so tisti za
brisanje besedila.  Na primer, ukaz \texttt{d\$} pobriše vse od
kazalca do konca vrstice, \texttt{dG} pobriše vse od kazalca do konca
datoteke in tako najprej.

\subsection{Shranjevanje datotek in zapuščanje \texttt{vi}}
\index{vi@\texttt{vi}!shranjevanje sprememb}
\index{vi@\texttt{vi}!zapis sprememb}
\index{vi@\texttt{vi}!zapuščanje}
Urejevalnik \texttt{vi} zapustite, ne da bi naredili spremembe v
datoteki, z uporabo ukaza \texttt{:q!}.  Ko pritisnete >>\texttt{:}<<,
se kazalec premakne v zadnjo vrstico zaslona in boste v načinu zadnje
vrstice.
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
KDAJ JE ČAS ZA VSE FIGAMOŽE, DA PRIDEJO POMAGAT LAČNIM.\\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
:\underline{\ }
\end{minipage}}\end{tscreen}%endfbox
V načinu zadnje vrstice so dostopni nekateri razširjeni ukazi.  Eden
od njih je \texttt{q!}, ki zapusti \texttt{vi} brez shranjevanja.
Ukaz \texttt{:wq} shrani datoteko in potem zapusti \texttt{vi}.  Ukaz
\texttt{ZZ} (iz ukaznega načina, brez >>\texttt{:}<<) je ekvivalenten
ukazu \texttt{:wq}.  Če datoteka ni bila spremenjena od zadnjega
shranjevanja, le zapusti urejevalnik in ohrani čas spremembe datoteke.
Ne pozabite, da morate po ukazu, vnešenem v načinu zadnje vrstice,
pritisniti \key{Enter}.

Za shranitev datoteke brez zapuščanja \texttt{vi} uporabite \texttt{:w}. 

\subsection{Urejanje druge datoteke}
\index{vi@\texttt{vi}!preklop datotek}
Za urejanje druge datoteke uporabite ukaz \texttt{:e}.  Na primer, za
prenehanje urejevanja datoteke \texttt{test} in urejevanje datoteke
\texttt{foo} uporabite ukaz
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
KDAJ JE ČAS ZA VSE FIGAMOŽE, DA PRIDEJO POMAGAT LAČNIM.\\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
:\emph{e foo}\underline{\ }
\end{minipage}}\end{tscreen}%endfbox
Če uporabite \texttt{:e}, ne da bi najprej shranili datoteko, boste
dobili sporočilo o tovrstni napaki
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
No write since last change (":edit!" overrides)
\end{minipage}}\end{tscreen}%endfbox
kar pomeni, da \texttt{vi} noče urejevati nove datoteke, dokler ne
shranite prvotne.  Na tej točki lahko uporabite \texttt{:w} za
shranitev prvotne datoteke in potem uporabite \texttt{:e}, ali pa
lahko uporabite ukaz
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
KDAJ JE ČAS ZA VSE FIGAMOŽE, DA PRIDEJO POMAGAT LAČNIM.\\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
\~{} \\
:\emph{e! foo}\underline{\ }
\end{minipage}}\end{tscreen}%endfbox
Klicaj >>\texttt{!}<< pove urejevalniku \texttt{vi}, da to res
mislite -- urejevanje nove datoteke, ne da bi shranili spremembe
v prvotno.

\subsection{Vključevanje drugih datotek}
\index{vi@\texttt{vi}!vključevanje datotek}
Če uporabite ukaz \texttt{:r}, lahko v trenutno datoteko vključite
vsebino druge datoteke.  Na primer, ukaz
\begin{tscreen}
:\emph{r foo.txt}
\end{tscreen}
vstavi vsebino datoteke \texttt{foo.txt} v besedilo na mestu
kazalca.

\subsection{Poganjanje lupinskih ukazov}
\index{vi@\texttt{vi}!lupinski ukazi iz}
V urejevalniku \texttt{vi} lahko poganjate tudi ukaze ukazne lupine.
Ukaz \texttt{:r!} deluje kot \texttt{:r}, a namesto da bi prebral
datoteko, vstavi izhod danega ukaza v vmesni pomnilnik na trenutnem
mestu kazalca.  Na primer, če uporabite ukaz
\begin{tscreen}
:\emph{r! ls -F}
\end{tscreen}
boste končali z
\begin{tscreen}\fbox{\begin{minipage}{0.8\textwidth}
KDAJ JE ČAS ZA VSE FIGAMOŽE, DA PRIDEJO POMAGAT LAČNIM.\\
pisma/ \\
razno/ \\
spisi\underline{/} \\
\~{} \\
\~{} 
\end{minipage}}\end{tscreen}%endfbox

Lahko se tudi >>preselite<< v ukazno lupino iz urejevalnika
\texttt{vi}, z drugimi besedami, poženete ukaz iz njega in se vrnete v
urejevalnik, ko ste končali.  Na primer, če uporabite ukaz
\begin{tscreen}
:\emph{! ls -F}
\end{tscreen}
se bo ukaz \texttt{ls -F} pognal in bo rezultat prikazan na zaslonu,
a ne bo vstavljen v datoteko, ki jo urejate.  Če uporabite ukaz
\begin{tscreen}
:\emph{shell}
\end{tscreen}
bo \texttt{vi} zagnal izvod ukazne lupine in vam omogočil, da začasno
postavite \texttt{vi} >>na čakanje<<, dokler izvajate druge ukaze.  Za
vrnitev v \texttt{vi} se le odjavite iz ukazne lupine (z uporabo ukaza
\texttt{exit}).

\subsection{Iskanje pomoči o \texttt{vi}}
Urejevalnik \texttt{vi} ne ponuja dosti na področju interaktivne
pomoči (večina programov za Linux ne), a vedno lahko preberete stran
priročnika za \texttt{vi} (z ukazom \texttt{man vi}).  Urejevalnik
\texttt{vi} je vizualni vmesnik za urejevalnik \texttt{ex}; ki ureja
mnoge ukaze načina zadnje vrstice v \texttt{vi}.  Zato poleg branja
strani priročnika o \texttt{vi} poglejte še \texttt{ex}.
\index{vi@\texttt{vi}|)}
