In dit hoofdstuk, zullen we begrijpen hoe de vi Editor werkt in Unix. Er zijn veel manieren om bestanden te bewerken in Unix. Bestanden bewerken met de scherm-georiënteerde teksteditor vi is een van de beste manieren. Met deze editor kunt u regels bewerken in de context van andere regels in het bestand.
Er is nu ook een verbeterde versie van de vi editor beschikbaar, die de VIM wordt genoemd. VIM staat hier voor Vi IMproved.
vi wordt over het algemeen beschouwd als de de facto standaard in Unix-editors omdat –
-
hij meestal beschikbaar is op alle smaken Unix-systemen.
-
zijn implementaties over de hele linie zeer vergelijkbaar zijn.
-
Het vereist zeer weinig resources.
-
Het is gebruiksvriendelijker dan andere editors, zoals de ed of de ex.
U kunt de vi editor gebruiken om een bestaand bestand te bewerken of om een nieuw bestand vanaf nul te maken. U kunt deze editor ook gebruiken om alleen een tekstbestand te lezen.
Starten van de vi Editor
De volgende tabel geeft een overzicht van de basiscommando’s om de vi editor te gebruiken –
Sr.nr. | Commando & Omschrijving |
---|---|
1 |
vi bestandsnaam Creëert een nieuw bestand als het nog niet bestaat, anders opent een bestaand bestand. |
2 |
vi -R bestandsnaam Opent een bestaand bestand in de alleen-lezen modus. |
3 |
view bestandsnaam Openen van een bestaand bestand in de alleen-lezen-modus. |
Hieronder volgt een voorbeeld om een nieuw bestand aan te maken testfile als het nog niet bestaat in de huidige werkdirectory –
$vi testfile
Het bovenstaande commando genereert de volgende uitvoer –
|~~~~~~~~~~~~"testfile"
Je zult een tilde (~) zien op elke regel na de cursor. Een tilde staat voor een ongebruikte regel. Als een regel niet begint met een tilde en leeg lijkt te zijn, is er een spatie, tab, newline, of een ander niet zichtbaar karakter aanwezig.
U heeft nu een open bestand om mee aan de slag te gaan.
Bewerkingsmodi
Tijdens het werken met de vi editor komen we gewoonlijk de volgende twee modi tegen –
-
Commando modus – In deze modus kunt u administratieve taken uitvoeren, zoals het opslaan van bestanden, het uitvoeren van commando’s, het verplaatsen van de cursor, knippen (yanking) en plakken van regels of woorden, en ook zoeken en vervangen. In deze modus wordt alles wat u typt als een opdracht geïnterpreteerd.
-
Invoegmodus – In deze modus kunt u tekst in het bestand invoegen. Alles wat u in deze modus typt, wordt geïnterpreteerd als invoer en in het bestand geplaatst.
vi start altijd in de opdrachtmodus. Om tekst in te voeren, moet u in de invoegmodus zijn; daarvoor hoeft u alleen maar i te typen. Om uit de invoegmodus te komen, drukt u op de Esc-toets, waarmee u teruggaat naar de opdrachtmodus.
Hint – Als u niet zeker weet in welke modus u zich bevindt, drukt u tweemaal op de Esc-toets; hiermee gaat u naar de opdrachtmodus. U opent een bestand met de vi editor. Begin met het typen van enkele tekens en kom dan in de commandomodus om het verschil te begrijpen.
Uit vi stappen
Het commando om uit vi te stappen is :q. Eenmaal in de commandomodus typt u een dubbele punt, en ‘q’, gevolgd door return. Als uw bestand op enigerlei wijze is gewijzigd, zal de editor u hiervoor waarschuwen, en u niet laten stoppen. Om deze melding te negeren, is het commando om vi af te sluiten zonder op te slaan :q!. Hiermee verlaat u vi zonder de wijzigingen op te slaan.
Het commando om de inhoud van de editor op te slaan is :w. Je kunt het bovenstaande commando combineren met het quit commando, of :wq en return gebruiken.
De makkelijkste manier om je wijzigingen op te slaan en vi te verlaten is met het ZZ commando. Als u in de opdrachtmodus bent, typt u ZZ. Het ZZ commando werkt op dezelfde manier als het :wq commando.
Wilt u een bepaalde naam voor het bestand opgeven/opgeven, dan kan dat door deze op te geven na de :w. Als u bijvoorbeeld het bestand waaraan u werkt wilt opslaan als een andere bestandsnaam, genaamd bestandsnaam2, typt u :w bestandsnaam2 en keert u terug.
Verplaatsen binnen een bestand
Om binnen een bestand te verplaatsen zonder uw tekst te beïnvloeden, moet u in de commandomodus zijn (druk twee keer op Esc). In de volgende tabel staan een paar commando’s die u kunt gebruiken om één teken per keer te verplaatsen –
Sr.nr. | Commando & Omschrijving |
---|---|
1 |
k Verplaatst de cursor een regel omhoog één regel |
2 |
j Verplaatst de cursor één regel omlaag |
3 |
h Verplaatst de cursor één teken naar links |
4 |
l Verplaatst de cursor één teken naar rechts positie |
De volgende punten moeten in acht worden genomen om binnen een bestand te verplaatsen –
-
vi is hoofdletter-gevoelig. U moet op het hoofdlettergebruik letten wanneer u de commando’s gebruikt.
-
De meeste commando’s in vi kunnen worden voorafgegaan door het aantal keren dat u de actie wilt laten plaatsvinden. Bijvoorbeeld 2j verplaatst de cursor twee regels naar beneden.
Er zijn nog veel meer manieren om in vi binnen een bestand te bewegen. Denk eraan dat u in de opdrachtmodus moet zijn (druk tweemaal op Esc). In de volgende tabel staan een aantal commando’s om door het bestand te bewegen –
Hieronder staat de lijst met commando’s om door het bestand te bewegen.
Sr.nr. | Commando & Omschrijving |
---|---|
1 | 0 of |
Plaatst de cursor aan het begin van een regel |
Plaatst de cursor aan het eind van een regel |
|
3 |
w Plaatst de cursor naar het volgende woord |
4 |
b Plaatst de cursor naar het vorige woord |
b
Plaatst de cursor naar het volgende woord |
|
5 |
( Positioneert de cursor aan het begin van de huidige zin |
) Plaatst de cursor aan het begin van de volgende zin |
|
7 |
E Verplaatst de cursor naar het einde van het door spaties begrensde woord |
8 |
{ Verplaatst een alinea terug |
9 |
} Verplaatst een alinea vooruit |
10 |
] Verplaatst een paragraaf naar voren |
12 |
n| Verplaatst naar de kolom n in de huidige regel |
13 |
1G Verplaatst naar de eerste regel van het bestand |
14 |
G Verplaatst naar de laatste regel van het bestand |
15 |
nG Verplaatst naar de n-de regel van het bestand |
16 |
:n Verplaatst zich naar de n-de regel van het bestand |
17 |
fc Verplaatst zich vooruit naar c |
18 |
Fc Verplaatst terug naar c |
19 |
H Verplaatst zich naar de bovenkant van het scherm |
20 |
nH Verplaatst zich naar de n-de regel vanaf de bovenkant van het scherm |
21 |
M Verplaatst naar het midden van het scherm |
L Verplaatst naar de onderkant van het scherm |
|
23 |
nL Verplaatst naar de n-de regel vanaf de onderkant van het scherm |
24 |
😡 Kolom gevolgd door een getal plaatst de cursor op het regelnummer dat wordt weergegeven door x |
Control-opdrachten
De volgende opdrachten kunnen met de Control-toets worden gebruikt om functies uit te voeren zoals in de onderstaande tabel is aangegeven –
Hieronder vindt u de lijst met controleopdrachten.
Sr.nr. | Commando & Omschrijving |
---|---|
1 |
CTRL+d Verplaatst 1/2 scherm naar voren |
2 |
CTRL+f Verplaatst één volledig scherm naar voren |
3 |
CTRL+u Verplaatst 1/2 scherm terug |
4 |
CTRL+b Verplaatst één volledig scherm naar achteren |
5 |
CTRL+e Verplaatst het scherm één regel omhoog |
6 |
CTRL+y Verplaatst het scherm één regel naar beneden |
7 |
CTRL+u Verplaatst het scherm 1/2 pagina omhoog |
8 |
CTRL+d Verplaatst het scherm 1/2 pagina naar beneden |
9 |
CTRL+b Verplaatst het scherm één pagina omhoog |
10 |
CTRL+f Verplaatst het scherm één pagina naar beneden |
11 |
CTRL+I Herschrijft het scherm |
Bestanden bewerken
Om het bestand te bewerken, moet u in de invoegmodus zijn. Er zijn veel manieren om de invoegmodus te openen vanuit de opdrachtmodus –
Sr.nr. | Commando & Omschrijving |
---|---|
1 |
i Voegt tekst in vóór de huidige cursorlocatie |
2 |
I Tekst wordt ingevoegd aan het begin van de huidige regel |
3 |
a Tekst wordt ingevoegd na de huidige cursorlocatie |
4 |
A Tekst wordt ingevoegd aan het eind van de huidige regel |
o Creëert een nieuwe regel voor tekstinvoer onder de cursorlocatie |
6 | O
Maakt een nieuwe regel voor tekstinvoer boven de cursorlocatie |
Tekens verwijderen
Hier vindt u een lijst met belangrijke commando’s, die gebruikt kunnen worden om tekens en regels in een open bestand te verwijderen –
Sr.No. | Commando & Omschrijving |
---|---|
1 |
x Wist het teken onder de cursorlocatie |
X Verwijdert het teken vóór de cursorpositie |
|
dw Verwijdert van de huidige cursorpositie naar het volgende woord |
|
d^ Verwijdert van de huidige cursorpositie naar het begin van de regel |
|
5 |
d$ Verwijdert van de huidige cursorpositie naar het einde van de regel |
6 |
D Verwijdert vanaf de cursorpositie tot het einde van de huidige regel |
dd Verwijdert de regel waar de cursor op staat |
Zoals hierboven vermeld, kunnen de meeste commando’s in vi worden voorafgegaan door het aantal keren dat de actie moet plaatsvinden. Bijvoorbeeld 2x verwijdert twee tekens onder de cursor en 2dd verwijdert twee regels waar de cursor op staat.
Het is aan te bevelen de commando’s te oefenen voordat we verder gaan.
Wijzig commando’s
Je hebt ook de mogelijkheid om tekens, woorden of regels in vi te wijzigen zonder ze te verwijderen. Hier zijn de relevante commando’s –
Sr.No. | Commando & Beschrijving |
---|---|
1 |
cc Verwijdert de inhoud van de regel, waardoor u in de invoegmodus blijft. |
2 |
cw Verandert het woord waar de cursor op staat van de cursor naar de kleine letter w aan het eind van het woord. |
r Vervangt het teken onder de cursor. vi keert terug naar de opdrachtmodus nadat de vervanging is ingevoerd. |
|
4 |
R Overschrijft meerdere tekens, beginnend met het teken dat zich op dat moment onder de cursor bevindt. U moet Esc gebruiken om het overschrijven te stoppen. |
5 |
s Vervangt het huidige teken met het teken dat u typt. Daarna blijft u in de invoegmodus. |
6 |
S Verwijdert de regel waar de cursor op staat en vervangt deze door de nieuwe tekst. Nadat de nieuwe tekst is ingevoerd, blijft vi in de invoegmodus. |
Kopieer- en plakopdrachten
U kunt regels of woorden van de ene plaats kopiëren en ze vervolgens op een andere plaats plakken met de volgende opdrachten –
Sr.Nr. | Commando & Omschrijving |
---|---|
1 |
yy Kopieert de huidige regel. |
2 |
yw Kopieert het huidige woord vanaf het teken waar de kleine letter w cursor op staat, tot het einde van het woord. |
3 |
p Plaatst de gekopieerde tekst achter de cursor. |
4 |
P Plaatst de gekopieerde tekst voor de cursor. |
Geavanceerde commando’s
Er zijn enkele geavanceerde commando’s die de dagelijkse bewerking vereenvoudigen en een efficiënter gebruik van vi mogelijk maken –
Hieronder volgt de lijst met geavanceerde commando’s.
Sr.nr. | Commando & Omschrijving |
---|---|
1 |
J Je voegt de huidige regel samen met de volgende. Een aantal j-opdrachten voegt veel regels samen. |
2 |
<< Verschuift de huidige regel met één verschuivingsbreedte naar links. |
3 |
>> Verschuift de huidige regel naar rechts met één verschuivingsbreedte. |
4 |
~ Verschuift het teken onder de cursor naar een ander teken. |
5 |
^G Druk tegelijkertijd op de toetsen Ctrl en G om de huidige bestandsnaam en de status te tonen. |
6 |
U Herstelt de huidige regel in de toestand waarin hij zich bevond voordat de cursor de regel betrad. |
u Hiermee wordt de laatste wijziging die in het bestand is aangebracht ongedaan gemaakt. Door nogmaals ‘u’ te typen wordt de wijziging opnieuw uitgevoerd. |
|
8 |
J Samenvoegt de huidige regel met de volgende. Een telling voegt zoveel regels samen. |
9 |
:f Weergave van de huidige positie in het bestand in % en de bestandsnaam, het totaal aantal bestanden. |
10 |
:f bestandsnaam Hernoemt het huidige bestand naar bestandsnaam. |
11 |
:w bestandsnaam Schrijft naar bestand bestandsnaam. |
12 |
:e bestandsnaam Opent een ander bestand met bestandsnaam. |
13 |
:cd dirname Verandert de huidige werkdirectory in dirname. |
:e # Schakelt tussen twee geopende bestanden. |
|
15 |
:n In het geval dat u meerdere bestanden opent met vi, gebruikt u :n om naar het volgende bestand in de reeks te gaan. |
16 |
:p In het geval dat u meerdere bestanden met vi opent, gebruikt u :p om naar het vorige bestand in de reeks te gaan. |
17 |
:N In het geval dat u meerdere bestanden met vi opent, gebruikt u :N om naar het vorige bestand in de reeks te gaan. |
18 |
:r bestand Leest bestand en voegt het in na de huidige regel. |
19 |
:nr bestand Leest bestand en voegt het in na de regel n. |
Word and Character Searching
De vi editor kent twee soorten zoekopdrachten: string en karakter. Voor het zoeken naar tekenreeksen worden de / en ? commando’s gebruikt. Wanneer u deze commando’s start, wordt het zojuist getypte commando op de laatste regel van het scherm getoond, waar u de specifieke tekenreeks typt waarnaar moet worden gezocht.
Deze twee commando’s verschillen alleen in de richting waarin wordt gezocht –
-
Het / commando zoekt voorwaarts (naar beneden) in het bestand.
-
De ? opdracht zoekt achterwaarts (omhoog) in het bestand.
De n- en N-commando’s herhalen de vorige zoekopdracht in respectievelijk dezelfde of tegenovergestelde richting. Sommige tekens hebben een speciale betekenis. Deze tekens moeten worden voorafgegaan door een backslash (\) om te worden opgenomen als onderdeel van de zoekuitdrukking.
Sr.nr. | Character &Description |
---|---|
1 |
^ Zoekt aan het begin van de regel (Gebruik aan het begin van een zoekuitdrukking). |
2 |
Matcht één enkel teken. |
3 |
* Matcht nul of meer van het vorige teken. |
4 |
Einde van de regel (Gebruik aan het eind van de zoekuitdrukking). |
5 |
[ Begint een reeks overeenkomende of niet-overeenkomende uitdrukkingen. |
6 |
< Dit wordt in een expressie gezet die is ontsnapt met de backslash om het einde of het begin van een woord te vinden. |
7 |
> Dit helpt zie de ‘<‘-tekenbeschrijving hierboven. |
De tekenzoekopdracht zoekt binnen één regel om een teken te vinden dat na de opdracht is ingevoerd. De commando’s f en F zoeken alleen naar een teken op de huidige regel. f zoekt voorwaarts en F zoekt achterwaarts en de cursor gaat naar de positie van het gevonden teken.
De commando’s t en T zoeken alleen naar een teken op de huidige regel, maar voor t gaat de cursor naar de positie voor het teken, en T zoekt de regel terug naar de positie na het teken.
Instellingscommando’s
U kunt het uiterlijk van uw vi scherm veranderen met behulp van de volgende :instellingscommando’s. Zodra u in de commandomodus bent, typt u :set gevolgd door een van de volgende commando’s.
Sr.nr. | Commando & Omschrijving |
---|---|
1 |
:set ic Geeft geen aandacht aan de zaak bij het zoeken |
2 |
:set ai Stelt auto-indent in |
3 |
:set noai Zet auto-indent |
4 |
:set nu Weergave van regels met regelnummers aan de linkerkant |
5 |
:set sw Stelt de breedte van een softwaretabstop in. U zou bijvoorbeeld een schuifbreedte van 4 instellen met dit commando – :set sw = 4 |
6 |
:set ws Als wrapscan is ingesteld, en het woord wordt niet onderaan het bestand gevonden, dan wordt geprobeerd het aan het begin te zoeken |
7 |
:set wm Als deze optie een waarde heeft groter dan nul, dan zal de editor automatisch “word wrap” doen. Om bijvoorbeeld de woordomloop in te stellen op twee tekens, zou u dit typen: :set wm = 2 |
8 |
:set ro Het bestandstype wordt gewijzigd in “alleen-lezen” |
9 |
:set term Printen type terminal |
10 |
:set bf Onttrekt controletekens aan invoer |
Commando’s uitvoeren
De vi heeft de mogelijkheid om commando’s vanuit de editor uit te voeren. Om een commando uit te voeren, hoeft u alleen maar naar de commandomodus te gaan en :! commando te typen.
Wilt u bijvoorbeeld controleren of een bestand bestaat voordat u probeert uw bestand met die bestandsnaam op te slaan, dan kunt u :! ls typen en u krijgt de uitvoer van ls op het scherm te zien.
U kunt op een toets drukken (of op de escape-sequentie van het commando) om terug te keren naar uw vi sessie.
Tekst vervangen
Het substitutie commando (:s/) stelt u in staat om snel woorden of groepen woorden te vervangen binnen uw bestanden. Hieronder volgt de syntaxis om tekst te vervangen –
:s/search/replace/g
De g staat voor globaal. Het resultaat van dit commando is dat alle voorkomens op de regel van de cursor worden gewijzigd.
Belangrijke punten om op te letten
De volgende punten zullen bijdragen aan uw succes met vi –
-
U moet in opdrachtmodus zijn om de commando’s te kunnen gebruiken. (Druk op elk moment tweemaal op Esc om er zeker van te zijn dat u in de opdrachtmodus bent.)
-
U moet voorzichtig zijn met de opdrachten. Deze zijn hoofdlettergevoelig.
-
U moet in de invoegmodus zijn om tekst in te voeren.