Linuxcursus Les 5 werken met vi

Paul Wiegmans (paul@bonhoeffer.nl)
laatst gewijzigd

Introductie

Vi is een teksteditor onder UNIX en Linux . Er zijn heel veel andere editors - bijvoorbeeld Emacs - maar Vi is de editor die je op vrijwel elke Linux en zelfs elke UNIX zult kunnen vinden. Linux is meestal voorzien van de teksteditor Vim , wat staat voor vi Improved. Deze editor heeft nog eens heel veel extra functies en is stukken vriendelijker dat de oorspronkelijke Vi.

De beste manier om vi te leren is door het te doen. Het praktikum aan het einde van deze tekst is daarvoor heel geschikt. De grote waarde van het leren van vi is dat je het op elke Linux kunt gebruiken. Het is als standaard altijd geinstalleerd op elk Linux systeem. .

In dit hoofdstuk worden alle toetsaanslagen aangeduid zoals <a> voor de a toets.

Vi kan worden gestart met het commando
vi
of wanneer je niet met een lege buffer wilt beginnen, maar een bestaand bestand bewerken
vi bestandsnaam

Command en edit mode

In vi hebben bepaalde toetsen een andere functie afhankelijk van in welk mode Vi zich bevindt. Vi kent de commandomode en de editmode. In editmode wordt alle toetsen geinterpreteerd als ingevoerd tekst, en in commandomde worden alle toetsen beschouwd als commando. Bovendien bevat Vi de functie van een regel-geoienteerde editor , ex, voor nog meer commandos. Je kunt dit eigenlijk beschouwen als een derde mode, de ex-mode.

Wanneer je Vi start, begint vi altijd in commando mode.

Van commandomode ga je naar editmode met de toets <i>, <o>, ..
Van editmode ga je naar commandomode met de toets <Esc>.
Van commandomode ga je naar ex-mode met de toets <:>. 
Van exmode ga je naar commandomode met de toets <Esc>

Navigeren

Je beweegt de cursor in vi met de toetsen <h>, <j>, <k>, <l>. Deze toetsen zitten allevier op een rijtje zodat je met 4 vingers van 1 hand de cursor in 4 richtingen kan sturen. De cursortoetsen werken in Vim ook. Je kunt <0> naar het begin van de regel gaan. Met <$> ga je naar het einde van een regel. Met het intikken van een regelnummer gevolgd door <g> ga je naar die regel. Zonder regelnummer ga je met <g> naar het einde van de file, en met <G> naar het begin.

Tekst invoeren

Met de <i> ga je naar insertmodus, een nieuwe regel invoegen gaat met <o> ("open"), en met de <a> ("append") ga je tekst achter de regel invoegen. Met al deze toetscommandos kom je in de editmode .

Met de <r> kom je in replacemodus. Hier kun je een teken intikken, en dan wordt het teken onder de cursor vervangen door dit teken. Je blijft hierbij in commandomode.

Een teken weghalen gaat met <x>, met de <del> en <bkspc> toetsen werken in Vim ook.

Find en replace

Zoeken van tekst gaat met </>. De cursor gaat naar de onderste regel  en je kunt tikken welk woord je wilt zoeken. Met <return> ga vi zoeken naar het zoekwoord. Als je het woord heb gevonden, kom je met <n> (van "next") naar het volgende instantie van het woord.

Zoeken en vervangen gat met het commando subsititute (s) in exmode.
:1,10s/piet/jeroen/g
vervangt in regel 1 t/m 10 het woord piet door jeroen. Al het meer dan eens voorkomt, wordt vanwege de optie g (global) alle woorden vervangen.

Bewaren en opslaan

Om de file te bewaren ("write") tik je <:><w><enter> .  Als het bestand nog geen naam heeft , dan kun je een naam zo geven :  <:><w>bestandnaam<enter>
Verlaten van vi ("quit') doe je met <:><q><enter>. Als er nog wijzigingen zijn gemaakt, die niet zijn opgeslagen zal vi daarover klagen. Je moet dan , OF de wijzigingen opslaan OF de wijzigingen weggooien.  Opslaan en stoppen doe je tegelijkertijd met <:><w><q> . Als je de wijzigingen wilt weggooien doe <:><q><!><enter>.  Je zegt eigenlijk : quit en DOE HET!.

Een snelle manier om te stoppen en opslaan is vanuit commandomode met <Z><Z> . Dit zijn twee hoofdletters.

Om de bestandsnaam te zien doe <:><f><enter> .  Om een naam te geven doe je <:><f>naam<enter> . Hierna heeft het bestand de opgegeven naam en kun je hem opslaan onder deze naam met <:><w><enter>. Om een bestand in de editor te laden doe je <:><e>bestandsnaam <enter>.

Undo

De letter <u> in commandomode geeft je de mogelijk om de laatste wijziging ongedaan te maken. Wat die wijziging is , behelst alles wat je hebt gedaan sinds de laatste keer dat je in de commandomode was. De originele vi kent 1 niveau van undo , terwijl Vim diverse niveua van undo kent , m.a.w. in Vim kun je diverse wijzigingen teruggaan.

Editor

Vi is een editor en geen tekstverwerker. Het verschil met een tekstverwerker is dat een editor geen opmaak kent, zoals een tekstverwerker die kent. Dingen zoals het instellen van lettertype, kleur en grootte kan niet in vi. Je ziet in vi slechts de platte tekst, en verder niets. Vim kent daarentegen wel syntax highlighting, dat er voor zorgt dat woorden met een speciale betekenis in een andere kleur oplichten. Dit kan vooral van pas komen bij het  bewerken van broncode ("sourcecode") en is voor programmeurs erg handig. Ook bij het bewerken van HTML bestanden kunt je syntax highlighting goed gebruiken., om de structuur van de HTML code zichtbaar te maken. Vim kent syntax highlighting mode voor een groot aantal bestanden.

Incarnaties van Vi

In linux werk je meestal met Vim zonder dat je het op het eerste gezicht in de gaten hebt. Je werkt met Vim als je manpages bekijkt, of het commando less of crontab -e gebruikt . Wanneer je het commando man of less gebruikt, zorgen links ervoor dat Vim wordt gestart op de juiste manier en met het juiste gedrag.

Help

Informatie over hoe vi werkt kun je op diverse manieren te weten komen. Ten eerste is het natuurlijk de manpage van vi :
man vi
Ten tweede kun je binnen vi uitgebreide "online help" krijgen wanneer je :? intikt .  Als laatste mogelijkheid wil ik je wijzen op diverse webpaginas op het internet, die op 1 bladzijde alle belangrijke toetsen en functies van vi opsommen. Intikken op Google "vi cheat sheet" geeft je genoeg aanknopingspunten. Een heel overzichtelijke vind je op http://www.kcomputing.com/vi.html