De VI editor leren gebruiken
ArticleCategory:
Applications
AuthorImage:
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:
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.
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 veranderen 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.
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 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.
Bovenbeschreven 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.
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 het 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 executeren. 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.