Gentoo Logo

Disclaimer : Dit document is niet juist en is niet meer onderhouden.


vi leren -- de cheatsheet methode

Inhoud:

1.  Erin vliegen

Inleiding

Deze tutorial zal je uitleggen hoe je vi, een zeer krachtige editor, kan gebruiken. Door gebruik te maken van een krachtige cheatsheet zal je wat je leert niet snel vergeten en kan je toch snel veel zaken van vi aanleren. In deze tutorial zullen we je leren navigeren, tekst aanpassen, insert mode gebruiken, kopieren en plakken van tekst, alsook belangrijke vim-extensies zoals multi-window editing.

Indien je niet echt zeker bent van jezelf of je bent nog niet echt gewend om met vi te werken, dan ben je het jezelf verschuldigd om deze tutorial te lezen om snel met een van de meest populaire en krachtige Linux/UNIX editors te kunnen werken.

Over de handleiding

 

VI snel leren

Er is 1 ding dat vi zeer moeilijk maakt te leren -- vi heeft veeel commando's. Om vi efficient te gebruiken dien je er best enkele van buiten te kennen. Dit kan lang duren, en een van de doelen van deze handleiding is om niet al te veel van je tijd in te nemen. Dus, eerste uitdaging: hoe zorgen we ervoor dat je snel en efficient de commando's kan terugvinden zonder ze direct vanbuiten te blokken?

Om deze uitdaging tot een goed einde te brengen gaan we een cheatsheet aanmaken. Deze bevat alle belangrijke vi-commando's. Nadat je deze tutorial gelezen en uitgevoerd hebt zal je van deze cheatsheet kunnen gebruik maken om vergeten commando's terug te vinden. Naarmate je de commando's meer en meer gebruikt zal je minder en minder afhankelijk worden van de cheatsheet. Door deze methode leer je dus snel efficient werken met vi!

Het leerproces

In deze handleiding zal ik verschillende technieken gebruiken om je te helpen leren. Allereerst zal ik uitleggen hoe een specifiek commando werkt (dit is nogal wiedes :). Daarna zal ik je vragen om het commando in vi uit te testen (praktijkervaring, zeer belangrijk) en daarna moet je iets op je cheatsheet schrijven (voor toekomstig hergebruik). Indien je vi snel wil leren is het belangrijk dat je al deze stappen uitvoert. Een commando proberen in vi en neerschrijven zal je helpen in het memorizeren van het commando.

Inleiding vim

Er zijn verschillende vi-versies, en ik zal je uitleggen hoe je met 1 specifieke versie moet werken, namelijk "vim". Vim is zeer populair en heeft enkele extraatjes die vi heel wat leuker maken (wanneer ik een vim-specifiek commando demonstreer zal ik dat wel zeggen). Indien je vim nog moet installeren: je kan deze vinden op www.vim.org. Er is tevens gvim, een mooie grafische editor die net als vim werkt, maar dan met een mooie GTK+ grafische interface. Hier is er een gvim screenshot van de auteur:


Figuur 1.1: VIM screenshot

Fig. 1: screenshot

Indie je een vi newbie bent, probeer dan gvim op je systeem. Het gebruiken van vi via een GUI kan de moeilijkheidsgraad verlagen.

2.  Eerste stappen

Kies een bestand

Alvorens je vi leert gebruiken om bestanden aan te passen is het belangrijk te weten hoe je onder vi in een bestand navigeert. Vi heeft veel bewegingscommando's, en we gaan er een groot deel van bespreken. Voor dit deel van de tutorial zoek je best een onbelangrijk tekstbestand en laadt het in via vi door het volgende in te typen:

Codevoorbeeld 2.1:

$ vi myfile.txt

Indien je vim geinstalleerd staan hebt, type dan "vim myfile.txt". Indien je liever gvim gebruikt, type je "gvim myfile.txt". myfile.txt moet uiteraard de naam zijn van dat onbelangrijk tekstbestand.

Binnenin vi

Nadat vi geladen is zal je een deel van je tekstbestand zien op je scherm. Proficiat, je bent in vi. In tegenstelling tot veel editors start vi in wat de "command mode" heet. Dat wil zeggen dat indien je "l" indrukt op je keyboard, dat dan geen "l" in je tekstbestand wordt gestoken, maar dat de cursor 1 karakter naar rechts zal verschuiven. In command mode zijn de karakters die je ingeeft de commando's die je aan vi geeft, dit in tegenstelling tot de meeste editors waar de karakters direct aanpassingen veroorzaken in het tekstbestand. Een van de meest essentiele types van commando's zijn navigatiecommando's. Laten we er eens enkele bekijken:

3.  Rondhuppelen

Rondhuppelen in vi, deel 1

Wanneer je in command mode bent kan je de h, j, k en l gebruiken om je cursor links, lager, hoger of rechts plaatsen. De h, j, k en l toetsen zijn handig omdat, wanneer je ze gewend bent, je zeer snel kan navigeren aangezien je je handpalm niet moet verleggen. Gebruik h, j, k en l nu om in je tekstbestand te navigeren. Bemerk dat vi je niet toelaat om naar de vorige regel te springen indien je h indrukt terwijl je op het eerste karakter van een zin staat. Uiteraard zal tevens l niet naar een nieuwe regel springen indien je op het einde van een zin staat.

Rondhuppelen in vi, deel 2

vi levert speciale shortcuts voor het springen naar het begin en einde van een regel. Je kan 0 (nul) indrukken om naar het begin te vliegen, en $ voor het einde. Probeer maar. Aangezien vi nog meer van deze leuke zaken heeft is het een zeer handige "pager" (zoals less en more). Indien je vi instelt als je pager zal je nog sneller al zijn navigatiecommando's leren.

Je kan tevens <CTRL>-F en <CTRL>-B gebruiken om een volledige pagina verder respectievelijk terug te gaan. Moderne versies van vi (zoals vim) laten je tevens toe PGUP en PGDOWN te gebruiken.

Woordgoochelen, deel 1

vi laat toe dat je links en rechts navigeert, woord per woord. Om naar het eerste karakter van het volgende woord te gaan, druk w. Om naar het laatste karakter van het volgende woord te gaan, druk e. Om naar het eerste karakter van het voorgaande woord te gaan, druk b. Zeker uitproberen!

Woordgoochelen, deel 2

Nadat je met deze commando's wat zitten spelen hebt zal je merken dat vi woorden zoals "foo-bar-oni" als 5 aparte woorden interpreteert! Dit is per default aangezien vi woorden onderscheidt tussen spaties of punctuatie. foo-bar-oni is dus een 5-woorden-term: "foo", "-", "bar", "-" en "oni".

Soms is dit wat je wil, soms ook niet. Gelukkig herkent vi ook het concept van "grote woorden". vi onderscheidt grote woorden enkel door spaties of nieuwe regels. Dit wil zeggen dat, terwijl foo-bar-oni als een 5-woorden-vi-term gezien wordt, het maar 1 vi-groot-woord is.

Woordgoochelen, deel 3

Om tussen de vorige en volgende grote woorden te navigeren moet je dezelfde commando's gebruiken, maar dan in hoofdletters. Dus W om naar het eerste karakter van het volgende woord te gaan, E voor het laatste karakter van het volgende woord, en B voor het eerste karakter van het voorgaande grote woord.

Andere bewegingen

Er zijn nog enkele andere leuke commando's die je zeker moet kennen alvorens je je cheatsheet opstelt. Je kan de ( en ) karakters gebruiken om naar het begin van de volgende respectievelijk vorige regel te gaan. Daarbij kan je tevens { en } gebruiken om naar het begin van de volgende respectievelijk vorige paragraaf te gaan.

4.  Afsluiten

Afsluiten

Nu je weet hoe je moet navigeren, zijn er nog enkele andere commando's die zeer belangrijk zijn. Gebruik :q om vi af te sluiten. Indien dat niet werkt, dan heb je waarschijnlijk het bestand (per ongeluk) aangepast. Om vi te forceren af te sluiten, zonder de aanpassingen op te slaan, type je :q!. Je zou jezelf nu weer op de prompt moeten bevinden.

In vi zijn de commando's die beginnen met ":" zogenaamde ex-mode commando's. Dit is omdat vi een ingebouwde niet-visuele editor bevat, genaamd ex. Deze kan gebruikt worden, net zoals sed, om regel-aanpassing operaties uit te voeren. Zoals je dus al zag kan het tevens gebruikt worden om vi af te sluiten. Indien je ooit Q slaat terwijl je in commando-mode zit, dan zal je naar de ex-mode gaan. Indien dat ooit gebeurt zal je door een ":"-prompt begroet worden. Door enter te slaan zal je een volledig scherm terug gescrolled worden. Om naar de goede oude vi-mode over te gaan, type gewoon vi en druk enter.

5.  De cheatsheet

De beginselen van de cheatsheet

We hebben al een aardig aantal commando's bekeken, en dus is het tijd om ze te noteren op onze cheatsheet. Je neemt best een A4'tje aangezien we veel informatie zullen neerschrijven. Hier is er een afbeelding van de auteur zijn cheatsheet waarop al bovenstaande commando's staan. Probeer dezelfde layout te gebruiken zodat we alles op 1 papiertje kunnen plaatsen.


Figuur 5.1: Cheatsheet

Fig. 1: Eerste deel van de cheatsheet

Vanalles van vi

Laten we verder doen. In commando-mode kan je naar een specifieke regel springen door G te typen. Om naar de allereerste regel te gaan, type 1G. Merk op dat de G een hoofdletter is.

Indien je naar de eerstvolgende string wil gaan die voldoet aan een bepaalde reguliere expressie, type /<regexp> en druk op enter. Vervang <regexp> met de reguliere expressie waarnaar je op zoek bent. Indien je niet weet hoe je regexps moet ingeven moet je niet panikeren -- /foo zal zoeken naar de eerstvolgende "foo". Het enige waarvoor je moet oppassen is het zoeken naar een van de volgende karakters: ^.$\. Deze moet je escapen (een backslash voor plaatsen). Bijvoorbeeld /foo\.gif zal zoeken naar de eerste foo.gif vanaf de positie dat je cursor nu staat.

Om de voorwaardse zoektocht te herhalen, druk op n. Om achterwaarts te zoeken, type N. Zoals altijd is het belangrijk dat je deze zaken nu test. Je kan tevens // typen om de laatste zoekopdracht te herhalen.

6.  Opslaan en Aanpassen

Opslaan en Opslaan Als...

We hebben gezien hoe je het ex commando :q kan gebruiken om vi af te sluiten. Indien je je aanpassingen wil opslaan, type :w. Indien je je aanpassingen in een ander bestand wil opslaan, type :w bestandsnaam om deze op te slaan als bestandsnaam. Indien je wil opslaan en afsluiten, type :x of :wq.

In vim (en andere geavanceerde vi-editors, zoals elvis) kan je meerdere buffers open staan hebben. Om een bestand in een nieuwe window te openen, type :sp bestandsnaam. bestandsnaam zal klaar staan om aan te passen in een split window. Om tussen deze windows te switchen type je <CTRL>-w <CTRL>-w (dus 2 keer na elkaar control-w). De commando's :q, :q! en :x werken enkel op de actieve window.

Eenvoudige aanpassingen

Nu is het tijd om enkele eenvoudige edit-commando's te leren. Ik noem ze simpel omdat de commando's je in commando-mode houden. De meer complexe commando's zullen je vanzelf in insert-mode steken -- een modus waardoor je rechtstreeks het bestand kan aanpassen. Deze zullen we later behandelen.

Ga met je cursor over enkele karakters en druk x in. Je zal zien dat x het karakter onder de cursor verwijdert. Ga nu naar het midden van een paragraaf en druk J. Je zal zien dat J de volgende paragraaf aan het eind van de huidige paragraaf plakt. Druk nu eens r terwijl je met je cursor op een karakter staat, en type een nieuw karakter in. Je zal zien dat het karakter vervangen wordt met het nieuwe karakter. Ga nu naar een bepaalde regel en druk dd. Je zal zien dat deze de huidige regel verwijdert.

Herhalen en Verwijderen

Je kan eender welk commando herhaaldelijk uitvoeren door de . in te drukken. Indien je experimenteert zal je merken dat dd... 4 regels zal verwijderen, en J...... zal 4 regels aan elkaar hangen. Uiteraard heeft vi een snellere manier voor deze zaken :)

Om tekst te verwijderen kan je tevens het d commando gevolgd door een navigatiecommando uitvoeren. Bijvoorbeeld dw zal alle tekst verwijderen vanaf de huidige positie tot aan het begin van het bestand; d) zal alle tekst verwijderen tot aan het eind van de volgende zin, en d} zal de rest van de paragraaf verwijderen. Experimenteer et het d commando en de andere edit-commando's totdat je ze allemaal onder de knie hebt.

Ongedaan maken

Nu dat we bezig zijn met verwijdercommando's is het een goed moment om te leren hoe je aanpassingen ongedaan maakt. Door u te drukken kan je je laatste commando ongedaan maken. Moderne versies van vi, zoals vim, laten je toe om meerdere commando's ongedaan te maken door herhaaldelijk op u te drukken. Probeer ze zeker uit.

De cheatsheet updaten

Het is tijd om de cheatsheet up te daten. Na het toevoegen van alle geziene commando's zal je papier er als volgt kunnen uitzien:


Figuur 6.1: Cheatsheet met editing-commando's

Fig. 1: Cheat sheet

7.  Insert mode

Insert mode

Tot nu toe hebben we geleerd om met vi te navigeren, bestanden te manipuleren, en basis editing commando's uit te voeren. Ik heb je echter nog niet uitgelegd hoe je gewoon tekst in je bestand kan zetten! Dit is met opzet, aangezien vi's insert mode ietswat ingewikkeld is in het begin. Maar eenmaal je gewend bent met deze modus zal je zijn complexiteit (en flexibiliteit) zeker waarderen.

In vi insert modus kan je tekst aanpassen en invoegen zoals je bij de meeste andere editors kan doen. Eenmaal je je aanpassingen gemaakt hebt kan je escape drukken om terug te keren naar commandomodus. Je kan naar insert modus gaan door i of a in te drukken. Indien je i drukt zal je tekst voor het geselecteerde karakter komen, terwijl dat bij a erachter is. Je kan dit eenvoudig onthouden door insert respectievelijk append te denken. Vergeet niet om <Esc> te drukken om terug te keren naar de commando modus.

Voordelen van insert mode

Probeer de i en a commando's uit. Type wat tekst en ga terug naar de commando mode. Druk op <Enter> nadat je a of i getypt hebt en let op wat er gebeurt. Probeer de pijltjes van je keyboard en de <DEL> toets om te weten te komen hoe de insertmodus werkt. Door de pijltjestoetsen en delete-toets te gebruiken kan je verschillende edit-stappen uitvoeren zonder telkens de insertmode te verlaten.

Insert opties

Hier zijn er enkele andere interessante methoden om in insertmode te geraken. Druk A om aan het eind van de regel te starten. I zal dan aan het begin van de regel starten. Druk o om een nieuwe, blanco regel te creeren net onder de huidige regel, en O om een blanco regel boven de huidige regel te maken. Om de ganse regel met een nieuwe regel te vervangen, druk cc. Om alles vanaf de huidige positie tot het eind van de regel te vervangen, druk c$. Om alles vanaf de huidige positie tot het begin van de regel te vervangen, druk c0.

Al bovenstaande commando's zullen je in insert-modus plaatsen. Druk op escape om de insertmodus te verlaten.

Tekst aanpassen

We hebben het c (change) commando al een beetje gebruikt in de commando's cc, c0, c$. cc is een speciaal commando, gelijkaardig aan dd. De andere commando's zijn voorbeelden van het gebruiken van het c commando met navigatiecommando's. Het is dus geheel gelijkaardig aan het d commando, behalve dat het de gebruiker daarna in insertmodus plaatst. Probeer enkele commando's te combineren en test ze uit op je bestand (hint: cW, ce, (.)

8.  Combinatie Commandos

Combinatie Commandos

Vi wordt pas enorm krachtig indien je begint met combinaties te creeeren, zoals d{ en cw. Daarbij kan je een nummer plaatsen, zoals 3w, waardoor vi 3 woorden naar rechts zal springen. Hier zijn nog enkele combinatie-voorbeeldcommando's: 12b, 4j.

Behalve het gebruik van nummer-navigatie commando's laat vi tevens toe d en c te combineren met nummers of navigatiecommando's. Dus d3w zal de volgende 3 woorden verwijderen, d2j zal de huidige en de volgende 2 regels verwijderen enz. Test verschillende c,d-combinaties uit. Eenmaal je deze onder de knie hebt zal je enorm snel met vi bestanden kunnen manipuleren.

De cheatsheet updaten

Het is weer tijd om de cheatsheet up te daten. De mijne ziet er momenteel als volgt uit:


Figuur 8.1: Cheatsheet met combinaties

Fig. 1: Cheat Sheet

Productivity features

Tot nu toe hebben we gezien hoe je navigeert, opslaat en afsluit, hoe je eenvoudige aanpassingen en verwijdercommando's ingeeft, en hoe je de insert modus moet gebruiken. Met alle zaken op de cheatsheet moet je nu al gemakkelijk bijna alle gewenste taken met vi kunnen afhandelen.

Vi heeft echter nog heel wat meer in zijn mars. In deze sectie zal ik je uitleggen hoe je knipt, kopieert, plakt, zoekt en vervangt, en hoe je de autoindent gebruikt. Deze maken het leven met vi heel wat leuker.

Visuele modus

De beste manier om te knippen, kopieren en plakken is met de visuele modus, een speciale modus die toegevoegd is aan moderne versies van vi, zoals vim. Het is een soort van selecteermodus. Eenmaal de tekst geselecteert is kan je ze knippen, kopieren en plakken. Indien je gvim gebruikt kan je dat uiteraard door gewoonweg met je muis te werken.


Figuur 8.2: VIM met geselecteerde tekst

Fig. 2: Highlighted text

Daarbij kan je tevens in visuele mode gaan door v te drukken (dit is trouwens de enige manier indien je met vim werkt). Door daarna met de cursor te navigeren zal je delen van je tekst selecteren. Eenmaal geselecteert zijn we klaar om te knippen of kopieren.

Indien je de tekst wil kopieren, druk y (yank). Indien je de tekst knipt, druk d. Je zal teruggesmeten worden naar commandomodus. Ga nu naar de positie waar je de tekst in wil voegen, en druk P om de tekst na de cursor te plaatsen, of p om de tekst voor de cursor te plaatsen. Voila, de knippen/kopieren/plakken is gedaan. Probeer verschillende operaties uit alvorens je verder gaat.

Tekst Vervangen

Om bepaalde expressies van tekst te vervangen gebruiken we de ex modus. Indien je de eerstvolgende expressie op de huidige lijn wil vervangen, type :s/<regexp>/<vervangtekst>/ en druk op enter. Hier is <regexp> de expressie die je wil vervangen en <vervangtekst> de tekst waarmee ze vervangen moet worden. Om alle expressies op de huidige lijn te vervangen, gebruik :s/<regexp>/<vervangtekst>/g en druk op enter. Om alle voorkomende expressies in je ganse tekst te vervangen, gebruik :%s/<regexp>/<vervangtekst>/g. Indien je wil dat vi bij elke vervanging vraagt of je wel wil vervangen, zet dan een extra c achteraan: :%s/<regexp>/<vervangtekst>/gc.

Inspringen

vi ondersteunt automatisch inspringen, wat zeer handig is indien je broncode aan het aanpassen bent. De meeste moderne implementaties van vi (zoals vim) zullen vanzelf inspringen indien je broncodebestanden aan het aanpassen bent. Indien deze ingeschakeld is kan je <CTRL>-d gebruiken om 1 niveau in te springen, en <CTRL>-t om 1 niveau lager te gaan. Indien autoindent niet vanzelf aanstaat kan je deze manueel activeren door :set autoindent in te geven in ex-modus. Je kan tevens aan vi vertellen dat je tab-afstand anders moet zijn door :set tabstop te gebruiken. :set tabstop=4 is zeer populair.

Ons finale cheatsheet

Voila, we zitten aan het eind van onze tutorial. Na het toevoegen van alle geavanceerde commando's zou de cheatsheet er als volgt uit kunnen zien:


Figuur 8.3: Finale cheatsheet

Fig. 3: Cheat Sheet

Hou dit papiertje in de buurt, en gebruik vi om je bestanden en e-mails te creeren of aan te passen. Gebruik de cheatsheet wanneer je ze nodig hebt; na een weekje of zo zal je bijna alle commando's doorhebben en zal je productiviteit de lucht in schieten.

Resources

Hier zijn er enkele resources die je handig kan vinden indien je nog meer wil te weten komen over vi:

Over dit document

De originele versie van dit document was eerst gepubliceerd op IBM DeveloperWorks, en is eigendom van Westtech Information Services. Dit document is een aangepaste versie van het origineel, en bevat enkele verbeteringen gemaakt door het Gentoo Linux documentatie team.



Print

Upgedate op 4 Oktober 2003

De originele versie van dit document wordt niet meer onderhouden

Korte inhoud: Deze handleiding zal je uitleggen hoe je vi leert gebruiken met een cheatsheet zodat je snel je commando's kan terugvinden. Deze handleiding is bedoelt voor vi-beginners.

Daniel Robbins
Author

Eric Stockbridge
Author

Sven Vermeulen
Translator

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.