De VI editor leren gebruiken

ArticleCategory:

Applications

AuthorImage:

[Geen foto beschikbaar]

TranslationInfo:

original in en Ben Y. Yoshino

en to nl Tom Uijldert

AboutTheAuthor:

Abstract:

Dit is een uitleg over het gebruik van vi, geschreven door Ben Y. Yoshino. Het origineel staat op www.eng.hawaii.edu/Tutor/vi.html. Ander lesmateriaal van dezelfde auteur kun je vinden op www.eng.hawaii.edu/Tutor/. We hebben dit artikel op www.rootprompt.org gevonden en publiceren het hier met toestemming van de auteur.

De VI editor is een scherm-georiënteerde editor die door veel Unix gebruikers wordt toegepast. De editor heeft krachtige mogelijkheden voor programmeurs maar veel beginners schrikken er voor terug vanwege de vele mogelijkheden. Deze uitleg is geschreven om beginners bekend te maken met het gebruik van VI maar bevat ook onderdelen die relevant zijn voor ervaren gebruikers. Er worden voorbeelden gegeven en de beste manier om het te leren is door deze voorbeelden na te doen of je eigen voorbeelden uitproberen... Er gaat tenslotte niets boven de eigen ervaring.

ArticleIllustration:

[Illustratie]

ArticleBody:

Regels

In deze uitleg worden de volgende regels toegepast:

^X is een control teken. Indien je bijvoorbeeld ^d ziet in deze uitleg dan betekent het dat je de control- toets ingedrukt moet houden en daarbij de betreffende letter moet indrukken. In dit voorbeeld moet je dus de control-toets indrukken en vervolgens de toets d.

Voordat je begint

Dit gedeelte is niet relevant voor gebruikers van Linux met moderne terminal emulatoren zoals xterm, gnome-terminal, kvt, aterm. Bij deze emulatoren is de shell variabele $TERM al automatisch gedefinieerd op de juiste waarde en hoef je je hier dus niet druk om te maken.

VI gebruikt het scherm volledig dus moet het weten wat voor terminal je hebt.
Vertel allereerst aan je shell wat voor type terminal je hebt (als je niet zeker weet wat voor shell je hebt type dan $ echo $SHELL in). Voor de voorbeelden gebruiken we het type "vt100". Vul hiervoor de waarde in van je eigen terminaltype. Voor de C shell (/bin/csh) is het commando als volgt:

	% set term=vt100
Voor de Bourne shell (/bin/sh) of de Korn shell (/bin/ksh) is het commando als volgt:
	$ export TERM
	$ TERM=vt100
Nu nog de terminal resetten met het commando tset. Het terminaltype is nu (hopelijk) goed ingesteld en je bent klaar om met VI te beginnen.

Het starten van VI

De editor kan een gebruiker nieuwe bestanden laten creëren of bestaande wijzigen. Het commando om VI te starten is $ vi, gevolgd door de naam van een bestand. Om bijvoorbeeld het bestand temporary te bewerken zou je het commando $ vi temporary kunnen intikken, gevolgd door een return of enter. Je kunt VI ook starten zonder een bestandsnaam op te geven maar als je later je werk wilt bewaren zul je toch de naam van een bestand op moeten geven waarin dit kan worden bewaard.

Als je VI voor de eerste keer start zul je een scherm zien met tildes (een tilde ziet er zó uit: ~), links op het scherm. Lege regels na het einde van een bestand worden zo gerepresenteerd. Onder in het scherm zou je de naam van het bestand moeten zien als je die hebt opgegeven en deze al bestaat. Tevens wordt daarbij de grootte van het bestand gegeven, als volgt:

"bestandsnaam" 21 lines,  385 characters
Als het opgegeven bestand niet bestaat dan zal hij melden dat het hier om een nieuw bestand gaat, als volgt:
"bestandsnaam"   [New file]
Als je gestart hebt zonder bestandsnaam op te geven dan zal de regel gewoon leeg zijn. Als je scherm niet dit gewenste resultaat laat zien dan heb je misschien het verkeerde terminaltype gekozen. Tik dan :q in gevolgd door een return om VI af te breken en stel het juiste terminaltype in. Als je niet weet hoe, vraag het iemand anders.

VI afbreken

Nu je weet hoe je VI op moet starten is het wellicht een goed idee om ook te weten hoe je dit weer moet stoppen. VI kent twee gebruiksstanden en om er uit te komen moet je in de command stand (mode) staan. Druk op de Escape-toets of Esc (als je terminal een dergelijke toets niet heeft probeer dan ^[) om in de command stand te komen. Maak je geen zorgen als je al in deze stand was, het indrukken van Escape zal dan hooguit een piep geven van je terminal maar je blijft in dezelfde stand staan.

Het commando om uit VI te komen is :q. In de command stand, tik dubbele punt in, gevolgd door een 'q' en daarna Return. Indien je reeds wijzigingen in het bestand hebt aangebracht dan zal de editor je hierop wijzen en VI niet verlaten. Om deze waarschuwing te negeren kun je VI verlaten zonder wijzigingen op te slaan met het commando :q!.

Uiteraard zul je normaal gesproken de wijzigingen willen bewaren. Het commando om dit te doen is :w. Dit kun je combineren met het verlaten van VI via het commando :wq. Je kunt het bestand tijdens het bewaren een andere naam geven door een bestandsnaam te geven achter het w commando. Je kunt bijvoorbeeld het gewijzigde bestand bewaren onder de naam bestandsnaam2 met het commando :w bestandsnaam2, gevolgd door een Return.

Een andere manier om wijzigingen te bewaren en uit VI te komen is middels het ZZ commando. Dit kun je geven in de command stand en is equivalent met :wq. Indien er veranderingen waren op het bestand zal dit worden bewaard. Het is de eenvoudigste manier om de sessie te beëindigen, slechts twee toetsaanslagen.

De twee standen in VI

Het eerste wat de meeste gebruikers zullen leren is dat VI twee standen heeft, command en insert. De command stand geeft de mogelijkheid voor het geven van commando's om tekst te veranderen. Deze commando's bestaan meestal uit één of twee letters. De insert stand zet alles wat op het toetsenbord wordt ingetikt in het bestand.

VI begint in de command stand. Er zijn diverse commando's die VI in de insert stand zetten. De meest gebruikte hiervan zijn a en i. Die commando's worden hieronder beschreven. Als je eenmaal in de insert stand zit kun je hier uit komen door middel van de Escape toets (en als je die niet hebt zou ^[ ook moeten werken). Je kunt deze toets twee keer achter elkaar aanslaan, dan zal VI zeker in de command stand staan. Het aanslaan van Escape in de command stand zal hem niet uit deze stand halen. De terminal zou wel een piep kunnen geven om aan te geven dat je al in de command stand staat.

Het intikken van een commando in de command stand

Commando's in de command stand hebben meestal het volgende formaat (optionele argumenten staan tussen vierkante haken):
	[aantal] commando [waar]
De meeste commando's zijn één teken lang (inclusief diegene die de Control tekens gebruiken). De in deze paragraaf beschreven commando's zijn de meest gebruikte in VI.

Het aantal wordt ingegeven met een nummer, beginnend met 1 tot 9. Het commando x bijvoorbeeld verwijdert het karakter onder de cursor. Als je 23x intikt in de command stand zal dit commando 23 tekens verwijderen.

Sommige commando's gebruiken een optioneel waar argument, waarin je aan kan geven op hoeveel regels of op welk deel van het document dit commando van toepassing is. waar kan ook een commando zijn dat de cursor verplaatst.

Een aantal eenvoudige VI commando's

Hier een eenvoudige set commando's om de beginnende VI-gebruiker op weg te helpen. Er zijn nog veel meer handige commando's die we verderop zullen behandelen.
a
ga naar de insert stand. De ingetikte letters zullen worden ingevoegd op de plek in de tekst na de cursorpositie. Als je een aantal specificeert zal de ingevoegde tekst zoveel keer herhaald worden ingevoegd.
h
ga met de cursor één teken naar links.
i
ga naar de insert stand. De ingetikte letters zullen worden ingevoegd op de plek in de tekst voor de cursorpositie. Als je een aantal specificeert zal de ingevoegde tekst zoveel keer herhaald worden ingevoegd.
j
ga met de cursor één regel naar beneden.
k
ga met de cursor één regel naar boven.
l
ga met de cursor één teken naar rechts.
r
vervang één teken onder de cursor. Geef een aantal om meerdere tekens te vervangen.
u
maak de laatste wijziging ongedaan. Nog een keer u voert de wijziging weer door.
x
verwijder het teken onder de cursor. Aantal geeft het aantal te verwijderen tekens. De tekens achter de cursor zullen daarbij worden verwijderd.

Tekstbuffers in VI

VI heeft 36 buffers voor het opslaan van tekst en ook nog een algemene buffer. Iedere keer dat een stuk tekst wordt verwijderd of yanked (gekopieerd) uit een bestand, wordt het in de algemene buffer gezet. De meeste VI gebruikers gebruiken de andere buffers nauwelijks en kunnen daar prima mee toe. Het stuk tekst kan echter ook in een andere buffer worden gezet als je dat opgeeft. Een dergelijke buffer wordt gespecificeerd met het " commando. Na het intikken van " kan je een letter of cijfer opgeven die de buffer specificeert. Bijvoorbeeld het commando "mdd gebruikt het buffer m waarbij de laatste twee letters staan voor het commando "verwijder de huidige regel". Op dezelfde manier kan tekst wederom worden toegevoegd met de p en P commando's. "mp voegt de inhoud van buffer m toe aan de tekst na de huidige positie van de cursor. Bij ieder commando uit de volgende twee paragrafen kan een buffer worden gespecificeerd voor tijdelijke opslag van tekst.

Kopiëren en verwijderen

Het gebruikelijke commando voor het verwijderen van tekst is d. Het commando verwijdert tekst uit het bestand. Het kan vooraf worden gegaan door een aantal en gevolgd door een verplaatsingscommando. Als je het commando verdubbelt zal het de hele regel verwijderen. Hieronder een aantal combinaties:
d^
verwijderd tekst vanaf de cursor tot aan het begin van de regel.
d$
verwijderd tekst vanaf de cursor tot aan het einde van de regel.
dw
verwijderd tekst vanaf de cursor tot aan het einde van het woord.
3dd
verwijderd drie regels vanaf de huidige regel naar beneden.
Ook is er nog het y commando (kopiëren) die net als het d commando werkt maar de originele tekst in het bestand laat staan.

Toevoegen

De commando's om tekst toe te voegen zijn respectievelijk p en P. Het verschil zit in de werking ten opzichte van de cursor. p voegt de tekst uit de buffer toe achter de cursorpositie, terwijl P dit doet voor de cursorpositie. Aantal voor het commando zal de tekst aantal keren invoegen.

Het formatteren van code en dit controleren

VI biedt een aantal mogelijkheden voor programmeurs om hun code netjes te formatteren. Er is een variabele die je kunt definiëren voor het inspringen van code op ieder niveau. Zie voor het activeren hiervan het gedeelte over het aanpassen in deze uitleg. Het commando om bijvoorbeeld 4 tekens in te springen is :set sw=4.

De volgende commando's laten je regels inspringen of juist terugspringen en men kan vooraf een aantal specificeren:

>>
Laat de huidige regel één niveau verder inspringen.
<<
Laat de huidige regel één niveau terugspringen.
VI heeft nog een handige mogelijkheid om je programma te controleren op haken of accolades die niet gepaard voorkomen. Het % commando zal op zoek gaan naar de haak of accolade die hoort bij het teken waar de cursor op dat moment op staat. Plaats de cursor op een haak of accolade en gebruik het % commando om de cursor te verplaatsen naar het bijbehorende teken. Dit is handig voor het opsporen van code met haak- of accolade-openen zonder bijbehorende haak- of accolade-sluiten. Als VI het bijbehorende teken niet kan vinden dan zal hij een piep geven om je hierop te attenderen.

Zoeken op tekst en tekens

VI kent twee soorten zoekopdrachten: op tekst en op tekens. Voor het zoeken op tekst hebben we de / en ? commando's. Bij het starten van deze commando's zal dit getoond worden op de laatste regel van het scherm, waar je vervolgens de tekst in tikt waarop je wilt gaan zoeken. Beide commando's verschillen alleen in de richting waarin ze zoeken. / zoekt naar voren (onderen) in de tekst, terwijl ? achterwaarts zoekt. De commando's n en N herhalen de laatste zoekopdracht in respectievelijk dezelfde richting of in de omgekeerde richting. Sommige tekens hebben een speciale betekenis in VI en zullen dus in de zoektekst vooraf moeten worden gegaan door een (\) omgekeerde schuine streep om ze hun speciale betekenis te laten verliezen.

Tekens met speciale betekenis:

^
Begin van de regel (aan het begin van een zoekopdracht)
.
Past op één teken.
*
Past op nul of meer van de vorige tekens.
$
Einde van de regel (aan het eind van een zoekopdracht)
[
Begin van een verzameling die past of juist niet past. /f[iae]t bijvoorbeeld past voor elk van de combinaties: fit fat fet. In het volgende voorbeeld /a[^bcd] past alles behalve de combinaties ab ac ad.
<
kan met een omgekeerde schuine streep (\)in een zoekopdracht worden verwerkt voor het vinden van het begin of eind van een woord. Bijvoorbeeld \<de\> vindt alleen het woord de en dus niet deze of onder.
>
Zie de beschrijving van < hierboven.
Het zoeken op een teken gebeurd altijd in dezelfde regel om een teken te vinden wat achter het commando is opgegeven. f en F zoeken beide op een teken op de huidige regel waarbij f vooruit zoekt en F achteruit. De cursor zal worden verplaatst naar het teken dat wordt gevonden.

De commando's t en T zoeken ook op een teken waarbij t voorwaarts zoekt en de cursor voor het gevonden teken zet, terwijl T achterwaarts zoekt en de cursor achter het gevonden teken zet.

De hierboven beschreven zoekopdrachten kunnen worden herhaald met het ";" commando of ",". ";" herhaalt het laatst gezochte in dezelfde richting, terwijl "," dit doet in de tegenovergestelde richting.

Met de optie "ic" (of ignorecase) aan (tik in: :set ic) kan worden gezocht zonder te letten op hoofd- of kleine letters.

Instellingen voor VI (en EX)

Je kunt het gedrag van VI naar eigen smaak veranderen tijdens het opstarten. Er zijn diverse opties in te stellen via het :set commando. Hieronder de VI en EX opties die beschikbaar zijn op Wiliki (je kunt deze lijst zelf bekijken door in VI het commando :set all te geven): noautoindent magic noshowmatch autoprint mesg noshowmode noautowrite nomodelines noslowopen nobeautify nonumber tabstop=8 directory=/tmp nonovice taglength=0 nodoubleescape nooptimize tags=tags /usr/lib/tags noedcompatible paragraphs=IPLPPPQPP LIpplpipnpbp term=xterm noerrorbells prompt noterse noexrc noreadonly timeout flash redraw timeoutlen=500 hardtabs=8 remap ttytype=xterm noignorecase report=5 warn keyboardedit scroll=11 window=23 keyboardedit! sections=NHSHH HUuhsh+c wrapscan nolisp shell=/bin/csh wrapmargin=0 nolist shiftwidth=8 nowriteany Sommige opties hebben hierbij waardes die worden toegekend via het 'is gelijk' (=) teken, andere opties staan aan of uit (deze laatste categorie opties hebben het type Boolean en worden voorafgegaan door "no" indien ze uit staan). De hier getoonde opties zijn de instellingen zonder dat deze zijn aangepast. Hieronder een beschrijving van een aantal van deze opties, met hun afkortingen. Het autoindent commando bijvoorbeeld kan gegeven worden als :set autoindent of als :set ai. Om dit weer uit te zetten kan worden volstaan met :set noautoindent of :set noai.
autoindent (ai)
Deze optie stelt de editor dusdanig in dat nieuwe regels die aan worden gemaakt hetzelfde inspringen als de regel erboven. Wil je dit inspringen ongedaan maken dan moet je een ^d geven aan het begin van de regel. Deze ^d werkt alleen in de insert stand, niet in de command stand. Tevens kan de mate van inspringen worden ingesteld met shiftwidth, zoals hieronder uitgelegd.
exrc
Het bestand .exrc in de huidige directory wordt tijdens opstart door VI ingelezen. Dit moet worden ingesteld in de EXINIT omgevingsvariabele of in het .exrc bestand in je home-directory.
mesg
Zet de ontvangst van berichten uit via :set nomesg zodat niets je kan storen tijdens het editten.
number (nu)
Laat regelnummers zien aan de linkerkant.
shiftwidth (sw)
Deze optie moet van een waarde worden voorzien en die bepaalt de mate van inspringen bij het geven van een softwarematige tabulatorstop (Deze tabulatorstop wordt gebruikt bij de << en de >> commando's). Instellen op inspringen met 4 posities kan bijvoorbeeld met :set sw=4.
showmode (smd)
Met deze optie wordt zichtbaar in welke stand de editor staat. Als je in insert stand staat zal onder aan het scherm INPUT MODE staan.
warn
Deze instelling waarschuwt je als je het bestand hebt gewijzigd maar de wijzigingen nog niet hebt opgeslagen.
window (wi)
Hiermee wordt het aantal regels ingesteld die VI op het scherm zal tonen. Als je dit bijvoorbeeld op 12 regels wilt zetten (omdat je een langzaam modem hebt) dan kan dit als volgt: :set wi=12
wrapscan (ws)
Deze instelling verandert het gedrag bij tekst zoeken. Als de optie aan staat en de tekst wordt niet gevonden en VI is aan het einde van het bestand dan zal VI verder gaan zoeken vanaf het begin van het bestand.
wrapmargin (wm)
Bij een waarde groter dan nul zal VI automatisch aan "word wrap" doen. Dit betekent dat als je een bepaald aantal posities van de rechterkantlijn bent verwijderd, het woord automatisch op de volgende regel wordt gezet zonder dat je een Return hoeft in te tikken. Om bijvoorbeeld de marge op 2 posities in te stellen kun je het volgende geven: :set wm=2.

Afkortingen en toetsen toekennen aan andere toetsen

Een voor VI bruikbaar EX editor commando is het abbreviate commando. Hiermee kun je afkortingen instellen voor bepaalde stukken tekst. Het commando ziet er als volgt uit: :ab afkorting Datgene wat afgekort moet worden. Als je bijvoorbeeld herhaaldelijk "Humuhumunukunukuapua`a" moet intikken maar daar geen zin in hebt dan kun je een afkorting gebruiken. Die zou er als volgt uitzien:
:ab 9u Humuhumunukunukuapua`a
Iedere keer dat je nu 9u intypt als een op zichzelf staand woord zal VI dit vervangen door de betreffende tekst. Als je bijvoorbeeld 9university intypt zal de vervanging niet plaatsvinden.

Om de afkorting weer te verwijderen kan het commando unabbreviate worden gebruikt. Voor het vorige voorbeeld wordt dit :una 9u. Om een overzicht te zien van alle actieve afkortingen kun je gewoon ":ab" geven.

Een ander bruikbaar EX commando voor het instellen op eigen gebruik is het map commando. Hiervan zijn twee varianten. Eén voor de command stand en één voor de insert stand. De varianten zijn respectievelijk :map en :map!. Net als bij de afkortingen wordt ook hier een reeks tekens vervangen door een andere reeks. In dit geval zal het echter meestal gaan om een reeks VI commando's.

De omgevingsvariabele EXINIT en het bestand .exrc

Er zijn twee manieren om VI naar wens in te stellen. Als je een bestand .exrc aanmaakt in je home-directory zullen, iedere keer dat je VI opstart, alle commando's hieruit worden uitgevoerd. De tweede manier is via de omgevingsvariabele EXINIT. De opties kunnen dan worden ingesteld in je login script. Als je de C shell (/bin/csh) gebruikt kun je het volgende commando in je .cshrc bestand zetten:
	setenv EXINIT '…'
Als je /bin/sh of /bin/ksh gebruikt is het commando (in je .profile bestand) als volgt:
	export EXINIT
	EXINIT='…'
Als je bijvoorbeeld auto indent wilt hebben en regelnummering en een wrap margin van drie posities dan zal het commando (voor de C shell) er als volgt uitzien:
	setenv EXINIT 'set ai nu wm=3'
Als je hierin meerdere commando's kwijt wilt, scheidt ze dan middels een verticale streep (|). Om het commando g toe te kennen aan de toets 'G' in command stand moet bijvoorbeeld het volgende worden gegeven: :map g G. In combinatie met bovenstaand commando wordt dit nu:
	setenv EXINIT 'set ai nu wm=3|map g G'
Als je liever een bestand .exrc hebt dan kun je hier precies hetzelfde inzetten als wat tussen aanhalingstekens staat gegeven in bovenstaande voorbeelden.

Herstellen van werk als er wat met je terminal gebeurt

VI gebruikt een tijdelijke kopie van je bestand om de veranderingen door te voeren en zal ze, nadat je hem hebt verteld deze veranderingen te bewaren, doorvoeren in het originele bestand. Als er iets mis gaat tijdens het veranderen zal VI proberen om het onder handen zijnde werk zoveel mogelijk te bewaren voor een eventueel later herstel (Als VI wordt afgebroken tijdens het werken aan je bestand zal het je een e-mail sturen met daarin instructies hoe je het kunt herstellen). De optie -r wordt gebruikt voor het herstellen (recovery). Als je bezig was met het wijzigen van het bestand belangrijketekst en je wordt per ongeluk uitgelogd dan kan de -r optie van VI je uitkomst brengen. Het commando voor het herstellen zal er ongeveer als volgt uitzien: $ vi -r belangrijketekst. Meteen na het gebruik van deze optie moet je je wijzigingen in het originele bestand doorvoeren. De optie werkt namelijk maar één keer per afgebroken sessie.

Waarschuwing bij gebruik van VI op een werkstation

Twee dingen moet je in de gaten houden bij het werken met VI op een werkstation: hetzelfde bestand meerder keren tegelijk bewerken en het veranderen van de schermgrootte.

Omdat VI wijzigingen op een kopie van je bestand aanbrengt en het slechts als laatste in één keer wegschrijft in je originele bestand moet je uitkijken indien je meerdere keren bent ingelogd. Als je dan hetzelfde bestand wijzigt in meerdere sessies dan zal het wegschrijven van de veranderingen van de tweede sessie die van de eerste sessie overschrijven waarmee die veranderingen dus verloren zijn. Vergewis je ervan dat je een bestand slechts in één sessie aan het wijzigen bent.

Als je een terminal emulatieprogramma van je werkstation gebruikt dan kun je de grootte van het scherm veranderen door het window van afmetingen te laten veranderen. Als VI dit niet kan volgen dan is het volgende commando op zijn plaats:

	eval `resize`
Als dit niet werkt dan het volgende:
	eval `/usr/bin/X11R6/resize `
Dit zou een zeldzaam probleem moeten zijn, zeker met modernere versies van VI zoals Vim.

Overzicht van VI commando's

De volgende lijst is een samenvatting van VI commando's, ingedeeld op functionaliteit. Er kunnen nog meer commando's zijn, zie hiervoor de on-line manual on VI. Je kunt onderstaande als referentie gebruiken door het als tekst in een bestand te bewaren en die commando's er uit te halen waarvan je denkt dat je ze toch niet zult gebruiken. Daarmee verkort je je referentie.

Kopiëren en weghalen van tekst

"
Geef een buffer op bij ieder commando wat buffers gebruikt. Laat het volgen door een letter of cijfer die de buffer aangeeft.
D
Verwijder tekst vanaf de cursor tot aan einde regel
P
Kopieer de tekst van de gegeven buffer vóór de cursor of regel. Als geen buffer is opgegeven (met het " commando), gebruik dan de algemene buffer.
X
Verwijder het teken vóór de cursor.
Y
Kopieer de huidige regel in de gegeven buffer. Gebruik de algemene buffer als geen buffer is opgegeven.
d
Verwijder tekst tot aan waar. dd verwijderd de huidige regel. aantal verwijderd dat aantal regels. Datgene wat wordt verwijderd wordt in het gegeven (") buffer gezet en anders in de algemene buffer.
p
Kopieer de gegeven buffer in de tekst na de cursorpositie of op de volgende regel. Haalt het uit de algemene buffer als geen buffer is gegeven (").
x
Verwijder het teken onder de cursor. Aantal geeft aan hoeveel tekens er moeten worden verwijderd. Dit zijn de tekens achter de cursor.
y
Kopieer de tekst tot aan waar in een buffer. yy kopieert de huidige regel. Aantal kopieert dat aantal regels. De buffer kan met het " commando worden gespecificeerd. De algemene buffer wordt gebruikt als er geen is opgegeven.

Invoegen van nieuwe tekst

A
Voeg toe aan het eind van de huidige regel.
I
Voeg in vanaf het begin van de regel.
O
(Letter Oh) Ga naar insert stand op een nieuwe regel boven de huidige cursorpositie.
a
Ga naar insert stand, de ingetypte tekens worden ingevoegd in de tekst achter de cursorpositie. Een aantal zal zoveel keer de totaal ingetypte tekst invoegen.
i
Ga naar insert stand, de ingetypte tekens worden ingevoegd in de tekst voor de cursorpositie. Een aantal zal zoveel keer de totaal ingetypte tekst invoegen.
o
Ga naar insert stand op een nieuwe regel onder de huidige cursorpositie.

De cursor verplaatsen

^B
Scroll één scherm terug. Een aantal zal zoveel schermen terug gaan.
^D
Scroll een half scherm verder. Een aantal zal zoveel regels naar voren gaan.
^F
Scroll een scherm verder. Een aantal zal zoveel schermen naar beneden gaan.
^H
Cursor één positie naar links. Een aantal zal zoveel posities naar links gaan.
^J
Cursor één regel naar beneden, in dezelfde kolom. Een aantal zal zoveel regels naar beneden gaan.
^M
Naar de eerste positie op de volgende regel.
^N
Cursor één regel naar beneden, in dezelfde kolom. Een aantal zal zoveel regels naar beneden gaan.
^P
Cursor één regel naar boven, in dezelfde kolom. Een aantal zal zoveel regels naar boven gaan.
^U
Scroll een half scherm naar boven. Een aantal zal zoveel regels naar boven gaan.
$
Naar het einde van de regel. Een aantal zal zoveel regels verder naar het eind gaan.
%
Naar het bijbehorende haakje of accolade.
^
Naar het begin van de regel.
(
Cursor naar het begin van een zin.
)
Cursor naar het begin van de volgende zin.
{
Cursor naar de vorige paragraaf.
}
Cursor naar de volgende paragraaf.
|
Ga naar de kolom, gegeven door aantal.
+
Naar het eerste niet-scheidingsteken (spatie, tab, return) op de volgende regel.
-
Naar het eerste niet-scheidingsteken op de vorige regel.
_
Naar het eerste niet-scheidingsteken op deze regel.
0
(Nul) Naar de eerste kolom op deze regel.
B
Eén woord terug, negeer daarbij leestekens (streepjes, punten e.d.).
E
Naar het einde van een woord, negeer daarbij leestekens.
G
Ga naar het regelnummer wat in aantal is gegeven. Als geen aantal is gegeven, ga dan naar het einde van het bestand.
H
Cursor naar het eerste niet-scheidingsteken boven aan het scherm.
L
Cursor naar het eerste niet-scheidingsteken onder aan het scherm.
M
Cursor naar het eerste niet-scheidingsteken midden in het scherm.
W
Naar het begin van het volgende woord, negeer daarbij leestekens.
b
Eén woord terug. Indien in het midden van een woord, dan naar het begin van dat woord.
e
Eén woord verder. Indien in het midden van een woord, dan naar het einde van dat woord.
h
Cursor één positie naar links
j
Cursor één regel naar beneden.
k
Cursor één regel naar boven.
l
Cursor één positie naar rechts.
w
Eén woord verder. Indien in het midden van een woord, dan naar het begin van het volgende woord.

De cursor verplaatsen op het scherm

^E
Scroll één regel verder. Aantal gaat zoveel regels verder.
^Y
Scroll één regel terug. Aantal gaat zoveel regels terug.
z
Ververs het scherm met de volgende opties: z<Return> zet de huidige regel bovenaan het scherm. z. zet de huidige regel centraal op het scherm. z- zet de huidige regel onder aan het scherm. Als je een aantal opgeeft voor dit commando dan neemt hij het gegeven regelnummer als huidige regel. 16z. bijvoorbeeld zet dan regel 16 midden op het scherm.

Vervangen van tekst

C
Vervang de tekst vanaf de cursorpositie tot aan het einde van de regel
R
Vervang de tekens op het scherm met degene die je intypt tot aan de Escape toets.
S
Vervang de hele regel.
c
Vervang tot aan waar. cc vervangt de huidige regel. Aantal vervangt die hoeveelheid regels.
r
Vervang het teken onder de cursor. Geef een aantal om die hoeveelheid tekens te vervangen.
s
Vervang het teken onder de cursor en ga naar de insert stand. Geef een aantal om die hoeveelheid tekens te vervangen. Het dollarteken ($) zal op de plaats staan van het laatste te vervangen teken.

Zoeken naar tekst of tekens

,
Herhaal het laatste f, F, t of T commando in de tegenovergestelde richting.
/
Zoek voorwaarts in het bestand naar de tekst die is gegeven na de /.
;
Herhaal het laatste f, F, t of T commando.
?
Zoek achterwaarts in het bestand naar de tekst die is gegeven na de ?.
F
Zoek achterwaarts in de huidige regel naar het teken, gegeven achter het F commando. Verplaats de cursor er naar toe indien gevonden.
N
Herhaal de laatste zoekopdracht van / of ? maar dan in tegenovergestelde richting.
T
Zoek achterwaarts in de huidige regel naar het teken, gegeven achter het T commando. Verplaats de cursor naar de positie daarachter indien gevonden.
f
Zoek in de huidige regel naar het teken, gegeven achter het f commando. Verplaats de cursor er naar toe indien gevonden.
n
Herhaal de laatste zoekopdracht van / of ?.
t
Zoek in de huidige regel naar het teken, gegeven achter het t commando. Verplaats de cursor naar de positie ervoor indien gevonden.

Tekens veranderen/Regels formatteren

~
Verander de letter onder de cursor van hoofd- in kleine letter of andersom
<
Laat de regels tot aan waar één niveau terugspringen. << laat de huidige regel één niveau terugspringen en kan vooraf worden gegaan door een aantal.
>
Laat de regels tot aan waar één niveau inspringen. >> laat de huidige regel één niveau inspringen en kan vooraf worden gegaan door een aantal.
J
Voeg de huidige en volgende regel samen tot één regel. Een aantal voegt dat aantal regels samen.

Bewaren en eindigen

^\
Ga uit "VI" stand terug naar "EX" stand. EX is de regelgeoriënteerde editor waarop VI is gebaseerd. Het EX commando om terug te gaan naar VI is :vi.
Q
Ga uit "VI" stand terug naar "EX" stand. EX is de regelgeoriënteerde editor. Het EX commando om terug te gaan naar VI is :vi.
ZZ
Verlaat de editor en bewaar eventuele veranderingen.

Overige

^G
Laat de naam van het huidige bestand zien en zijn status.
^L
Ververs het scherm.
^R
Ververs het scherm, waarmee foute regels worden verwijderd.
^[
Escape toets, breekt een halfgevormd commando af.
^^
Ga terug naar het laatste bestand wat je hebt veranderd.
!
Voert een shell uit. Als een waar is opgegeven dan worden deze regels aan het programma dat wordt opgestart met het ! commando als standaard invoer meegegeven en zullen betreffende regels worden vervangen door de standaard uitvoer van dat programma. !! gebruikt de huidige regel als invoer. !4jsort bijvoorbeeld zal 5 regels van de huidige positie nemen en sort uitvoeren. Na het intikken van het commando verschijnt een enkel uitroepteken waar de rest van het commando ingetikt kan worden.
&
Herhaal het vorige :s commando.
.
Herhaal het laatste commando dat het bestand veranderde.
:
Begin met het intikken van een EX commando. Het commando wordt uitgevoerd zodra een Return is gegeven (zie ook onderstaande paragraaf).
@
Laat het commando zien wat in de gegeven buffer staat.
U
Herstel de huidige regel in de staat waarin hij was voordat de cursor er kwam.
m
Markeer de huidige positie van de cursor met het teken dat je opgeeft na het m commando.
u
Draai de laatste verandering op het bestand terug. Nog een u doet de verandering opnieuw.

EX commando's

VI is gebouwd op een andere editor die EX wordt genoemd. EX werkt op regel-voor-regel basis. Vanuit VI kun je : gebruiken voor het invoeren van een EX commando. De hier gegeven lijst is niet compleet, de behandelde commando's zijn de algemeen gebruikte. Indien een commando meerdere regels kan veranderen (zoals :s of :w), dient er een bereik op te worden gegeven, voorafgaand aan het commando. Om bijvoorbeeld iets op regels 3 tot en met 15 te veranderen moet op worden gegeven: "3,15s/van/dit/g".
:ab string strings
Afkorting. Indien een woord in VI wordt ingevoerd dat gelijk is aan string dan zal de editor dit automatisch vervangen door strings. Het commando ":ab nl Koninkrijk der Nederlanden" zal de tekst "Koninkrijk der Nederlanden" invoegen op iedere plek waar het woord "nl" wordt ingevoerd.
:map keys new_seq
Toetsen toekennen. Een toetsindruk (of een reeks) wordt daarbij vervangen door een andere toets (of reeks).
:q
Verlaat VI. Als er veranderingen zijn geweest op het bestand zal de editor een waarschuwing geven.
:q!
Verlaat VI zonder eventuele veranderingen te bewaren.
:s/pattern/to_pattern/options
Vervangen (substitueren). Dit vervangt het gegeven pattern met het gegeven to_pattern. Zonder opties wordt alleen het eerst gevonden patroon vervangen. Als een g als optie wordt meegegeven dan worden alle gevonden patronen op de regel vervangen. Het commando ":1,$s/Dwayne/Dwight/g" bijvoorbeeld zal alle voorkomens van Dwayne vervangen door Dwight.
:set [all]
Stel een optie van de editor in. ":set all geeft alle mogelijke opties weer (zie ook de paragraaf over het instellen van VI).
:una string
Verwijderd de afkorting die daarvoor was gedefinieerd.
:unm keys
Verwijderd de toekenning van de toets die daarvoor was gedefinieerd.
:vi filename
Start met het editten van een nieuw bestand. Als veranderingen niet vooraf bewaard zijn zal VI een waarschuwing geven.
:w
Bewaar veranderingen op het huidige bestand.
:w filename
Bewaar veranderingen in het gegeven bestand.
:w >> filename
Voeg de inhoud van de buffer toe achter aan het bestand.
:wq
Bewaar de buffer en verlaat de editor.

Referenties

Last updated on Tuesday, December 10, 1996
Updated on Thursday, July 27, 1995
Updated on Monday, October 3, 1994
Copyright © 1996 University of Hawaii, College of Engineering, Computer Facility
All rights reserved.