Als je op slackware vi op wilt starten met het commando vi, dan wordt de editor elvis opgestart. Hou daar dus rekening mee. Er bestaat in de directory /usr/bin een symbolic link naar elvis. Dit kun je zien door het commando:
user@slackware: ls -l /usr/bin/vi
te geven. Om met dit commando vi op te starten, moet je dit dus even aanpassen.
Overigens, alhoewel in dit hoofdstuk over vi gesproken wordt, wordt eigenlijk vi improved (VIM) besproken. Niet alle zaken die hier genoemd worden gelden namelijk voor vi.
Vi (de afkorting VI staat voor Visual Interface) kun je beschouwen als een editor. Je kunt er tekst mee editen, maar ook bijvoorbeeld sources voor je programma's, bijvoorbeeld C programma's. Vi kent een aantal ingebouwde commando's die je het leven een stuk eenvoudiger maken. Een nadeel, voor zover je dat een nadeel kunt noemen, is dat je kennis moet hebben van een aantal commando's. In dit hoofdstuk vind je die commando's terug waarmee je de meeste taken kunt uitvoeren.
Met vi kun je echter niet zomaar tekst invoeren. Vi kent namelijk twee verschillende modi, te weten een invoer modus (lees : insert) en een command modus. De eerst modus verklaart zich zelf, echter de tweede verdient een nadere uitleg.
Met betrekking tot de command modus zijn er een aantal verschillende soorten commando's te onderkennen. Er zijn commando's die voorafgegaan moeten worden door het / teken, commando's die voorafgegaan moeten worden door het : teken en commando's die zonder een teken voor het commando gebruikt kunnen worden. In de volgende paragrafen worden de verschillende modi en de daarbij horende zaken behandeld.
Vi kun je starten door vanaf de command line het commando vi in te geven:
user@slackware: vi
Na het invoeren van het voorgaande commando wordt VI gestart. Je kunt echter niet meteen beginnen met het invoeren van text aangezien je nu in de command modus zit. Om text in te voeren moet je aan VI aangeven dat je text wilt invoegen (insert). Je kunt nu op de insert toets drukken op je toetsenbord of je kunt de letter i indrukken op je toetsenbord. Hierna verschijnt links onderin het woord INSERT en kun je beginnen met het invoeren van text.
Om de text te bewaren moet je het write commando gebruiken. Bedenk wel dat als je vi op deze manier hebt opgestart, je nog geen bestandsnaam hebt opgegeven. Dit zul je dus moeten doen bij het bewaren (write) van je text. Om je text te bewaren moet je eerst weer terug naar de command modus. Dit doe je door op de Escape knop van je toetsenbord te drukken. Daarna voer je als volgt het write commando uit:
:w text.txt
De : betekent dat je dit teken op je toetsenbord moet ingeven. Hierna toets je de letter w om aan te geven dat je de text wilt bewaren (write) en hierna geef je de naam op van het bestand waarin je de text wilt bewaren.
Je kunt ook op het moment dat je vi opstart opgeven welk bestand je wilt bewerken of, als je een nieuw bestand maakt, de naam van dit nieuwe bestand meegeven als zogenaamde parameter. Vi zal, als het bestand bestaat, deze openen waarna je, natuurlijk rekening houdend met insert mode e.d., het bestand kunt editen. Het openen van een dergelijk bestand doe je zo:
user@slackware:vi test.txt
Een andere mogelijkheid is het opstarten van vi waarna je opgeeft, in de command mode van vi, welk bestand je wilt bewerken (of lezen voor mijn part). Om dit te doen geef je binnen vi het volgende commando:
:e test.txt
Het meest essentiele weet je nu : hoe een stuk text te maken en op te slaan en hoe je een bestand moet maken cq openen. Er zijn natuurlijk nog veel meer dingen die je wilt doen, bijvoorbeeld een stuk text kopieren of verwijderen. Voordat ik je iets vertel over kopieren, moet je het volgende weten. Let wel : het stukje over buffers is eigenlijk bedoelt voor iemand die al weet hoe je moet kopieren en dergelijke. Laat je dus hier niet door van de wijs brengen en sla dit deel desnoods over.
Als je tekst kopieert, dan wordt deze tekst tijdelijk ergens opgeslagen. Dit ergens wordt een buffer genoemd, een stukje geheugen. Trouwens, ook tijdens het schrijven van text wordt deze tekst ook in een buffer opgeslagen totdat je het geschrevene opslaat op bijvoorbeeld je schijf en je de editor verlaat. Vi kent 27 buffers, waarvan er eentje de zogenaamde onbenoemde buffer is oftewel de buffer die gebruikt wordt als jij niet opgeeft welke buffer er gebruikt moet worden. Je kunt zelf opgeven, als je dit wilt, naar welke buffer iets geplaats moet worden. Laat je hierdoor niet van de wijs brengen; ook als je dit niet doet dan is er niks aan de hand. VI gebruikt dan gewoon de "standaard" buffer.
Zoals ik al zei, kent vi 27 buffers. De eerste is de "default" buffer en die gebruik je als je verder niks opgeeft. Wil je nu een andere buffer gebruiken dan kun je dit doen middels de letters van het alfabet. Dus de letter "a" staat voor buffer a enzovoorts. Als je dus iets in buffer a wilt plaatsen, bijvoorbeeld iets wat je wilt kopieren, dan doe je dit als volgt:
"a2yy
Bovenstaand voorbeeld houdt in dat je twee regels naar de buffer a kopieerd. Let op het teken ". Dit betekent dat de inhoud van buffer a overschreven mag worden. Als je in plaats van het overschrijven van de buffer een aantal regels aan het eind van de buffer wilt plaatsen, dan moet je de hoofdletter A gebruiken in plaats van de kleine letter a, dus zo:
"A2yy
Overigens : deze commando's zijn natuurlijk niet zichtbaar als je ze gebruikt. Let dus goed op wat je doet!
Goed, back to basic. Stel, je wilt een aantal regels kopieren. De tekst die je hebt ziet er zo uit:
Dit is de eerste regel Dit is een andere regel Tja, weer een andere regel, t wordt een beetje saai zo
Als je nu de eerste regel wilt kopieren en na de laatste regel wilt plaatsen, ga dan met je cursor op de eerste regel staan op de letter D van Dit en druk twee keer op de toets van je toestenbord waar het teken y op staat. Deze y staat in dit geval voor yank, oftewel kopieer. Het commando wat je dus geeft is : yy
Ga nu naar de laatste regel, dus ga op de laatste regels staan en paste de text met het commando p. Bedenk hierbij dat dit commando's zijn die je in de command modus uit moet voeren waarbij geen : of / teken gebruikt hoeft te worden. Bedenk ook dat het pasten van text gebeurt na de regel waarop je staat. Voordat je tekst paste moet je natuurlijk wel de command modus actief hebben, denk daarom!
Als het goed is zal de text er nu als volgt uitzien:
Dit is de eerste regel Dit is een andere regel Tja, weer een andere regel, t wordt een beetje saai zo Dit is de eerste regel
Het deleten van tekst doe je eenvoudig met met het dd commando. Ook hier weer geldt dat je meerdere regels kunt verwijderen door een getal, bijvoorbeeld 3 om drie regels te verwijderen, op te geven voor het dd commando.
Knippen en plakken van tekst werkt op dezelfde manier als kopieren en plakken met de uitzondering van het gebruikte knip commando. Het klinkt misschien gek, maar om te knippen kun je het delete commando, dd, gebruiken. Wat er eigenlijk gebeurt bij het deleten van tekst is dat deze in een buffer opgeslagen wordt, immers je kunt verwijderen ook weer ongedaan maken dus ergens moet deze tekst nog aanwezig zijn. Dus een regel, of meerdere regels, kun je met het paste (p) commando op een andere plaats in de tekst zetten. Knippen en plakken zogezegd.
In deze paragraaf zijn de verschillende commando's behandeld om hele regels te knippen kopieren en dergelijke. Je kunt ook bijvoorbeeld een woord kopieren en knippen. In plaats van de dubbele aanduiding yy of dd plaats je op de eerste positie van het commando de letter w van woord (eigenlijk word want het is natuurlijk engels) dus :
yw
betekent het kopieren van een woord en
dw
betekent dat je een woord wilt verwijderen.
Voor het zoeken van tekst gebruik je het / commando. Stel je wilt het woord slackware in een bestand zoeken dat ziet het zoek commando er als volgt uit:
/slackware
Bedenk dat vi zoekt vanaf de plaats waar je cursor in de tekst staat. Wil je vanaf het begin van de tekst zoeken dat moet je zorgen dat je cursor aan het begin van je tekst staat. Je kunt ook opgeven in welke richting er gezocht moet worden. Als je vanaf de cursor positie tot het begin van je tekst wilt zoeken dan gebruik je het vraagteken (?):
?slackware
Dus met / zoek je vanaf de cursor positie naar het einde van de tekst en met ? zoek je vanaf de cursor positie naar het begin (backwards) van de tekst. Als je hetgeen gevonden hebt waar je naar zocht en je wilt kijken of de string waar je naar zocht vaker voorkomt, dan kun je dit doen met het n (next) commando. Met het N commando kun je een volgend voorkomen van de zoek string in de tegengestelde richting zoeken. Stel, je zoekt op slackware met het ? commando, dus terug in de tekst. Als je deze string hebt gevonden en je wilt nu verder zoeken maar dan naar het einde van de tekst, dan gebruik je het N (dus hoofdletter n) commando.
Er kunt tekst op verschillende manieren veranderen. Stel je wilt een woord vervangen. Dan kun je twee keer de insert toets op je toetsenbord indrukken waarna je tekst kunt overtypen. Een andere manier om een woord te vervangen in de zin waar de cursor zich bevindt is het het volgende commando:
:s/suse/slackware
Om alle voorkomens van een woord in de zin waar de cursor zich bevindt te vervangen kun je het volgende commando gebruiken:
:s/suse/slackware/g
Bovenstaand commando verandert de string suse in slackware in de zin waar de cursor staat. Als je nu alle voorkomens in de tekst van suse in slackware wilt veranderen dan kun je dit op de volgende manier doen:
:%s/suse/slackware
Het is heel goed mogelijk om vi aan je smaak aan te passen. Zo kun je tijdens een vi sessie met het set commando een aantal opties aan- of uitzetten. Helaas gelden deze aanapssingen alleen voor je huidige sessie, dus waarschijnlijk zul je je eigen aanpassingen een wat permanenter karakter willen geven. Om dit te doen moet je zorgen dat er een .vimrc (let op de punt voor de bestandsnaam) bestand in je home directory aanwezig is. Als deze nog niet bestaat dan moet je deze even creeeren.
Je kunt erg veel opties zelf bepalen met behulp van dit configuratie bestand. Zo kun je bijvoorbeeld bepalen of je syntax highliting aan wilt hebben tijdens het editen van een source programma, je kunt op deze manier macro's gebruiken om je vi leven iets eenvoudiger te maken.
Hieronder volgen een aantal opties die je in je .vimrc bestand kan zetten.
number : hiermee kun je regel nummering aanzetten showmatch : hiermee worden overeenkomstige haken getoond, dus { en } backup : hiermee wordt een kopie bijgehouden als je een tekst aan het editen bent syntax on : syntax highliting aan zetten
Alle opties die je in het .vimrc bestand plaatst, moet je als volgt noteren:
set number set syntax on
Zie voor opties en dergelijke het voorbeeld vimrc bestand wat met jou kopie van vi is meegeleverd.
dd : delete c.q. knip yy : kopieer :q : quit, verlaat vi :q! : verlaat vi zonder de veranderingen door te voeren p : paste (plakken) u : maak iets ongedaan :w : schrijf, bewaar :wq : bewaar en einde vi x : verwijderen van 1 karakter / : zoek naar een string vanaf cursor positie naar einde van het bestand ? : zoek naar een string van cursor positie naar het begin van het bestand n : herhaal actie (next) :set : een optie "zetten" voor vi :set all: laat alle mogelijke parameters zien die je in kunt stellen