Wijzigen van een bestaand bestand

Om vi te gebruiken, hoef je alleen de paragraaf Door een bestand manoeuvreren en de paragraaf Verwijderen van tekst te lezen. In latere secties worden gevorderde mogelijkheden uitgelegd, maar die zijn niet strict noodzakelijk, alhoewel vaak efficiënter en minder langdradig.

Door een bestand manoeuvreren

Om door een bestand te manoeuvreren, staat vi je toe de pijltjestoetsen te gebruiken. De traditionele toetsen werken echter ook; dit zijn de h voor links, de j voor naar beneden, de k voor naar boven en de l voor rechts. Deze toetsen zijn zo gekozen omdat ze zich aangrenzend op de basisrij van het toetsenbord bevinden, en dus makkelijk te typen zijn. Veel mensen gebruiken ze in plaats van de pijltjestoetsen, omdat ze met je vingers sneller te bereiken zijn.

vi testfile

Open het bestand dat je eerder met vi aanmaakte. Manoeuvreer door het bestand met de pijltjestoetsen of de hjkl toetsen. Als je de cursor te ver in een bepaalde richting probeert te verplaatsen, zal vi een beep genereren en dit weigeren; als je er tekst in wilt plaatsen, moet je een invoegopdracht, zoals i of a gebruiken.

:q

Beëindig vi

Verwijderen van tekst

vi testfile

Open je bestand practice weer.

dd

De dd opdracht verwijdert een regel; de bovenste regel van het bestand zou er nu niet meer moeten zijn.

x

x verwijdert een enkel teken; de eerste letter van de tweede regel zal worden verwijderd. Delete en backspace werken om historische redenen niet in vi. [1] Een aantal vi varianten, zoals vim zullen je backspace en delete laten gebruiken.

10x

Als je een nummer voor een opdracht intikt, zal het de opdracht zoveel malen herhalen. Dus dit zal 10 tekens verwijderen.

2dd

Je kunt ook met de dd opdracht een nummer gebruiken, waardoor twee regels worden verwijderd.

:q

Dit zal een fout veroorzaken, omdat je het bestand hebt gewijzigd en het nog niet hebt opgeslagen. Er zijn twee manieren om dit te voorkomen; je kunt gebruik maken van :wq, dus het bestand wegschrijven op het moment dat je eruit gaat, of je kunt afsluiten zonder opslaan:

:q!

Met een uitroepteken vertel je vi dat je het werkelijk meent, en het zou moeten stoppen, zelfs als het bestand niet werd opgeslagen. Als je :q! gebruikt, zullen je verwijderingen niet worden opgeslagen in testfile; als je :wq gebruikt, zullen ze wel worden opgeslagen.

cat testfile

Bekijk terug achter de shell-prompt het bestand testfile. Het zou nu kleiner moeten zijn als je :wq gebruikte, of ongewijzigd als je :q! gebruikte.

:q! is een uitstekende opdracht om te onthouden, omdat je het kunt gebruiken te ontsnappen als je hopeloos verward raakt, en denkt het bestand dat je aan het wijzigen was, te hebben geruïneerd. Druk gewoon een paar keer op ESC om er zeker van te zijn dat je je in de opdrachtmodus bevindt en typ dan :q!. Dit garandeert je dat je uit vi gaat zonder dat er schade is aangericht.

Je weet nu alles wat je nodig hebt voor de basisbewerkingen; invoegen, verwijderen, opslaan en afsluiten. In de volgende secties worden handige opdrachten beschreven om dingen wat sneller te doen; je kunt ze overslaan als je dat wilt.

Verfijnde verplaatsing

Er zijn veel verplaatsingsopdrachten, hier is een korte samenvatting:

w

Verplaats de cursor naar het begin van het volgende woord.

e

Verplaats de cursor naar het einde van het volgende woord.

E

Verplaats de cursor naar het einde van het volgende woord. voor een spatie

b

Verplaats de cursor naar het begin van het vorige woord.

0 (nul)

Verplaats de cursor naar het begin van de regel.

^

Verplaats de cursor naar het eerste woorde van de huidige regel.

$

Verplaats de cursor naar het einde van de regel.

RET

Verplaats de cursor naar het begin van de volgende regel.

-

Verplaats de cursor naar het begin van de vorige regel.

G

Verplaats de cursor naar het einde van het bestand.

1G

Verplaats de cursor naar het begin van het bestand.

nG

Verplaats de cursor naar regelnummer n.

C-G

Toon het huidige regelnummer.

H

Verplaats de cursor naar de bovenste regel op het scherm.

M

Verplaats de cursor naar het midden van het scherm.

L

Verplaats de cursor naar de laatste regel op het scherm.

n|

Verplaats de cursor naar kolom n.

Het scherm zal automatisch scrollen wanneer de cursor de bovenkant of de onderkant van het scherm bereikt. Er zijn alternatieve opdrachten waarmee het scrollen van de tekst kan worden bestuurd.

C-f

Scroll een scherm voorwaarts.

C-b

Scroll een scherm terugwaarts.

C-d

Scroll een half scherm omlaag.

C-u

Scroll een half scherm omhoog.

Opdrachten herhalen

Zoals hiervoor vermeld kun je een opdracht vaak laten voorafgaan door een nummer om die opdracht meerdere malen te herhalen. Als voorbeeld, de l-toets verplaatst de cursor naar links; 10l verplaatst de cursor 10 posities naar links.

Als je een aantal spaties voor wat tekst in wilt voegen, zou je een nummer kunnen gebruiken met de insert-opdracht. Voer het nummer n in, vervolgens de i gevolgd door een SPATIE en de ESC-toets. Als het goed is krijg je nu n spaties.

De opdrachten die iets met regels doen, gebruiken een nummer om naar regelnummers te refereren. De G is een goed voorbeeld; als je het laat voorafgaan door een nummer, zal het naar die regel gaan.

Geavanceerde referentie

In deze sectie wordt een uitgebreidere lijst met te gebruiken opdrachten gegeven. Het dient slechts ter referentie; probeer de opdrachten uit om te zien wat ze doen, als je dat wilt.

Invoegopdrachten

a

Voeg toe rechts van de cursor

A

Voeg toe aan het einde van de regel.

i

Voeg tekst links van de cursor in.

I

Voeg tekst in links van het eerste niet-blanco teken op de huidige regel.

o

Open een nieuwe regel onder de huidige regel en voeg tekst in.

O

Open een nieuwe regel boven de huidige regel en voeg tekst in.

Verwijderopdrachten:

x

Verwijder het teken onder de cursor.

dw

Verwijder vanaf de huidige positie tot aan het einde van het woord.

dd

Verwijder de huidige regel.

D

Verwijder vanaf de huidige positie tot aan het einde van de regel.

Gecombineerde opdrachten kunnen krachtiger zijn. In het bijzonder de d gevolgd door een verplaatsingsopdracht verwijdert vanaf de cursor tot aan de plaats die je vroeg een verplaatsing uit te voeren. Wat voorbeelden:

dnw

Verwijdert n woorden (ndw werkt ook).

dG

Verwijder vanaf de huidige positie tot aan het einde van het bestand.

d1G

Verwijder vanaf de huidige positie tot aan het begin van het bestand.

d$

Verwijder vanaf de huidige positie tot aan het einde van de regel (zelfde als D).

dn$

Verwijder vanaf de huidige regel tot aan het einde van de n-de regel.

Undo opdrachten:

u

Maakt de laatste opdracht ongedaan.

U

Maak alle wijzigingen van de huidige regel ongedaan.

:e!

"Wijzig nogmaals". Zoals het afsluiten met :q! en het opnieuw opstarten --- brengt je terug naar de laatste keer dat je de opdracht :w gaf om op te slaan.

Je kunt een undo ongedaan maken, dus uu resulteert in een ongedaan gemaakte, ofwel geen wijziging.

Vervangopdrachten:

rc

Vervang het teken onder de cursor door c.

R

Overschrijft tekst.

cw

Wijzigt het huidige woord.

c$

Wijzigt tekst vanaf de huidige positie tot aan het einde van de regel.

cnw

Wijzigt de volgende n woorden.(zelfde als ncw).

cn$

Wijzigt tot het einde van de n-de regel.

C

Wijzigt tot aan het einde van de regel (zelfde als c$).

cc

Wijzigt de huidige regel.

s

Vervangt het huidige teken door de tekst die je typt.

ns

Vervangt de volgende n tekens door de tekst die je typt.

De opdrachten in de lijst hiervoor die je toestaan meer dan een enkel teken tekst in te voeren, moeten worden afgesloten met de ESC-toets, waarbij je naar de opdrachtmodus terugkeert.

Knippen en plakken bestaat uit het eerst yanken (knippen of kopiëren) van wat tekst waarbij het in een buffer (of op een "klembord") wordt geplaatst; het te verplaatsen naar de gewenste nieuwe lokatie; en de tekst vervolgens te plakken.

Om tekst te knippen gebruik je de opdracht y of een variant daarop:

yy

Kopieer de huidige regel.

nyy

Kopieer de volgende n regels.

yw

Kopieer een woord.

ynw

Kopieer n woorden.

y$

Kopieer de tekst tussen de cursor en het einde van de regel.

Plakopdrachten:

p

Plak aan de rechterkant van de cursor.

P

Plak aan de linkerkant van de cursor.

nP

Plak n kopieën links van de cursor.

Bij het gebruik van vi binnen een xterm of het gebruik van een variant op vi die X ondersteunt, kun je voor het kopiëren van tekst ook de muis gebruiken. Zie Hoofdstuk 10 voor hoe je onder X kunt kopiëren en plakken; zorg ervoor dat je je in de invoeg-modus bevindt als je "plakt" anders zal de geplakte tekst als een opdracht worden geïnterpreteerd.

Als je iets verwijdert, wordt de verwijderde tekst naar een buffer (klembord) gekopieerd; je kunt dan vervolgens de "plak"-opdrachten gebruiken. Hiermee kun je dus knippen-en-plakken, terwijl de y-opdrachten resulteren in kopiëren-en-plakken.

vi heeft opdrachten om naar tekst te zoeken. Je kunt ze ook als verplaatsingsopdrachten gebruiken, als je naar een bepaald woord of teken wilt gaan.

De eenvoudigste zoekopdrachten zoeken naar tekens.

fc

Zoek naar het volgende teken c rechts of onder de huidige positie.

Fc

Zoek naar het volgende teken c links of boven de huidige positie.

tc

Plaats de cursor naar rechts voor het teken c.

Tc

Verplaats de cursor naar links op het teken volgend op de voorafgaande c.

;

Herhaal de laatste zoekopdracht naar een teken.

,

Hetzelfde als ;, maar draait de richting van de oorspronkelijke opdracht om.

Als het teken waar je naar zocht niet werd gevonden, zal vi een beep genereren of je één of ander soort signaal geven.

vi laat je naar iedere tekst zoeken, niet alleen naar een teken.

/tekst

Zoekt rechts en naar beneden voor het volgende voorkomen van tekst.

?tekst

Zoekt links en naar boven voor het volgende voorkomen van tekst.

n

Herhaal de laatste / of ? opdracht.

N

Herhaal het laatste / of ? in de tegengestelde richting.

De tekst in de opdracht / of ? is in feite een reguliere expressie, zie de paragraaf Reguliere expressies in Hoofdstuk 11.

Noten

[1]

Het toetsenbord van een aantal zeer oude terminals (van de 60'r jaren) had geen BackSpace- of Delete-toets.