File: vi.xml

package info (click to toggle)
doc-linux-nl 20051127-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 16,408 kB
  • ctags: 94
  • sloc: xml: 47,403; makefile: 312; perl: 193; sh: 116; ansic: 12; csh: 9
file content (1165 lines) | stat: -rw-r--r-- 41,228 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
<appendix id="vi-chapter"><title>Introductie Vi</title>
<para>
<indexterm><primary>vi</primary></indexterm>
<command>vi</command> (uitgesproken als "vee eye") is echt de enige editor 
die je in vrijwel elke installatie van &unix; terugvindt. Het werd 
oorspronkelijk geschreven op de Universiteit van Californi&euml; bij
Berkeley en in bijna
<indexterm><primary>University of California, Berkeley</primary></indexterm>
elke verkoperseditie van &unix;, en ook onder Linux is het te vinden.
In eerste instantie is het wat moeilijk aan te wennen, maar het biedt
veel krachtige features. Over het algemeen raden we een nieuwe gebruiker
aan Emacs<indexterm><primary>emacs</primary></indexterm>
te leren, wat gewoonlijk makkelijker in het
gebruik is. Echter mensen die op meer dan &eacute;&eacute;n platform
werken of bemerken dat ze Emacs niet prettig vinden, willen wellicht
een poging wagen aan <application>vi</application>.
</para>

<para>
Een beknopt historisch overzicht van <application>vi</application> is nodig voor het begrijpen 
hoe met de <keycap>k</keycap> de cursor &eacute;&eacute;n regel naar 
boven kan worden gegaan en waarom er drie verschillende gebruiksmodi zijn.
Als je vingers jeuken om de editor te leren kennen, dan zullen de twee tutorials
je begeleiden vanaf grofweg een beginner tot aan iemand met 
meer kennis van de opdrachtenset dan je naar alle waarschijnlijkheid
ooit nodig zult hebben. In dit hoofdstuk is ook een command guide
opgenomen, wat het een handige referentie maakt om naast de terminal
bij de hand te houden.
</para>

<para>
Zelfs als <application>vi</application> niet je reguliere teksteditor wordt, dan is de kennis
over het gebruik ervan geen tijdsverspilling. Het is vrijwel zeker dat
het &unix;-systeem dat je gebruikt &eacute;&eacute;n of andere variant van 
de <application>vi</application> editor heeft. Wellicht dat het nodig 
is van <application>vi</application> gebruik 
te maken voor de installatie van een andere editor, zoals Emacs. Veel 
Unix tools, applicaties en spellen gebruiken een subset van de 
<application>vi</application> opdrachtenset.
</para>

<sect1 id="vi-history"><title>Een beknopte geschiedenis van vi</title>
<para>
Vroegere teksteditors waren regelge&ouml;ri&euml;nteerd en werden typisch 
gebruikt vanaf domme terminals. Een typische editor die in deze modus
opereert is <emphasis>Ed</emphasis>. <indexterm><primary>ed</primary></indexterm>
De editor is krachtig en effici&euml;nt,
en gebruikt slechts een kleine hoeveelheid computerbronnen. Het werkte
goed met de display omgeving van die tijd. <application>vi</application> biedt de gebruiker
een visueel alternatief met een aanmerkelijk uitgebreidere opdrachtenset
in vergelijking met <application>ed</application>.
</para>

<para>
<application>vi</application>, zoals we het tegenwoordig kennen, begon als 
de regeleditor <application>ex</application>. <indexterm><primary>ex</primary></indexterm>
In feite wordt <application>ex</application> gezien als een speciale
bewerkingsmodus van <application>vi</application>, alhoewel in werkelijkheid
het omgekeerde waar is. De visuele component van <application>ex</application>
kan vanaf de opdrachtregel worden opgeroepen met de opdracht 
<application>vi</application> of binnen <application>ex</application>.
</para>

<para>
De <application>ex/vi</application> editor werd ontwikkeld op de Universiteit 
van Californi&euml; te Berkeley
<indexterm><primary>University of California, Berkeley</primary></indexterm>
door William Joy. <indexterm><primary>Joy, William</primary></indexterm>
Het werd oorspronkelijk geleverd als een
niet ondersteund utility totdat het officieel werd opgenomen in de
release van AT&amp;T System 5 Unix. Het werd zelfs met de opkomst van de 
modernere schermge&ouml;ri&euml;nteerde editors langzamerhand populairder.
</para>

<para>
Vanwege de populariteit van <application>vi</application> bestaan er veel kloonvarianten
en voor de meeste besturingssystemen zijn versies te vinden. Het is niet
de bedoeling van dit hoofdstuk alle beschikbare opdrachten onder
<application>vi</application> of varianten daarvan te beschrijven. 
Veel klonen zijn uitgebreid en hierin is het oorspronkelijke functioneren 
van <application>vi</application> gewijzigd.
De meeste klonen ondersteunen niet alle oorspronkelijke opdrachten van 
<application>vi</application>. 
</para>

<para>
Als je een recente kennis hebt van <application>ed</application> dan is 
<application>vi</application> makkelijk te leren. Zelfs als je niet van 
plan bent <application>vi</application> te gaan gebruiken als 
je reguliere editor, dan nog kan basiskennis van 
<application>vi</application> een pluspunt zijn.
</para>
</sect1>

<sect1 id="vi-ed"><title>Beknopte Ed Tutorial</title>
<para>
<indexterm><primary>ed</primary></indexterm>
Het doel van deze tutorial is ervoor te zorgen dat je aan de slag kunt met
<application>ed</application>. <application>ed</application> is ontworpen 
met als doel gemakkelijk in het gebruik te
zijn, en er is weinig oefening voor nodig om ermee aan de slag te kunnen gaan.
De beste manier om te leren is door te oefenen, dus volg de instructies op en 
probeer de editor voordat je vooruitloopt op zijn praktische voordelen.
</para>

<sect2 id="vi-mk-file"><title>Aanmaken van een bestand</title>
<para>
In <application>ed</application> kan slechts &eacute;&eacute;n bestand 
tegelijkertijd worden bewerkt. Volg het volgende voorbeeld om je eerste 
tekstbestand met <application>ed</application> aan te maken.
</para>

<para>
<screen>
<prompt>/home/larry# </prompt><userinput>ed</userinput><computeroutput>
a
Dit is mijn eerste tekstbestand met Ed.
Dit is echt leuk.
.
w firstone.txt</computeroutput>
<prompt>/home/larry# </prompt><userinput>q</userinput>
</screen>
</para>

<para>
Je kunt de inhoud van dit bestand verifi&euml;ren met het Unix-utility
concatenate.
</para>

<para>
<screen>
<prompt>/home/larry# </prompt><userinput>cat firstone.txt</userinput>
</screen>
</para>

<para>
In bovenstaand voorbeeld worden een aantal belangrijke aanwijzingen
ge&iuml;llustreerd. Je krijgt een leeg bestand wanneer je 
<application>ed</application> als zodanig aanroept. De toets 
<keycap>a</keycap> wordt gebruikt om tekst aan het bestand toe te voegen. 
Om de tekstinvoer te stoppen wordt in de eerste kolom van de tekst een punt 
<keycap>.</keycap> getypt. Voor het opslaan van de tekst in het bestand 
wordt de toets <keycap>w</keycap> gebruikt in combinatie met de naam
van het bestand en tenslotte wordt met <keycap>q</keycap> de editor verlaten.
</para>

<para>
De belangrijkste waarneming zijn de twee bewerkingsmodi.
In beginsel bevindt de editor zich in opdrachtmodus. Een opdracht
wordt gedefineerd door tekens, dus om te weten te komen wat de bedoeling
van de gebruiker is, kent <application>ed</application> een 
<emphasis>tekstmodus</emphasis> en een
<emphasis>opdrachtmodus</emphasis>.
</para>
</sect2>

<sect2 id="vi-edit-file"><title>Bewerken van een bestaand bestand</title>
<para>
Volg het volgende voorbeeld voor het toevoegen van een regel tekst aan
een bestaand bestand:
</para>

<para>
<screen>
<prompt>/home/larry# </prompt><userinput>ed firstone.txt</userinput>
<userinput>a
Dit is een nieuwe regel tekst.
.
w
q</userinput>
</screen>
</para>

<para>        
Als je het bestand controleert met <command>cat</command> dan zul je zien dat tussen
de oorspronkelijke eerste en tweede regel een nieuwe regel is ingevoegd.
Hoe wist <application>ed</application> waar het de nieuwe regel tekst moest invoegen?
</para>

<para>
Wanneer <application>ed</application> het bestand inleest, houdt het bij 
wat de huidige regel is. De opdracht <keycap>a</keycap> voegt de tekst toe
na de huidige regel. <application>ed</application> kan de tekst ook voor 
de huidige regel plaatsen met de toetsopdracht <keycap>i</keycap>.
Het effect hiervan is de invoeging van de tekst voor de huidige regel.
</para>

<para>
Nu is eenvoudig te zien dat <application>ed</application> regel voor regel bewerkingen op
de tekst uitvoert. Alle opdrachten kunnen worden toegepast op een gekozen regel.
</para>

<para>
Voor het toevoegen van een regel tekst aan het einde van een bestand:
</para>

<para>
<screen>
<prompt>/home/larry# </prompt><userinput>ed firstone.txt</userinput>
    $a
    De laatste regel tekst.
    .
    w
    q
</screen>
</para>

<para>
De opdrachtmodifier <keycap>&</keycap> vertelt <application>ed</application> 
de regel toe te voegen na de laatste regel. Voor het toevoegen van 
een regel na de eerste regel is de modifier <keycap>1</keycap>. 
De kracht is nu beschikbaar om de regel te
selecteren om een regel tekst na het regelnummer toe te voegen, of
een regel voor het regelnummer in te voegen.
</para>

<para>
Hoe weten we wat er op de huidige regel staat? De opdracht <keycap>p</keycap>
toont de inhoud van de huidige regel. Wil je de huidige regel wijzigen
in regel 2 en de inhoud van die regel bekijken dan geef je de volgende
opdrachten:
</para>

<para>
<screen>
<prompt>/home/larry# </prompt><userinput>ed firstone.txt</userinput>
    2p
    q
</screen>
</para>
</sect2>

<sect2 id="vi-rulenumbers"><title>Regelnummers in detail</title>
<para>
Je hebt gezien hoe je de inhoud van de huidige regel kunt weergeven, met
behulp van de opdracht <keycap>p</keycap>. We weten ook dat er 
regelnummermodifiers zijn voor de opdrachten. Voor het afdrukken van de 
inhoud van de tweede regel:
</para>

<para>
<screen>
    2p
</screen>
</para>

<para>
Er zijn een aantal speciale modifiers die verwijzen naar de posities die
gedurende de editsessie kunnen worden gewijzigd. De <keycap>&</keycap>
stelt de laatste regel van de tekst voor. Voor het afdrukken van de 
laatste regel:
</para>

<para>
<screen>
    $p
</screen>
</para>

<para>
Voor het huidige regelnummer wordt het speciale modifiersymbool
<keycap>.</keycap> gebruikt. Geef de huidige regel weer met behulp van een modifier:
</para>

<para>
<screen>
    .p
</screen>
</para>

<para>
Dit lijkt wellicht onnodig, maar het is zeer handig in de context van
regelnummerbereiken.
</para>

<para>
Om de inhoud van de tekst vanaf regel 1 tot en met 2 weer te geven, moet
aan <application>ed</application> het bereik worden opgegeven:
</para>

<para>
<screen>
    1,2p
</screen>
</para>

<para>
Het eerste nummer verwijst naar de beginregel, en het tweede nummer verwijst
naar de laatste regel. De huidige regel zal daarna het tweede nummer van
het opdrachtbereik worden.
</para>

<para>
De inhoud weergeven van het bestand vanaf het begin tot aan de huidige regel.
</para>

<para>
<screen>
    1,.p
</screen>
</para>

<para>
De inhoud weergeven vanaf de huidige regel tot aan het einde van het bestand.
</para>

<para>
<screen>
    .,$p
</screen>
</para>

<para>
Het enige dat nog overblijft is de inhoud van het gehele bestand weergeven,
wat aan jouzelf wordt overgelaten.
</para>

<para>
Hoe je de eerste 2 regels van het bestand kunt verwijderen:
</para>

<para>
<screen>
    1,2d
</screen>
</para>

<para>
De opdrachttoets <keycap>d</keycap> verwijdert de tekst regel voor regel. 
Voor het verwijderen van de gehele inhoud voer je uit:
</para>

<para>
<screen>
    1,$d
</screen>
</para>

<para>
Als je veel wijzigingen aan moet brengen en de inhoud van het bestand niet
wilt bewaren, dan is de beste optie de editor te verlaten zonder het
bestand van te voren weg te schrijven.
</para>

<para>
De meeste gebruikers gebruiken <application>ed</application> niet als belangrijkste voorkeurseditor.
De modernere editors bieden een volledig bewerkscherm en een flexibelere 
opdrachtenset. Ed biedt een goede introductie in <application>vi</application> en is van
hulp bij het uitleggen waar de opdrachtenset oorspronkelijk vandaan komt.
</para>
</sect2>
</sect1>

<sect1 id="vi-tutorial"><title>Snelstarttutorial in Vi</title>
<para>
Het doel van deze tutorial is je op weg te helpen met het gebruik van de
<application>vi</application> editor. 
Voor het kunnen volgen van deze tutorial wordt geen ervaring met <application>vi</application>
verondersteld, dus we beginnen met de tien basisopdrachten.
Deze fundamentele opdrachten volstaan voor het meeste werk dat nodig
is bij het gebruik van een editor, en je kunt naar behoefte je kennis
van <application>vi</application> uitbreiden. Het is aan te bevelen dat je tijdens het doornemen
van deze tutorial de beschikking hebt over een machine waarop je kunt oefenen.
</para>

<sect2 id="vi-calling"><title>vi aanroepen</title>
<para>
Voor het aanroepen van vi, typ je simpelweg de letters <application>vi</application> gevolgd
door de naam van het bestand dat je aan wilt maken.
Je krijgt een scherm met aan de linkerkant een kolom tildes <literal>~</literal>
te zien. <application>vi</application>
staat nu in de opdrachtmodus. Alles wat je nu intikt, zal worden 
ge&iuml;nterpreteerd als een opdracht, niet als in te voeren tekst. Om tekst 
in te kunnen voeren, moet je een opdracht intikken. De twee 
basisinvoeropdrachten zijn:
</para>

<para>
<screen>
    i     voeg links van de cursor tekst in
    a     voeg rechts van de cursor tekst toe
</screen>
</para>

<para>
Aangezien je je aan het begin van een leeg bestand bevindt, doet het er
niet toe welk van deze twee opdrachten je geeft. 
Typ er hier &eacute;&eacute;n van
en voer dan de volgende tekst in (een gedicht van Augustus DeMorgan 
aangetroffen in <emphasis>The Unix Programming Environment</emphasis>
van B.W. Kernighan en R. Pike):
</para>

<para>
<screen>
     Great fleas have little fleas&lt;Enter>
       upon their backs to bite 'em,&lt;Enter>
     And little fleas have lesser fleas&lt;Enter>
       and so ad infinitum.&lt;Enter>
     And the great fleas themselves, in turn,&lt;Enter>
       have greater fleas to go on;&lt;Enter>
     While these again have greater still,&lt;Enter>
       and greater still, and so on.&lt;Enter>
     &lt;Esc>
</screen>
</para>

<para>
Je drukt de <keycap>Esc</keycap> toets in om het invoegen te be&euml;indigen en
terug te keren naar de opdrachtmodus.
</para>
</sect2>

<sect2 id="vi-cursor"><title>Cursorverplaatsingsopdrachten</title>
<para>
<screen>
    h     verplaats de cursor een positie naar links
    j     verplaats de cursor een regel naar beneden
    k     verplaats de cursor een regel naar boven
    l     verplaats de cursor een positie naar rechts
</screen>
</para>

<para>
Deze opdrachten kunnen worden herhaald door de toets ingedrukt te houden.
Probeer nu door je tekst te manoeuvreren.
Probeer je een onmogelijke verplaatsing, zoals b.v., het indrukken van
de letter <emphasis>k</emphasis> wanneer de cursor zich op de bovenste regel bevindt,
dan zal het scherm flitsen, of de terminal een pieptoon laten horen. 
Maak je geen zorgen, het kan geen kwaad, en het beschadigt je bestand niet.
</para>
</sect2>

<sect2 id="vi-removing-text"><title>Tekst verwijderen</title>
<para>
<screen>
    x     verwijder de tekst onder de cursor
    dd    verwijder een regel
</screen>
</para>

<para>
Verplaats de cursor naar de tweede regel en positioneer het zo dat deze
onder de apostrophe in <emphasis>'em</emphasis> komt te staan. 
Druk op de letter <keycap>x</keycap> en de <emphasis>'</emphasis> verdwijnt. 
Druk nu op de letter <keycap>i</keycap> om de invoegmodus
te activeren en typ de letters <emphasis>th</emphasis>. Druk op <keycap>Esc</keycap> 
wanneer je klaar bent.
</para>
</sect2>

<sect2 id="vi-saving-file"><title>Bestand opslaan</title>
<para>
<screen>
    :w    opslaan (naar disk schrijven)
    :q    exit 
</screen>
</para>

<para>
Zorg dat je je in de opdrachtmodus bevindt door het indrukken van de
<keycap>Esc</keycap>-toets. Typ nu <literal>:w</literal>. Hiermee zal 
je werk worden opgeslagen door het naar een diskbestand weg te schrijven.
</para>

<para>
De opdracht voor het be&euml;indigen van vi is <keycap>q</keycap>.
Als je het opslaan en be&euml;indigen wilt combineren, typ je gewoon 
<literal>:wq</literal>. Er bestaat tevens een handig synoniem voor 
<literal>:wq</literal>, namelijk <literal>ZZ</literal>.
Aangezien veel van je programmeerwerk zal bestaan uit het uitvoeren van
een programma, het aantreffen van een probleem, het programma aanroepen in
een editor om een kleine wijziging aan te brengen en de editor te
be&euml;indigen om het programma nogmaals uit te voeren, zul je de opdracht
<literal>ZZ</literal> weten te waarderen (In werkelijkheid is 
<literal>ZZ</literal> geen exact synoniem voor <literal>:wq</literal>. 
Als je geen wijzigingen in het bestand hebt aangebracht dat je sinds de 
laatste keer opslaan hebt bewerkt, dan zal <literal>ZZ</literal> de editor 
gewoon verlaten, terwijl je met <literal>:wq</literal> het werk (overbodig) 
zal opslaan voordat je de editor verlaat.)
</para>

<para>
Als je het hopeloos hebt verknald en helemaal overnieuw wilt beginnen, dan
kun je <literal>:q!</literal> intikken (denk eraan eerst de 
<keycap>Esc</keycap> toets in te drukken). Als je de <literal>!</literal> 
achterwege laat, zal vi niet toelaten dat je de editor verlaat zonder het 
werk op te slaan.
</para>
</sect2>

<sect2 id="vi-and-now"><title>En verder</title>
<para>
De tien opdrachten die je zojuist hebt geleerd zouden voldoende moeten
zijn voor je werk. Je hebt echter slechts met een klein deel van de
vi-editor kennisgemaakt.
Er zijn opdrachten om materiaal van de ene naar de andere lokatie in een
bestand te kopi&euml;ren, om materiaal te verplaatsen
van het ene naar het andere bestand, om de editor meer af te stemmen
op je persoonlijke smaak, enz. In totaal zijn er ongeveer 150 opdrachten.
</para>
</sect2>
</sect1>

<sect1 id="vi-advanced-tutorial"><title>Geavanceerde Vi Tutorial</title>
<para>
Het voordeeel en de kracht van <application>vi</application> is de 
mogelijkheid het met succes te gebruiken terwijl je slechts een kleine 
subset van de opdrachten kent. De meeste gebruikers van 
<application>vi</application> voelen zich in het begin wat onhandig,
echter na een korte tijd voelen ze de behoefte aan meer kennis van de 
opdrachten.
</para>

<para>
In de volgende tutorial wordt verondersteld dat de gebruiker de 
snelstarttutorial heeft voltooid en zich daarom comfortabel voelt
bij het gebruik van <application>vi</application>. Er zullen een aantal 
van de krachtiger features van <application>ex/vi</application> uiteen 
worden gezet van het kopi&euml;ren van tekst tot aan macrodefinities. 
Een deel gaat over <application>ex</application> en de instellingen ervan, 
wat zal helpen bij het aanpassen van de editor. In deze tutorial worden de 
opdrachten beschreven, in plaats van dat ze set per set worden doorgenomen.
Het is aan te bevelen dat je wat tijd besteedt aan het proberen van de
opdrachten op wat voorbeeldtekst, waarvan je je kunt veroorloven die
achteraf te verwijderen.
</para>

<para>
In deze tutorial wordt geen uiteenzetting gegeven van alle opdrachten van
<application>vi</application>, alhoewel wel alle over het algemeen gebruikte 
opdrachten en meer zullen worden behandeld. Ook al koos je voor het gebruik 
van een alternatieve teksteditor, dan nog is het te hopen dat je 
<application>vi</application> zult waarderen en wat het biedt voor degenen 
die wel verkiezen het te gebruiken.
</para>

<sect2 id="vi-moving-around"><title>Manoeuvreren</title>
<para>
De meest fundamentele functionaliteit van een editor is het binnen de tekst
verplaatsen van de cursor. Hier zijn meer verplaatsingsopdrachten:
</para>

<para>
<screen>
    h          verplaats de cursor een teken naar links
    j          ga een regel naar beneden
    k          ga een regel naar boven
    l          ga een teken naar rechts

    In een aantal implementaties kunnen ook de pijltjes-
    toetsen worden gebruikt om de cursor te verplaatsen.

    w          ga naar het begin van het volgende woord
    e          ga naar het einde van het volgende woord
    E          ga naar het einde van het volgende woord 
               voor een spatie
    b          ga naar het begin van het vorige woord
    0          ga naar het begin van de regel
    ^          ga naar het eerste woord van de huidige 
               regel
    $          ga naar het einde van de regel
    &lt;CR>       ga naar het begin van de volgende regel
    -          ga naar het begin van de vorige regel
    G          ga naar het einde van het bestand
    1G         ga naar het begin van het bestand
    nG         ga naar regelnummer n
    &lt;Cntl> G   toon het huidige regelnummer
    %          naar het overeenkomende haakje
    H          bovenste regel op het scherm
    M          middelste regel op het scherm
    L          onderkant van het scherm
    n|         verplaats cursor naar kolom n
</screen>
</para>

<para>
Het scherm zal automatisch scrollen wanneer de cursor de boven- of onderkant
van het scherm bereikt. Er zijn alternatieve opdrachten waarmee het
scrollen van de tekst kan worden bestuurd.
</para>

<para>
<screen>
    &lt;Cntl> f   scroll een scherm voorwaarts
    &lt;Cntl> b   scroll een scherm terugwaarts
    &lt;Cntl> d   scroll een half scherm naar beneden
    &lt;Cntl> u   scroll een half scherm naar boven
</screen>
</para>

<para>
De bovenstaande opdrachten besturen de cursorverplaatsing. Een aantal 
opdrachten maakt gebruik van een opdrachtmodifier in de vorm van een 
nummer dat aan de opdracht voorafgaat. Deze feature zal de opdracht 
gewoonlijk dat aantal keren herhalen.
</para>

<para>
De cursor een aantalposities naar rechts verplaatsen.
</para>

<para>
<screen>
    nl         verplaats de cursor n posities naar rechts
</screen>
</para>

<para>
Als je voor de tekst een aantal spaties wilt, dan kun je de opdrachtmodifier
toepassen op de invoegopdracht. Voer het getal in van het aantal keren dat
de opdracht herhaald moet worden, dan de <keycap>i</keycap> gevolgd 
door de spatie en dan <keycap>ESC</keycap>.
</para>

<para>
<screen>
    ni         voeg wat tekst in en herhaal de tekst n maal.
</screen>
</para>

<para>
De opdrachten die dienen voor de omgang met regels gebruiken de modifier
om naar regelnummers te refereren. De <keycap>G</keycap> is een goed voorbeeld.
</para>

<para>
<screen>
    1G         Verplaats de cursor naar de eerste regel.
</screen>
</para>

<para>
<application>vi</application> biedt een grote opdrachtenset welke kan 
worden gebruikt om de cursor door het bestand te manoeuvreren. Enkele 
tekenverplaatsing tot aan het direct plaatsen op een regel van de cursor.
<application>vi</application> kan ook vanaf de opdrachtregel de cursor op een
geselecteerde regel plaatsen.
</para>

<para>
<screen>
    vi +10 myfile.tex
</screen>
</para>

<para>
Deze opdracht opent het bestand genaamd <filename>myfile.tex</filename>
en plaatst de cursor 10 regels naar beneden vanaf het begin van het bestand.
</para>

<para>
Probeer wat van de opdrachten in deze paragraaf uit. Zeer weinig mensen
gebruiken ze allemaal in &eacute;&eacute;n sessie. De meeste gebruikers maken
slechts gebruik van een subset van de bovenstaande opdrachten.
Je kunt door het bestand manoeuvreren, maar hoe kun je de tekst wijzigen?
</para>
</sect2>

<sect2 id="vi-edit-text"><title>Tekst aanpassen</title>
<para>
Het doel is de inhoud van het bestand te wijzigen en 
<application>vi</application> biedt een
omvangrijke set opdrachten om bij dit proces te helpen.
</para>

<para>
In deze paragraaf zullen we ons richten op het wijzigen van bestaande tekst
en het verwijderen van de tekst. Aan het einde van deze paragraaf zul je
de kennis hebben om elk gewenst tekstbestand aan te maken. De resterende
paragraaf richt zich op meer wenselijke en makkelijkere opdrachten.
</para>

<para>
Bij het invoeren van tekst, kunnen meerdere regels worden ingevoerd
door gebruik te maken van de
<keycap>return</keycap>. Als een ingetikte fout moet worden gecorrigeerd
en je bevindt je op de regel met de ingevoerde tekt in kwestie, dan kun
je de <keycap>backspace</keycap>-toets gebruiken om de cursor over de tekst te
verplaatsen. De verschillende implementaties van <application>vi</application>
gedragen zich anders. Een aantal verplaatst de cursor gewoon terug en
de tekst kan nog steeds worden bekeken en geaccepteerd. Anderen zullen
de tekst verwijderen. Met een aantal klonen kun je in de invoegmodus zelfs 
de pijltjestoetsen gebruiken om de cursor te verplaatsen. Dit is niet het 
normale functioneren van <application>vi</application>.
</para>

<para>
Gebruik je editor om bekend te raken met het functioneren ervan.
</para>

<para>
<screen>
    a       Voeg tekst toe vanaf de huidige cursorpositie
    A       Voeg tekst toe aan het einde van de regel
    i       Voeg links van de cursor tekst in
    I       Voeg tekst in op de huidige regel links van het 
            eerste teken dat geen spatie is 
    o       Maak een nieuwe regel aan en voeg tekst in onder de
            huidige regel
    O       Maak een nieuwe regel aan en voeg tekst in boven de
            huidige regel
</screen>
</para>

<para>
We geven het en nemen het weer weg. <application>vi</application> heeft een 
kleine set met verwijderopdachten die met behulp van opdrachtmodifiers kan 
worden uitgebreid.
</para>

<para>
<screen>
    x       Verwijder een teken waaronder de cursor zich bevindt
    dw      Verwijder vanaf de huidige positie tot aan het einde van
            het woord
    dd      Verwijder de huidige regel.
    D       Verwijder vanaf de huidige positie tot aan het einde van
            de regel
</screen>
</para>

<para>
De modifiers kunnen worden gebruikt om meer kracht aan de opdrachten toe
te voegen.
De volgende voorbeelden geven een subset van de mogelijkheden weer.
</para>

<para>
<screen>
    nx      Verwijder n tekens vanaf de huidige cursorpositie
    ndd     Verwijder n regels
    dnw     Verwijder n woorden (Hetzelfde als ndw)
    dG      Verwijder vanaf de huidige positie 
            tot aan het einde van het bestand
    d1G     Verwijder vanaf de huidige positie 
            tot aan het begin van het bestand
    d$      Verwijder vanaf de huidige positie tot aan 
            het einde van de regel (Dit is hetzelfde als D)
    dn$     Verwijder vanaf de huidige regel tot aan de n-de regel
</screen>
</para>

<para>
In de bovenstaande lijst met opdrachten wordt getoond dat de verwijderbewerking
erg krachtig kan zijn. Dit is duidelijk wanneer toegepast in combinatie met
de cursorverplaatsingsopdrachten. De opdracht <keycap>D</keycap> negeert de
modifierdirectives.
</para>

<para>
Zo nu en dan zul je wijzigingen ongedaan willen maken. Met de volgende
opdrachten kun je de tekst na wijzigingen herstellen.
</para>

<para>
<screen>
    u           Maak de laatste opdracht ongedaan
    U           Maak op de huidige regel alle wijzigingen 
                ongedaan
    :e!         Bewerkt nogmaals. Herstel tot de status 
                van de laatste keer opslaan.
</screen>
</para>

<para>
<application>vi</application> geeft je niet alleen de mogelijkheid om 
wijzigingen ongedaan te maken, maar het kan het ongedaan maken ook omkeren. 
Met de opdracht <keycap>5dd</keycap> verwijder je 5 regels en met de 
opdracht <keycap>u</keycap> maak je deze verwijdering weer ongedaan. De 
wijzigingen kunnen weer met de opdracht <keycap>u</keycap> worden hersteld.
</para>

<para>
<application>vi</application> voorziet in opdrachten waarmee de tekst kan 
worden gewijzigd zonder dat deze eerst moet worden verwijderd om vervolgens 
de nieuwe tekst in te tikken.
</para>

<para>
<screen>
    rc          Vervang het teken onder de cursor door c
                (Bij het gebruik van de herhaalmodifier wordt 
                de cursor naar rechts verplaatst bv 2rc)
    R           Overschrijft de tekst met de nieuwe tekst
    cw          Wijzigt de tekst van het huidige woord
    c$          Wijzigt de tekst vanaf de huidige positie 
                tot aan het einde van de regel
    cnw         Wijzigt de volgende n woorden 
                (hetzelfde als ncw)
    cn$         Wijzigt tot aan het einde van de n-de regel
    C           Wijzigt tot aan het einde van de regel 
                (hetzelfde als c$)
    cc          Wijzigt de huidige regel
    s           Vervangt de tekst die je intikt voor het 
                huidige teken
    ns          Vervangt de tekst die je intikt voor de 
                volgende n tekens.
</screen>
</para>

<para>
De serie wijzigingsopdrachten die je toestaan een reeks tekens in te voeren,
wordt be&euml;indigd met de <keycap>ESC</keycap>-toets.
</para>

<para>
De opdracht <keycap>cw</keycap> beginnend vanaf de huidige lokatie in 
het woord tot aan het einde van het woord. Bij het gebruik van een 
wijzigingsopdracht waarin een afstand wordt gespecificeerd waarop de 
wijziging van toepassing zal zijn, zal <application>vi</application>
een <literal>$</literal> plaatsen bij de laatste tekenpositie.
De nieuwe tekst kan korter of langer zijn dan de oorspronkelijke tekst.
</para>
</sect2>

<sect2 id="vi-moving-text"><title>Kopi&euml;ren en verplaatsen van delen tekst</title>
<para>
Het verplaatsen van tekst bestaat uit een aantal opdrachten die allen
worden gecombineerd om het eindresultaat te bereiken.
In deze paragraaf zullen benoemde en onbenoemde buffers
worden ge&iuml;ntroduceerd in combinatie met opdrachten voor knippen en
plakken van tekst.
</para>

<para>
Het kopieren van tekst bestaat uit drie hoofdstappen.
<orderedlist>
<listitem><para>
 <emphasis>Yanken</emphasis> (kopie&euml;ren) van de tekst naar een buffer.
</para></listitem>
<listitem><para>
 <emphasis>Verplaatsen</emphasis> van de cursor naar de doellokatie.
</para></listitem>
<listitem><para>
 <emphasis>Plakken</emphasis> (plaatsen) van de tekst uit de bewerkbuffer.
</para></listitem>
</orderedlist>

Gebruik de opdracht <keycap>y</keycap> om tekst naar de onbenoemde buffer te
kopi&euml;ren.
</para>

<para>
<screen>
    yy          Plaats een kopie van de huidige regel in de 
                onbenoemde buffer.
    Y           Plaats een kopie van de huidige regel in de 
                onbenoemde buffer.
    nyy         Plaats de volgende n regels in de onbenoemde 
                buffer
    nY          Plaats de volgende n regels in de onbenoemde 
                buffer
    yw          Plaats een woord in de onbenoemde buffer.
    ynw         Plaats n woorden in de onbenoemde buffer.
    nyw         Plaats n woorden in de onbenoemde buffer.
    y$          Plaats vanaf de huidige positie tot aan het 
                einde van de regel in de onbenoemde buffer.
</screen>
</para>

<para>
De onbenoemde buffer is een tijdelijke buffer die makkelijk door andere
opdrachten raakt beschadigd.
Zo nu en dan kun je de tekst voor een langere periode nodig hebben.
In dit geval kun je beter gebruik maken van de benoemde buffers.
<application>vi</application> kent 26 benoemde buffers. De buffers gebruiken ter identificatie
als naam de letters van het alfabet. Om onderscheid te maken tussen een opdracht
of een benoemde buffer, gebruikt <application>vi</application> het <keycap>"</keycap>-teken. 
Bij gebruik van een benoemde buffer met de naam in kleine letters, zal
de inhoud worden overschreven, terwijl de inhoud bij een naam in hoofdletters
zal worden toegevoegd aan de huidige inhoud.
</para>

<para>
<screen>
    "ayy        Plaats de huidige regel 
                in de benoemde buffer a.
    "aY         Plaats de huidige regel 
                in de benoemde buffer a.
    "byw        Plaats het huidige woord 
                in de benoemde buffer b.
    "Byw        Voeg het woord toe aan de 
                inhoud van de benoemde buffer b.
    "by3w       Plaats de volgende 3 woorden 
                in de benoemde buffer b.
</screen>
</para>

<para>
Gebruik de opdracht <keycap>p</keycap> om de inhoud van de knipbuffer in de
bewerkbuffer te plakken.
</para>

<para>
<screen>
    p       Plak rechts van de cursor de inhoud van de 
            onbenoemde buffer 
    P       Plak links van de cursor de inhoud van de 
            onbenoemde buffer
    nP      Plak links van de cursor n kopie&euml;en van de inhoud 
            van de onbenoemde buffer
    "ap     Plak uit de benoemde buffer a RECHTS van de 
            cursor
    "b3P    Plak 3 kopieen uit de benoemde buffer b LINKS 
            van de cursor.
</screen>
</para>

<para>
Bij gebruik van <application>vi</application> in een xterm heb je meer dan &eacute;&eacute;n optie
voor het kopi&euml;ren van tekst. Selecteer het deel van de tekst dat je
wilt kopi&euml;ren door de muiscursor over de tekst te slepen.
De linkermuisknop ingedrukt houden en de muis van het begin naar
het einde van het deel van de tekst slepen maakt dat de tekst
invers wordt weergegeven. Hiermee wordt de tekst automatisch in een door
de X-server gereserveerde buffer geplaatst. Druk de middelste knop in
om de tekst ergens neer te zetten.

Denk eraan <application>vi</application> in invoermodus te plaatsen aangezien de invoer zou
kunnen worden ge&iuml;nterpreteerd als opdrachten en het resultaat zal
onbekend zijn. Met behulp van dezelfde techniek kan een enkel woord
worden gekopieerd door te dubbelklikken op de linkermuisknop over
het woord. Alleen het enkele woord zal worden gekopieerd. Plakken is
hetzelfde als bovenstaande.
De inhoud van de buffer zal alleen wijzigen als een nieuw gebied wordt
geselecteerd.

Het verplaatsen van tekst bestaat uit drie stappen.
<orderedlist>
<listitem><para>
 <emphasis>Verwijder</emphasis> tekst en plaats deze in een onbenoemde buffer
</para></listitem>
<listitem><para>
 <emphasis>Verplaats</emphasis> de cursor naar de doellokatie.
</para></listitem>
<listitem><para>
 <emphasis>Plak</emphasis> de inhoud van de benoemde of onbenoemde buffer.
</para></listitem>
</orderedlist>

Afgezien van de wijziging in stap &eacute;&eacute;n waarbij de tekst wordt
verwijderd is het proces hetzelfde als bij het kopi&euml;ren.
Wanneer de opdracht <keycap>dd</keycap> wordt uitgevoerd, dan wordt de regel verwijderd
en in een onbenoemde buffer geplaatst. Je kunt de inhoud van deze buffer
dan op de gewenste plek plakken zoals je kon toen je de tekst naar de
gewenste positie kopieerde.
</para>

<para>
<screen>
    "add       Verwijder de regel en plaats het 
               in de benoemde buffer a.
    "a4dd      Verwijder 4 regels en plaats deze 
               in de benoemde buffer a.
    dw         Verwijder een woord en plaats dit 
               woord in een onbenoemde buffer.
</screen>
</para>

<para>
Zie de paragraaf over het aanpassen van tekst voor meer voorbeelden over het
verwijderen van tekst.

In geval van een systeemcrash gaat de inhoud van benoemde buffers verloren,
maar de inhoud van de bewerkbuffers kan worden hersteld 
(zie Handige opdrachten).
</para>
</sect2>

<sect2 id="vi-text-search_and_replace"><title>Tekst zoeken en vervangen</title>
<para>
<application>vi</application> kent een aantal zoekopdrachten. Je kunt zoeken naar individuele
tekens via reguliere expressies.

De belangrijkste twee zoekopdrachten zijn <keycap>f</keycap> en 
<keycap>t</keycap>.
</para>

<para>
<screen>
    fc     Zoek naar het volgende teken c. 
           Ga naar RECHTS naar de volgende.
    Fc     Zoek naar het volgende teken c. 
           Ga naar LINKS naar de voorafgaande.
    tc     Verplaats naar RECHTS naar het teken 
           voor de volgende c.
    Tc     Verplaats naar LINKS naar het teken 
           volgend op de voorafgaande c.
           (Bij een aantal klonen is dit hetzelfde als Fc)
    ;      Herhaalt de laatste f,F,t,T opdracht
    ,      Hetzelfde als ; maar het keert de richting 
           van de oorspronkelijke opdracht om.
</screen>
</para>
<para>
Als het teken waarnaar je zocht, niet werd gevonden, dan zal <application>vi</application> een
beep genereren of een ander soort signaal afgeven.

<application>vi</application> geeft je de mogelijkheid in de bewerkbuffer te zoeken naar een string.
</para>

<para>
<screen>
    /str    Zoekt rechts en naar beneden 
            naar het volgende voorkomen van str.
    ?str    Zoekt links en naar boven 
            voor het volgende voorkomen van str.
    n       Herhaal de laatste / of ? opdracht
    N       Herhaal de laatste / of ? in omgekeerde richting.
</screen>
</para>

<para>
Je voert de zoekstring in gevolgd door een <keycap>Return</keycap>.

De string in de opdracht <keycap>/</keycap> of <keycap>?</keycap> kan 
een reguliere expressie zijn.
Een reguliere expressie is een beschrijving van een set tekens.
De beschrijving is samengesteld uit tekst in combinatie met speciale tekens.
De speciale tekens in reguliere expressies zijn:
</para>

<para>
<screen>
  . * [] \ ^ $ 
</screen>
</para>

<para>
<screen>
    .      Komt overeen met een enkel teken 
           behalve de newline.
    \      Ontdoet speciale tekens van hun betekenis.
    *      Komt overeen met 0 of meer keren 
           het voorafgaande teken.
    []     Komt exact overeen met een van de 
           tekens tussen de haken.
    ^      Komt overeen met het teken na dit 
           teken aan het begin van de regel.
    $      Komt overeen met het teken voor dit 
           teken aan het einde v/d regel.
    [^]    Komt overeen met alle tekens die niet 
           tussen de haken achter het ^ -teken staan.
    [-]    Komt overeen met een bereik aan tekens.
</screen>
</para>

<para>
De enige manier om te wennen aan de reguliere expressie is er gebruik van
te maken. Hieronder een aantal voorbeelden.
</para>

<para>
<screen>
    c.pe       Komt overeen met cope, cape, caper enz
    c\.pe      Komt overeen met c.pe, c.per enz
    sto*p      Komt overeen met stp, stop, stoop enz
    car.*n     Komt overeen met carton, cartoon, carmen enz
    xyz.*      Komt overeen met xyz tot aan het einde vd regel.
    ^The       Komt overeen met elke regel die begint met The.
    atime$     Komt overeen met elke regel eindigend op atime.
    ^Only$     Komt overeen met elke regel welke alleen 
               bestaat uit het woord Only.
    b[aou]rn   Komt overeen met barn, born, burn.
    Ver[D-F]   Komt overeen met VerD, VerE, VerF.
    Ver[^1-9]  Komt overeen met Ver gevolgd door elk teken 
               dat geen cijfer voorstelt.
    the[ir][re] Komt overeen met their,therr, there, theie.
    [A-Za-z][A-Za-z]* Komt overeen met elk woord.
</screen>
</para>

<para>
<application>vi</application> gebruikt de <application>ex</application> 
opdrachtmodus om zoek- en vervang bewerkingen uit te voeren.
Alle opdrachten die met een dubbele punt beginnen zijn gegeven in
<application>ex</application> modus.
</para>

<para>
Met de zoek- en vervangopdracht kunnen reguliere expressies worden
gebruikt voor een bereik aan regels waarbij de overeenkomende string
wordt vervangen. De gebruiker kan vragen om bevestiging voordat de 
vervanging wordt uitgevoerd. 
</para>

<para>
<screen>
# Algemene opdracht
:&lt;start>,&lt;einde>s/&lt;zoek>/&lt;vervang>/g   

# Vervang in het gehele bestand thee door Thee
:1,$s/thee/Thee/g     
# % betreft het volledige bestand. idem als hiervoor
:%s/thee/Thee/g      
# Verwijder de inhoud vd huidige tot aan de 5e regel
:.,5s/^.*//g         
# Vervang thee door Thee, maar vraag om bevestiging
:%s/thee/Thee/gc     
# Verwijder van elke regel de eerste vier tekens
:%s/^....//g         
</screen>
</para>

<para>
De zoekopdracht is zeer krachtig wanneer ze wordt gecombineerd met
de zoekstrings in de vorm van reguliere expressies. 
Als de directive <keycap>g</keycap> niet
in de opdracht is opgenomen, dan wordt de wijziging alleen 
toegepast op de eerste string op elke regel die met de expressie overeenkomt.
</para>

<para>
Wellicht dat het eens voorkomt dat je de oorspronkelijke zoekstring
in het resultaat wilt gebruiken. Je zou de opdracht op de
regel opnieuw in kunnen tikken, maar <application>vi</application> geeft als mogelijkheid
een aantal speciale tekens in de vervangende string te plaatsen.
</para>

<para>
<screen>
  :1,5s/help/&amp;er/g   Vervang in de eerste 5 regels 
                     help door helper.
  :%s/ */&amp;&amp;/g        Verdubbel het aantal spaties 
                     tussen de woorden.
</screen>
</para>

<para>
Het gebruik van de complete overeenkomende tekenreeks heeft zijn beperkingen, 
vandaar dat <application>vi</application> gebruik maakt van de haakjes met backslash-tekens ervoor 
<keycap>\(</keycap> en <keycap>\)</keycap> om het bereik van de 
substitutie
te selecteren. Door gebruik te maken van een cijfer voorafgegaan door
een backslash-teken <keycap>\1</keycap> die de range identificeert in volgorde
van de definitie, kan de vervanging worden opgebouwd.
</para>

<para>
<screen>
  # Verwijder alles vanaf de dubbele punt
  :s/^\(.*\):.*/\1/g        
  # Verwissel de woorden aan elke kant 
  # van de dubbele punt
  :s/\(.*\):\(.*\)/\2:\1/g  
</screen>
</para>

<para>
<application>vi</application> biedt krachtige opdrachten die veel modernere editors niet bieden 
of kunnen bieden. De kosten van deze kracht is ook het belangrijkste 
argument tegen <application>vi</application>. De opdrachten kunnen moeilijk te leren of lezen zijn. 
Ofschoon het meeste wat goed is, in eerste instantie wat vreemd kan zijn.
Met wat tijd en oefening, wordt de opdrachtenset van <application>vi</application> al snel 
een tweede natuur.
</para>
</sect2>
</sect1>
</appendix>
<!--
% Local Variables: 
% mode: latex
% TeX-master: \"guide\"
% End: -->