vi leren -- de cheatsheet methode
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 |
 |
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 |
 |
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 |
 |
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 |
 |
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 |
 |
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 |
 |
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.
|