File: a2104.html

package info (click to toggle)
appunti-informatica-libera 2001.08.18-2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 27,912 kB
  • ctags: 23,734
  • sloc: makefile: 69
file content (1516 lines) | stat: -rw-r--r-- 87,068 bytes parent folder | download
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
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"    "http://www.w3.org/TR/html4/strict.dtd">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <META NAME="Generator" CONTENT="Alml">
    <META NAME="Description" CONTENT="GNU/Linux e altro software libero">
    <META NAME="Keywords" CONTENT="Linux, GNU/Linux, Unix, software, software libero, free software">
    <META NAME="Author" CONTENT="Daniele Giacomini &nbsp;&nbsp; &nbsp;daniele&nbsp;@&nbsp;swlibero.org">
    <META NAME="Date" CONTENT="2001.08.18 ">
    <META NAME="Resource-type" LANG="en" CONTENT="Document" >
    <META NAME="Revisit-after" LANG="en" CONTENT="15 days" >
    <META NAME="Robots" CONTENT="ALL" >
    <TITLE> Appunti di informatica libera</TITLE>
    <LINK REL="stylesheet" TYPE="text/css" HREF="a2.css">
    <LINK REL="Start" TITLE="Start" HREF="a2.html">
    <LINK REL="Prev" TITLE="Previous" HREF="a2103.html">
    <LINK REL="Next" TITLE="Next" HREF="a2105.html">
</HEAD>
<BODY>
<P>
<A HREF="a2105.html">[successivo]</A>
<A HREF="a2103.html">[precedente]</A>
<A HREF="a2.html">[inizio]</A>
<A HREF="a2506.html">[fine]</A>
<A HREF="a21.html">[indice generale]</A>
<A HREF="a26.html">[violazione GPL]</A>
<A HREF="a2504.html">[licenze]</A>
<A HREF="a2505.html">[indice analitico]</A>
<A HREF="a290.html">[tomo]</A>
<A HREF="a299.html">[parte]</A>
</P>
<HR>
<DIV>
<H1>Capitolo 75. &nbsp; <A NAME="title1273"></A><A NAME="anchor1476"></A> Creazione e modifica di file di testo <A NAME="index6523"></A> <A NAME="index6524"></A> </H1>

<P>Il programma pi&ugrave; importante che &egrave; necessario conoscere quando ci si avvicina a un nuovo sistema operativo &egrave; quello che permette di creare e modificare i file di testo normale. Nel caso dei sistemi Unix, &egrave; indispensabile conoscere <A NAME="index6525"></A>VI, oltre ad altri applicativi simili che possono risultare pi&ugrave; comodi da usare.</P>

<P>L'azione con la quale si indica l'intervento su un file del genere, viene spesso identificata con la parola inglese <EM>editing</EM>, per cui alle volte questi programmi applicativi vengono identificati come degli <EM>editor</EM>.</P>

<H2>75.1 &nbsp; <A NAME="title1274"></A><A NAME="anchor1477"></A>
 <A NAME="index6526"></A>VI <A NAME="index6527"></A> </H2>

<P>Nei sistemi Unix, l'applicativo pi&ugrave; importante per la creazione e la modifica dei file di testo &egrave; <A NAME="index6528"></A>VI. &Egrave; pi&ugrave; importante perch&eacute; onnipresente, soprattutto nei dischetti di emergenza, anche se non si tratta di un programma comodo da utilizzare.</P>

<P><A NAME="index6529"></A>VI ha una logica di funzionamento tutta sua che ne impedisce l'utilizzo a chi non abbia letto qualcosa al riguardo. L'intento &egrave; quello di chiarire questa logica, almeno in parte, in modo da facilitarne l'utilizzo in caso di necessit&agrave;.</P>

<P>Per GNU/Linux, non esiste in circolazione una versione originale di <A NAME="index6530"></A>VI, ma tante interpretazioni di questo, con potenzialit&agrave; pi&ugrave; o meno ampliate. Per tale motivo, <CODE>/bin/vi</CODE> &egrave; solitamente un <A NAME="index6531"></A>collegamento (simbolico o meno) al programma che si utilizza effettivamente.</P>

<TABLE BORDER="3" WIDTH="100%">
<TR><TD>

<P>La realizzazione di <A NAME="index6532"></A>VI pi&ugrave; importante &egrave; quella del programma <SAMP>vim</SAMP> che &egrave; stato portato su diversi sistemi. In particolare, la versione Dos &egrave; in grado di gestire file di dimensioni molto grandi (diversi milioni di byte) anche su sistemi <A NAME="index6533"></A>i286 che dispongono soltanto dei classici 640&nbsp;Kibyte di memoria RAM.</P>

</TD></TR>
</TABLE>

<H3>75.1.1 &nbsp; <A NAME="title1275"></A><A NAME="anchor1478"></A>
 Origini di <A NAME="index6534"></A>VI </H3>

<P>I primi programmi di scrittura per i file di testo permettevano di visualizzare e di intervenire su una sola riga alla volta. Questo &egrave; il caso di <SAMP>ed</SAMP> per gli ambienti Unix e di <SAMP>EDLIN</SAMP> per il Dos.</P>

<P><A NAME="index6535"></A>VI &egrave; uno dei primi programmi applicativi per la scrittura e la modifica di file di testo a utilizzare tutto lo schermo per visualizzare le righe del testo su cui si opera. Da ci&ograve; deriva il nome che fa riferimento al suo comportamento &laquo;visuale&raquo; (<EM>VIsual</EM>).</P>

<P>A sua volta, <A NAME="index6536"></A>VI &egrave; la derivazione di un programma precedente, <A NAME="index6537"></A>EX, che si limitava a gestire una sola riga alla volta. Ma questa eredit&agrave; &egrave; servita per incorporare i comandi tipici di <A NAME="index6538"></A>EX.</P>

<H3>75.1.2 &nbsp; <A NAME="title1276"></A><A NAME="anchor1479"></A>
 Avvio </H3>

<P class="syntax"><TT>vi<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG><VAR>file</VAR>...<STRONG><BIG>]</BIG></STRONG>
</TT></P>

<P>L'eseguibile <SAMP>vi</SAMP> pu&ograve; essere avviato o meno con l'indicazione di un file sul quale intervenire. Se questo file esiste, viene aperto e si ottiene la visualizzazione del suo contenuto per permetterne la modifica. Se non esiste, verr&agrave; creato.</P>

<P>&Egrave; anche possibile l'indicazione di alcune opzioni, tra cui, le pi&ugrave; importanti sono elencate di seguito:</P>

<UL>

<LI>

<P class="syntax"><TT>-R
</TT></P>

<P>i file vengono aperti (inizialmente) in sola lettura;</P>
</LI>

<LI>

<P class="syntax"><TT>-c<VAR>comando</VAR>
</TT></P>

<P>subito dopo aver caricato il primo dei file degli argomenti, viene eseguito il comando indicato;</P>
</LI>

<LI>

<P class="syntax"><TT>-s<VAR>file_di_comandi</VAR>
</TT></P>

<P>subito dopo aver caricato il primo dei file degli argomenti, vengono eseguiti i comandi contenuti nel file di comandi indicato.</P>
</LI>
</UL>

<P>Quando si avvia <A NAME="index6539"></A>VI senza indicare alcun file, appare una schermata simile a quella della figura <A HREF="a2104.html#anchor1480">75.1</A> in cui le righe dello schermo contrassegnate dal simbolo tilde (<SAMP>~</SAMP>) rappresentano lo spazio non utilizzato dal file.</P>

<TABLE ID="anchor1480" BORDER="0" WIDTH="100%">
<TR><TD>
<HR>

<PRE>_
~
~
~
~
~
~
~
~
Empty Buffer</PRE>
<HR>

<P class="caption"> Figura <A HREF="a2104.html#anchor1480">75.1</A>. Avvio di <A NAME="index6540"></A>VI. </P>

</TD></TR>
</TABLE>

<P>Normalmente, l'eseguibile <SAMP>vi</SAMP> pu&ograve; essere avviato utilizzando nomi diversi: per rispettare le tradizioni o per definire implicitamente degli attributi.</P>

<P class="syntax"><TT>view<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG><VAR>file</VAR>...<STRONG><BIG>]</BIG></STRONG>
</TT></P>

<P>Di solito, <SAMP>view</SAMP> &egrave; un <A NAME="index6541"></A>collegamento alla realizzazione di <A NAME="index6542"></A>VI che si ha a disposizione. Di norma, quando l'eseguibile di <A NAME="index6543"></A>VI viene avviato con questo nome, si comporta come se gli fosse stata data l'opzione <SAMP>-R</SAMP>: sola lettura.</P>

<P class="syntax"><TT>ex<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG><VAR>file</VAR>...<STRONG><BIG>]</BIG></STRONG>
</TT></P>

<P>Come gi&agrave; accennato, <A NAME="index6544"></A>EX (precisamente l'eseguibile <SAMP>ex</SAMP>) &egrave; il programma da cui &egrave; derivato <A NAME="index6545"></A>VI. Generalmente, nelle distribuzioni GNU/Linux si trova un <A NAME="index6546"></A>collegamento (simbolico o meno) con questo nome che punta a <SAMP>vi</SAMP>. Alcune realizzazioni di <A NAME="index6547"></A>VI, quando sono avviati con questo nome, tendono a comportarsi in maniera leggermente differente.</P>

<H3>75.1.3 &nbsp; <A NAME="title1277"></A><A NAME="anchor1481"></A>
 Modalit&agrave; di funzionamento </H3>

<P><A NAME="index6548"></A>VI distingue diverse modalit&agrave; di funzionamento, altrimenti definibili come stati o contesti. Quando si avvia <A NAME="index6549"></A>VI, questo si trova di solito nella modalit&agrave; di comando che permette di usare tasti determinati, attribuendogli significati speciali (di comando). Quando si vuole agire per inserire o modificare del testo, occorre utilizzare un comando con il quale <A NAME="index6550"></A>VI passa alla modalit&agrave; di inserimento e modifica.</P>

<P>Per complicare ulteriormente le cose, c'&egrave; da aggiungere che esistono in realt&agrave; due tipi di comandi: &laquo;visuali&raquo; (<EM>visual</EM>) e &laquo;due punti&raquo; (<EM>colon</EM>). I comandi visuali sono i pi&ugrave; semplici e si compongono di sequenze di uno o pi&ugrave; tasti il cui inserimento non appare in alcuna parte dello schermo e si concludono senza la pressione del tasto [<KBD>Invio</KBD>]; i comandi &laquo;due punti&raquo; iniziano tutti con il simbolo <SAMP>:</SAMP> (da cui il nome), terminano con [<KBD>Invio</KBD>], e dal momento che possono essere un po' pi&ugrave; complicati, durante la digitazione appaiono sulla riga inferiore dello schermo. In particolare, questi ultimi sono quelli derivati da <A NAME="index6551"></A>EX.</P>

<P>La modalit&agrave; di inserimento si riferisce al momento in cui &egrave; possibile modificare il testo. Per passare dalla modalit&agrave; di comando a quella di inserimento, si preme il tasto corrispondente alla lettera &laquo;i&raquo; (inserimento prima del cursore) o alla lettera &laquo;a&raquo; (inserimento dopo il cursore).</P>

<P>Per tornare alla modalit&agrave; di comando, da quella di inserimento, &egrave; sufficiente premere il tasto [<KBD>Esc</KBD>]. Quando ci si trova gi&agrave; nella modalit&agrave; di comando, la pressione del tasto [<KBD>Esc</KBD>] non produce alcunch&eacute; o al massimo interrompe l'introduzione di un comando, di conseguenza, se lo si usa inavvertitamente o troppo, non ne derivano inconvenienti.</P>

<P>Lo svantaggio principale di questo tipo di approccio &egrave; quello di dover passare alla modalit&agrave; di comando per qualunque operazione diversa dal puro inserimento di testo. Anche lo spostamento del cursore avviene attraverso dei comandi, obbligando l'utente a premere il tasto [<KBD>Esc</KBD>] prima di poter utilizzare i tasti per il suo spostamento.</P>

<P>Tuttavia, le realizzazioni pi&ugrave; diffuse di <A NAME="index6552"></A>VI addolciscono un po' il suo funzionamento introducendo l'uso dei tasti freccia nel modo consueto dei programmi di scrittura pi&ugrave; recenti.</P>

<H3>75.1.4 &nbsp; <A NAME="title1278"></A><A NAME="anchor1482"></A>
 Posizione attiva </H3>

<P>Per la descrizione del funzionamento di <A NAME="index6553"></A>VI &egrave; importante definire il concetto di <STRONG><EM>posizione attiva</EM></STRONG> che si riferisce al punto in cui si trova il cursore. Estendendo il significato, si pu&ograve; parlare di riga attiva, colonna attiva e parola attiva, intendendo quelle su cui si trova il cursore.</P>

<H3>75.1.5 &nbsp; <A NAME="title1279"></A><A NAME="anchor1483"></A>
 Moltiplicatori </H3>

<P>Prima di affrontare i comandi di <A NAME="index6554"></A>VI &egrave; importante comprendere che l'effetto di molti di questi pu&ograve; essere <STRONG><EM>moltiplicato</EM></STRONG> utilizzando un numero. Il concetto &egrave; molto semplice e si richiama alla matematica: <SAMP>2a</SAMP> = <SAMP>a+a</SAMP>.</P>

<H3>75.1.6 &nbsp; <A NAME="title1280"></A><A NAME="anchor1484"></A>
 Inserimento </H3>

<P>Come gi&agrave; accennato, si pu&ograve; inserire o modificare del testo solo quando si passa alla modalit&agrave; di inserimento attraverso il comando <SAMP>i</SAMP> (<EM>insert</EM>) oppure <SAMP>a</SAMP> (<EM>append</EM>). Durante questa fase, tutti i simboli della tastiera servono per inserire del testo. Con il <A NAME="index6555"></A>VI standard si pu&ograve; usare:</P>

<UL>

<LI>

<P>&nbsp;[<KBD>Invio</KBD>] &nbsp; per terminare una riga e passare alla successiva;</P>
</LI>

<LI>

<P>&nbsp;[<KBD>Backspace</KBD>] &nbsp; per tornare indietro (nella maggior parte dei casi si ottiene anche la cancellazione del testo);</P>
</LI>

<LI>

<P>&nbsp;[<KBD>Esc</KBD>] &nbsp; per terminare la modalit&agrave; di inserimento e passare a quella di comando.</P>
</LI>
</UL>

<P>Con le realizzazioni di <A NAME="index6556"></A>VI pi&ugrave; sofisticate, &egrave; concesso normalmente l'uso dei tasti freccia e in alcuni casi anche del tasto [<KBD>Canc</KBD>].</P>

<P>Per tutte le altre operazioni di modifica del testo si deve passare alla modalit&agrave; di comando.</P>

<TABLE ID="anchor1485" BORDER="0" WIDTH="100%">
<TR><TD>
<HR>

<PRE>Il mio primo documento scritto con vi.

Non &egrave; facile, ma ne vale ugualmente la pena_
~
~
~
~
~
~
-- INSERT --</PRE>
<HR>

<P class="caption"> Figura <A HREF="a2104.html#anchor1485">75.2</A>. <A NAME="index6557"></A>VI durante la fase di inserimento di testo. </P>

</TD></TR>
</TABLE>

<P>I comandi a disposizione per passare alla modalit&agrave; di inserimento sono molti e non si limitano quindi ai due modi appena descritti. La tabella <A HREF="a2104.html#anchor1486">75.1</A> ne elenca alcuni.</P>

<TABLE ID="anchor1486" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>I </TD><TD>Inserisce all'inizio della riga attiva. </TD></TR>
<TR><TD>i </TD><TD>Inserisce prima della posizione attiva. </TD></TR>
<TR><TD>A </TD><TD>Aggiunge alla fine della riga attiva. </TD></TR>
<TR><TD>a </TD><TD>Aggiunge dopo la posizione attiva. </TD></TR>
<TR><TD>O </TD><TD>Inserisce prima della riga attiva (inserendo una riga). </TD></TR>
<TR><TD>o </TD><TD>Aggiunge dopo la riga attiva (inserendo una riga). </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1486">75.1</A>. Elenco dei comandi utilizzabili per passare alla modalit&agrave; di inserimento. </EM></P>

<H3>75.1.7 &nbsp; <A NAME="title1281"></A><A NAME="anchor1487"></A>
 Navigazione </H3>

<P>Come gi&agrave; accennato, lo spostamento del cursore, e di conseguenza della posizione attiva, avviene per mezzo di comandi che generalmente obbligano a terminare la fase di inserimento. Le realizzazioni di <A NAME="index6558"></A>VI pi&ugrave; recenti permettono l'uso dei tasti freccia durante la modalit&agrave; di inserimento (oltre che durante la modalit&agrave; di comando), ma questo &egrave; solo un aiuto minimo: in generale &egrave; necessario tornare alla modalit&agrave; di comando.</P>

<P>I comandi normali per lo spostamento del cursore sono le lettere <SAMP>h</SAMP>, <SAMP>j</SAMP>, <SAMP>k</SAMP> e <SAMP>l</SAMP>, che rispettivamente spostano il cursore a sinistra, in basso, in alto e a destra. La ragione della scelta sta nella vicinanza di queste lettere nella maggior parte delle tastiere.</P>

<TABLE ID="anchor1488" BORDER="0" WIDTH="100%">
<TR><TD>
<HR>

<PRE>                                    .-----.  .-----.  .-----.  .-----.
                                    | H   |  | J   |  | K   |  | L   |
                                    |  &lt;- |  |  \/ |  |  /\ |  |  -&gt; |
                                    `-----'  `-----'  `-----'  `-----'</PRE>
<HR>

<P class="caption"> Figura <A HREF="a2104.html#anchor1488">75.3</A>. Promemoria visuale per i comandi che permettono spostamento del cursore. </P>

</TD></TR>
</TABLE>

<P>Salvo casi particolari e situazioni in cui questo concetto non &egrave; ragionevolmente applicabile, i comandi di spostamento, preceduti da un numero, vengono ripetuti tante volte quante ne rappresenta quel numero. Per esempio, il comando <SAMP>2h</SAMP> sposta il cursore a sinistra di due posizioni.</P>

<P>Per raggiungere una riga determinata &egrave; possibile utilizzare il comando <SAMP><VAR>n</VAR>G</SAMP> o <SAMP>:<VAR>n</VAR></SAMP> (in questo ultimo caso, seguito da [<KBD>Invio</KBD>])</P>

<P>Per esempio, per raggiungere la decima riga di un documento ipotetico, si pu&ograve; utilizzare indifferentemente uno dei due comandi seguenti:</P>

<P class="command"><STRONG><CODE>10G</CODE></STRONG></P>

<P class="command"><STRONG><CODE>:10</CODE></STRONG>[<KBD>Invio</KBD>]</P>

<P>Per fare scorrere il testo di una schermata alla volta si utilizzano le combinazioni di tasti [<KBD>Ctrl+B</KBD>] e [<KBD>Ctrl+F</KBD>] che rispettivamente spostano il testo all'indietro e in avanti (<EM>Back</EM> e <EM>Forward</EM>)</P>

<P>I comandi a disposizione per lo spostamento sono ovviamente numerosi, la tabella <A HREF="a2104.html#anchor1489">75.2</A> ne elenca alcuni.</P>

<TABLE ID="anchor1489" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>h </TD><TD>Sposta il cursore a sinistra di un carattere. </TD></TR>
<TR><TD>j </TD><TD>Sposta il cursore in basso nella riga successiva. </TD></TR>
<TR><TD>k </TD><TD>Sposta il cursore in alto nella riga precedente. </TD></TR>
<TR><TD>l </TD><TD>Sposta il cursore a destra di un carattere. </TD></TR>
<TR><TD>- </TD><TD>Sposta il cursore all'inizio della riga precedente. </TD></TR>
<TR><TD>+ </TD><TD>Sposta il cursore all'inizio della riga successiva. </TD></TR>
<TR><TD>w </TD><TD>Sposta il cursore all'inizio della parola successiva. </TD></TR>
<TR><TD>e </TD><TD>Sposta il cursore alla fine della parola successiva. </TD></TR>
<TR><TD>b </TD><TD>Sposta il cursore all'inizio della parola precedente. </TD></TR>
<TR><TD>^ </TD><TD>Sposta il cursore all'inizio della prima parola della riga. </TD></TR>
<TR><TD>0 </TD><TD>Sposta il cursore all'inizio della riga. </TD></TR>
<TR><TD>$ </TD><TD>Sposta il cursore alla fine della riga. </TD></TR>
<TR><TD>H </TD><TD>Sposta il cursore sulla prima riga che appare sullo schermo. </TD></TR>
<TR><TD>M </TD><TD>Sposta il cursore sulla riga centrale dello schermo. </TD></TR>
<TR><TD>L </TD><TD>Sposta il cursore sull'ultima riga che appare sullo schermo. </TD></TR>
<TR><TD>G </TD><TD>Sposta il cursore sull'ultima riga del file. </TD></TR>
<TR><TD><VAR>n</VAR>G </TD><TD>Sposta il cursore sulla riga identificata dal numero <VAR>n</VAR>. </TD></TR>
<TR><TD>| </TD><TD>Sposta il cursore sulla prima colonna (all'inizio della riga). </TD></TR>
<TR><TD><VAR>n</VAR>| </TD><TD>Sposta il cursore sulla colonna identificata dal numero <VAR>n</VAR>. </TD></TR>
<TR><TD>:<VAR>n</VAR> </TD><TD>Sposta il cursore sulla riga identificata dal numero <VAR>n</VAR>. </TD></TR>
<TR><TD>Ctrl+B </TD><TD>Fa scorrere il testo all'indietro di una schermata. </TD></TR>
<TR><TD>Ctrl+F </TD><TD>Fa scorrere il testo in avanti di una schermata. </TD></TR>
<TR><TD>Ctrl+U </TD><TD>Fa scorrere il testo all'indietro di mezza schermata. </TD></TR>
<TR><TD>Ctrl+D </TD><TD>Fa scorrere il testo in avanti di mezza schermata. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1489">75.2</A>. Elenco dei comandi utilizzabili per la navigazione all'interno del testo. </EM></P>

<DL>
<DT><STRONG>Esempi</STRONG></DT>
<DD>

<P class="command"><STRONG><CODE>5w</CODE></STRONG></P>

<P>Sposta il cursore all'inizio della quinta parola successiva.</P>

<P class="command"><STRONG><CODE>2b</CODE></STRONG></P>

<P>Sposta il cursore all'inizio della seconda parola precedente.</P>

<P class="command"><STRONG><CODE>5G</CODE></STRONG></P>

<P>Sposta il cursore all'inizio della quinta riga.</P>

<P class="command"><STRONG><CODE>4|</CODE></STRONG></P>

<P>Sposta il cursore sulla quarta colonna.</P>
</DD>
</DL>

<H3>75.1.8 &nbsp; <A NAME="title1282"></A><A NAME="anchor1490"></A>
 Modificatori </H3>

<P>I comandi di spostamento, esclusi quelli che iniziano con i due punti (<SAMP>:</SAMP>) e quelli che si ottengono per combinazione ([<KBD>Ctrl+...</KBD>]), possono essere utilizzati come <STRONG><EM>modificatori</EM></STRONG> di altri comandi.</P>

<P>All'interno di <A NAME="index6559"></A>VI manca il concetto di: <STRONG><EM>zona di intervento</EM></STRONG>. Per definire l'estensione di un comando lo si pu&ograve; far precedere da un moltiplicatore (un numero) e in pi&ugrave;, o in alternativa, lo si pu&ograve; fare seguire da un comando di spostamento. Il comando di spostamento viene utilizzato in questo caso per definire una zona che va dalla posizione attiva a quella di destinazione del comando, e su questa zona interverr&agrave; il comando precedente.</P>

<P>Tuttavia, per poter applicare questo concetto, &egrave; necessario che i comandi da utilizzare in associazione con i modificatori (di spostamento), siano stati previsti per questo. Deve trattarsi cio&egrave; di comandi che richiedono questa ulteriore aggiunta.</P>

<P>Come si vedr&agrave; in seguito, il comando <SAMP>x</SAMP> permette di cancellare quello che appare in corrispondenza del cursore. Quando viene premuto il tasto [<KBD>x</KBD>] si ottiene subito la cancellazione del carattere, pertanto, a questo genere di comandi non si pu&ograve; far seguire alcun modificatore. Questo tipo di comandi pu&ograve; solo essere preceduto da un moltiplicatore.</P>

<P>Si comporta diversamente il comando <SAMP>d</SAMP> che invece deve essere seguito da un modificatore e con questo definisce una zona da cancellare. Per esempio, <SAMP>dw</SAMP> cancella dalla posizione attiva fino all'inizio della prossima parola e <SAMP>d$</SAMP> cancella dalla posizione attiva fino alla fine della riga.</P>

<H3>75.1.9 &nbsp; <A NAME="title1283"></A><A NAME="anchor1491"></A>
 Cancellazione </H3>

<P>Durante la fase di inserimento &egrave; possibile cancellare solo il carattere appena scritto utilizzando il tasto [<KBD>Backspace</KBD>], sempre che la realizzazione di <A NAME="index6560"></A>VI a disposizione lo consenta, altrimenti si ottiene solo l'arretramento del cursore. Per qualunque altro tipo di cancellazione occorre passare alla modalit&agrave; di comando.</P>

<P>I comandi di cancellazione pi&ugrave; importanti sono <SAMP>x</SAMP>, <SAMP>d</SAMP> seguito da un modificatore, e <SAMP>dd</SAMP>. Il primo cancella il carattere che si trova in corrispondenza della posizione attiva, cio&egrave; del cursore, il secondo cancella dalla posizione attiva fino all'estensione indicata dal modificatore e il terzo cancella tutta la riga attiva. Con <A NAME="index6561"></A>VI non &egrave; possibile cancellare il carattere che conclude una riga (il <A NAME="index6562"></A>codice di interruzione di riga), di conseguenza, per unire due righe insieme si utilizza il comando <SAMP>J</SAMP> oppure <SAMP>j</SAMP> (bisogna provare).</P>

<TABLE ID="anchor1492" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>x </TD><TD>Cancella il carattere che si trova sulla posizione attiva. </TD></TR>
<TR><TD>J oppure j </TD><TD>Unisce la riga attiva con quella successiva. </TD></TR>
<TR><TD>dd </TD><TD>Cancella la riga attiva. </TD></TR>
<TR><TD>d<VAR>mod</VAR> </TD><TD>Cancella dalla posizione attiva fino all'estensione indicata dal modificatore. </TD></TR>
<TR><TD>D </TD><TD>agisce come <SAMP>d$</SAMP>. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1492">75.3</A>. Elenco dei comandi utilizzabili per cancellare. </EM></P>

<DL>
<DT><STRONG>Esempi</STRONG></DT>
<DD>

<P class="command"><STRONG><CODE>5x</CODE></STRONG></P>

<P>Ripete cinque volte la cancellazione di un carattere. In pratica, cancella cinque caratteri.</P>

<P class="command"><STRONG><CODE>2dd</CODE></STRONG></P>

<P>Ripete due volte la cancellazione di una riga. In pratica, cancella la riga attiva e quella seguente.</P>

<P class="command"><STRONG><CODE>dw</CODE></STRONG></P>

<P>Cancella a partire dalla posizione attiva, fino al raggiungimento della prossima parola.</P>

<P class="command"><STRONG><CODE>2dw</CODE></STRONG></P>

<P>Ripete per due volte il tipo di cancellazione dell'esempio precedente. In pratica cancella fino all'inizio della seconda parola.</P>

<P class="command"><STRONG><CODE>d2w</CODE></STRONG></P>

<P>Cancella a partire dalla posizione attiva, fino al raggiungimento della seconda parola successiva. In pratica, esegue la stessa operazione del comando <SAMP>2dw</SAMP>.</P>

<P class="command"><STRONG><CODE>db</CODE></STRONG></P>

<P>Cancella a ritroso, dalla posizione corrente fino all'inizio della prima parola che viene incontrata.</P>

<P class="command"><STRONG><CODE>d$</CODE></STRONG></P>

<P>Cancella a partire dalla posizione attiva fino alla fine della riga.</P>

<P class="command"><STRONG><CODE>d5G</CODE></STRONG></P>

<P>Cancella dalla posizione attiva fino all'inizio della riga numero cinque.</P>
</DD>
</DL>

<H3>75.1.10 &nbsp; <A NAME="title1284"></A><A NAME="anchor1493"></A>
 Sostituzione </H3>

<P>La modifica del testo inserito pu&ograve; avvenire attraverso i comandi di cancellazione gi&agrave; visti, oppure attraverso comandi di sostituzione. Generalmente si tratta di comandi che prima cancellano parte del testo e subito dopo attivano l'inserimento.</P>

<P>I comandi di sostituzione pi&ugrave; importanti sono <SAMP>c</SAMP> seguito da un modificatore, e <SAMP>cc</SAMP>. Il primo sostituisce dalla posizione attiva fino all'estensione indicata dal modificatore e il secondo sostituisce tutta la riga attiva.</P>

<P>A fianco di questi se ne aggiungono un paio che possono essere utili proprio per il fatto che non passano alla modalit&agrave; di inserimento: <SAMP>r<VAR>x</VAR></SAMP> e <SAMP>~</SAMP>. Il primo sostituisce il carattere in corrispondenza del cursore con quello rappresentato da <VAR>x</VAR> e il secondo inverte le lettere minuscole in maiuscole e viceversa.</P>

<TABLE ID="anchor1494" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>C </TD><TD>Sostituisce dalla posizione attiva alla fine della riga. </TD></TR>
<TR><TD>cc </TD><TD>Sostituisce la riga attiva a partire dall'inizio. </TD></TR>
<TR><TD>c<VAR>mod</VAR> </TD><TD>Sostituisce dalla posizione attiva fino all'estensione indicata dal modificatore. </TD></TR>
<TR><TD>r<VAR>x</VAR> </TD><TD>Rimpiazza quanto contenuto nella posizione attiva con <VAR>x</VAR>. </TD></TR>
<TR><TD>~ </TD><TD>Inverte maiuscole e minuscole. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1494">75.4</A>. Elenco dei comandi di sostituzione e rimpiazzo. </EM></P>

<DL>
<DT><STRONG>Esempi</STRONG></DT>
<DD>

<P class="command"><STRONG><CODE>cc</CODE></STRONG></P>

<P>Sostituisce la riga attiva.</P>

<P class="command"><STRONG><CODE>c$</CODE></STRONG></P>

<P>Sostituisce a partire dalla posizione attiva fino alla fine della riga.</P>

<P class="command"><STRONG><CODE>rb</CODE></STRONG></P>

<P>Rimpiazza il carattere che si trova nella posizione attiva con la lettera &laquo;b&raquo;.</P>

<P class="command"><STRONG><CODE>10~</CODE></STRONG></P>

<P>Inverte le lettere maiuscole e minuscole a partire dalla posizione attiva, per dieci caratteri.</P>
</DD>
</DL>

<H3>75.1.11 &nbsp; <A NAME="title1285"></A><A NAME="anchor1495"></A>
 Copia e spostamento di porzioni di testo </H3>

<P>La gestione della copia e dello spostamento di testo attraverso <A NAME="index6563"></A>VI &egrave; un po' complicata. Per questa attivit&agrave; si utilizzano delle aree temporanee di memoria alle quali si possono accodare diverse parti di testo.</P>

<P>L'operazione con la quale si copia una porzione di testo in un'area temporanea di memoria viene detta <EM>yanking</EM>, ovvero estrazione, e questo giustifica l'uso della lettera &laquo;y&raquo; nei comandi che compiono questa funzione.</P>

<P>Le aree temporanee di memoria per lo spostamento o la copia di testo possono essere 27: una per ogni lettera dell'alfabeto e una aggiuntiva senza nome.</P>

<P>Il modo pi&ugrave; semplice di gestire questo meccanismo &egrave; quello di usare l'area temporanea senza nome. Per copiare una porzione di testo si pu&ograve; utilizzare il comando <SAMP>y</SAMP> seguito da un modificatore, oppure il comando <SAMP>yy</SAMP> che invece si riferisce a tutta la riga attiva. Per incollare il testo copiato, dopo aver posizionato il cursore nella posizione di destinazione, si pu&ograve; utilizzare il comando <SAMP>p</SAMP> oppure <SAMP>P</SAMP>, a seconda che si intenda incollare prima o dopo la posizione del cursore.</P>

<P>Il comandi <SAMP>p</SAMP> e <SAMP>P</SAMP> non cancellano il contenuto dell'area temporanea, di conseguenza, se serve si pu&ograve; ripetere l'operazione di inserimento riutilizzando questi comandi.</P>

<P>Se invece di copiare si vuole spostare il testo, al posto dei comandi di estrazione si possono usare quelli di cancellazione, che, anche se non era stato chiarito precedentemente, prima di cancellare il testo fanno una copia nell'area temporanea.</P>

<TABLE ID="anchor1496" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>yy </TD><TD>Copia la riga attiva nell'area temporanea. </TD></TR>
<TR><TD>y<VAR>mod</VAR> </TD><TD>Copia nell'area temporanea il testo fino all'estensione indicata dal modificatore. </TD></TR>
<TR><TD>dd </TD><TD>Trasferisce la riga attiva nell'area temporanea. </TD></TR>
<TR><TD>d<VAR>mod</VAR> </TD><TD>Trasferisce nell'area temporanea il testo fino all'indicazione dal modificatore. </TD></TR>
<TR><TD>p </TD><TD>Incolla prima della posizione del cursore. </TD></TR>
<TR><TD>P </TD><TD>Incolla dopo la posizione del cursore. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1496">75.5</A>. Elenco dei comandi per le operazioni di copia e spostamento di testo che fanno uso dell'area temporanea di memoria senza nome. </EM></P>

<DL>
<DT><STRONG>Esempi</STRONG></DT>
<DD>

<P class="command"><STRONG><CODE>5yy</CODE></STRONG></P>

<P>Copia nell'area temporanea cinque righe a partire da quella attiva.</P>

<P class="command"><STRONG><CODE>yw</CODE></STRONG></P>

<P>Copia nell'area temporanea il testo che parte dalla posizione attiva fino all'inizio della prossima parola.</P>

<P class="command"><STRONG><CODE>y$</CODE></STRONG></P>

<P>Copia nell'area temporanea il testo che parte dalla posizione attiva fino alla fine della riga.</P>

<P class="command"><STRONG><CODE>3dd</CODE></STRONG></P>

<P>Sposta nell'area temporanea tre righe a partire da quella attiva.</P>

<P class="command"><STRONG><CODE>2P</CODE></STRONG></P>

<P>Incolla due copie del testo contenuto nell'area temporanea a partire dalla posizione a sinistra del cursore.</P>
</DD>
</DL>

<H3>75.1.12 &nbsp; <A NAME="title1286"></A><A NAME="anchor1497"></A>
 Copia e spostamento con nome </H3>

<P>Quando si vogliono utilizzare delle aree temporanee di memoria specifiche, cio&egrave; identificate attraverso le lettere dell'alfabeto, si procede nei modi gi&agrave; visti nel caso dell'uso dell'area temporanea senza nome, con la differenza che i comandi sono preceduti da <SAMP>"<VAR>x</VAR></SAMP>, dove <VAR>x</VAR> &egrave; la lettera che si vuole usare.</P>

<P>Si introduce per&ograve; una novit&agrave; importante: &egrave; possibile aggiungere del testo a un'area temporanea: basta indicarla attraverso una lettera maiuscola.</P>

<TABLE ID="anchor1498" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>"<VAR>x</VAR>yy </TD><TD>Copia la riga attiva nell'area temporanea <VAR>x</VAR> </TD></TR>
<TR><TD>"<VAR>x</VAR>y<VAR>mod</VAR> </TD><TD>Copia nell'area temporanea <VAR>x</VAR> il testo fino all'indicazione dal modificatore. </TD></TR>
<TR><TD>"<VAR>x</VAR>dd </TD><TD>Trasferisce la riga attiva nell'area temporanea <VAR>x</VAR>. </TD></TR>
<TR><TD>"<VAR>x</VAR>d<VAR>mod</VAR> </TD><TD>Trasferisce nell'area temporanea <VAR>x</VAR> il testo fino all'indicazione dal modificatore. </TD></TR>
<TR><TD>"<VAR>x</VAR>p </TD><TD>Incolla il contenuto dell'area temporanea <VAR>x</VAR> prima del cursore. </TD></TR>
<TR><TD>"<VAR>x</VAR>P </TD><TD>Incolla il contenuto dell'area temporanea <VAR>x</VAR> dopo il cursore. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1498">75.6</A>. Elenco dei comandi per le operazioni di copia e spostamento di testo che fanno uso delle aree temporanee con nome. </EM></P>

<DL>
<DT><STRONG>Esempi</STRONG></DT>
<DD>

<P class="command"><STRONG><CODE>"adw</CODE></STRONG></P>

<P>Sposta il testo nell'area temporanea <SAMP>a</SAMP>, a partire dalla posizione attiva fino all'inizio della prossima parola.</P>

<P class="command"><STRONG><CODE>"a5yy</CODE></STRONG></P>

<P>Copia cinque righe nell'area temporanea <SAMP>a</SAMP>, a partire dalla posizione attiva (inclusa).</P>

<P class="command"><STRONG><CODE>"A3yy</CODE></STRONG></P>

<P>Aggiunge tre righe nell'area temporanea <SAMP>a</SAMP>, a partire dalla posizione attiva (inclusa).</P>

<P class="command"><STRONG><CODE>"a2P</CODE></STRONG></P>

<P>Incolla due copie del contenuto dell'area temporanea <SAMP>a</SAMP>, a partire dalla posizione precedente a quella su cui si trova il cursore.</P>
</DD>
</DL>

<H3>75.1.13 &nbsp; <A NAME="title1287"></A><A NAME="anchor1499"></A>
 Ricerche </H3>

<P>Per effettuare delle ricerche all'interno del documento aperto con <A NAME="index6564"></A>VI si possono utilizzare le <A NAME="index6565"></A>espressioni regolari (capitolo <A HREF="a2276.html#anchor4215">211</A>) attraverso due comandi un po' strani: <SAMP>/</SAMP> e <SAMP>?</SAMP>. La sintassi per la ricerca in avanti &egrave;:</P>

<P class="syntax"><TT>/<VAR>modello</VAR>
</TT></P>

<P>mentre per la ricerca a ritroso &egrave; la seguente:</P>

<P class="syntax"><TT>?<VAR>modello</VAR>
</TT></P>

<P>Nel momento in cui si preme il tasto della barra obliqua o del punto interrogativo, <A NAME="index6566"></A>VI visualizza il comando nella riga inferiore dello schermo permettendone il controllo e la correzione come avviene per i comandi che iniziano con i due punti. Al termine, l'inserimento di questo tipo di comando deve essere concluso con un [<KBD>Invio</KBD>].</P>

<TABLE ID="anchor1500" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>/<VAR>modello</VAR> </TD><TD>Cerca in avanti una corrispondenza con il modello indicato. </TD></TR>
<TR><TD>?<VAR>modello</VAR> </TD><TD>Cerca all'indietro una corrispondenza con il modello indicato. </TD></TR>
<TR><TD>n </TD><TD>Ripete l'ultimo comando / o ?. </TD></TR>
<TR><TD>N </TD><TD>Ripete l'ultimo comando / o ? in modo inverso . </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1500">75.7</A>. I comandi di ricerca attraverso <A NAME="index6567"></A>espressioni regolari. </EM></P>

<P>Il tipo di <A NAME="index6568"></A>espressione regolare che pu&ograve; essere utilizzato con <A NAME="index6569"></A>VI &egrave; solo quello elementare e valgono in particolare le regole indicate nella tabella <A HREF="a2104.html#anchor1501">75.8</A>.</P>

<TABLE ID="anchor1501" BORDER="3">

<THEAD>
<TR><TD>Simbolo </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>. </TD><TD>Corrisponde a un carattere qualsiasi. </TD></TR>
<TR><TD>\ </TD><TD>Fa perdere il significato speciale che pu&ograve; avere il carattere seguente. </TD></TR>
<TR><TD>^ </TD><TD>Corrisponde all'inizio di una riga. </TD></TR>
<TR><TD>$ </TD><TD>Corrisponde alla fine di una riga. </TD></TR>
<TR><TD>[<VAR>a</VAR><VAR>b</VAR><VAR>c</VAR>] </TD><TD>Corrisponde a un carattere qualsiasi tra quelli tra parentesi quadre. </TD></TR>
<TR><TD>[^<VAR>a</VAR><VAR>b</VAR><VAR>c</VAR>] </TD><TD>Corrisponde a un carattere qualsiasi diverso da quelli tra parentesi quadre. </TD></TR>
<TR><TD>[<VAR>a</VAR>-<VAR>z</VAR>] </TD><TD>Un carattere qualsiasi nell'intervallo compreso tra <VAR>a</VAR> e <VAR>z</VAR>. </TD></TR>
<TR><TD>[^<VAR>a</VAR>-<VAR>z</VAR>] </TD><TD>Un carattere qualsiasi diverso dall'intervallo compreso tra <VAR>a</VAR> e <VAR>z</VAR>. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1501">75.8</A>. Le <A NAME="index6570"></A>espressioni regolari che dovrebbero essere disponibili con la maggior parte delle realizzazioni di <A NAME="index6571"></A>VI. </EM></P>

<DL>
<DT><STRONG>Esempi</STRONG></DT>
<DD>

<P class="command"><STRONG><CODE>/[Ll]inux</CODE></STRONG></P>

<P>Cerca in avanti tutte le stringhe corrispondenti a &laquo;Linux&raquo; oppure &laquo;linux&raquo;.</P>

<P class="command"><STRONG><CODE>/\.$</CODE></STRONG></P>

<P>Cerca in avanti il punto finale di una riga (si osservi l'uso della barra obliqua inversa per togliere il significato speciale che ha il punto in un'<A NAME="index6572"></A>espressione regolare).</P>
</DD>
</DL>

<H3>75.1.14 &nbsp; <A NAME="title1288"></A><A NAME="anchor1502"></A>
 Ricerche e sostituzioni </H3>

<P>La ricerca e sostituzione sistematica avviene attraverso un comando particolare che inizia con i due punti. La sua sintassi &egrave; la seguente:</P>

<P class="syntax"><TT>:<VAR>inizio</VAR>,<VAR>fine</VAR>s/<VAR>modello_da_cercare</VAR>/<VAR>sostituzione</VAR>/<STRONG><BIG>[</BIG></STRONG>g<STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG>c<STRONG><BIG>]</BIG></STRONG>
</TT></P>

<P>L'indicazione <VAR>inizio</VAR> e <VAR>fine</VAR> fa riferimento alle righe su cui intervenire. Si possono indicare dei numeri, oppure dei simboli con funzioni simili. Il simbolo <SAMP>$</SAMP> pu&ograve; essere usato per indicare l'ultima riga del file. Un punto singolo (<SAMP>.</SAMP>) rappresenta la riga attiva. Il simbolo <SAMP>%</SAMP> viene invece utilizzato da solo per indicare tutte le righe del file.</P>

<P>Il modello utilizzato per la ricerca viene espresso secondo la forma delle <A NAME="index6573"></A>espressioni regolari.</P>

<P>Normalmente, il valore da sostituire al modello cercato &egrave; fisso, ma pu&ograve; contenere un riferimento alla stringa trovata, attraverso il simbolo <SAMP>&amp;</SAMP>.</P>

<P>La direttiva <SAMP>g</SAMP> specifica che si deve intervenire su tutte le occorrenze della corrispondenza con il modello, altrimenti la sostituzione riguarda solo la prima di queste.</P>

<P>La direttiva <SAMP>c</SAMP> specifica che ogni sostituzione deve essere confermata espressamente.</P>

<DL>
<DT><STRONG>Esempi</STRONG></DT>
<DD>

<P class="command"><STRONG><CODE>:1,$s/pippo/pappa/g</CODE></STRONG></P>

<P>Sostituisce ogni occorrenza della parola &laquo;pippo&raquo; con la parola &laquo;pappa&raquo;. La ricerca viene effettuata a partire dalla prima riga fino all'ultima.</P>

<P class="command"><STRONG><CODE>:%s/pippo/pappa/g</CODE></STRONG></P>

<P>Questo &egrave; un modo alternativo per eseguire la stessa operazione dell'esempio precedente: il simbolo <SAMP>%</SAMP> rappresenta da solo tutte le righe del file.</P>

<P class="command"><STRONG><CODE>:.,10s/^..//g</CODE></STRONG></P>

<P>Elimina i primi due caratteri (<SAMP>^..</SAMP>) da dieci righe a partire da quella attiva.</P>

<P class="command"><STRONG><CODE>:%s/^..//gc</CODE></STRONG></P>

<P>Esegue la stessa operazione dell'esempio precedente, applicando la sostituzione su tutto il file, richiedendo per&ograve; conferma per ogni sostituzione.</P>

<P class="command"><STRONG><CODE>:.,10s/^/xxxx/g</CODE></STRONG></P>

<P>Inserisce la stringa &laquo;xxxx&raquo; all'inizio di dieci righe a partire da quella attiva.</P>
</DD>
</DL>

<H3>75.1.15 &nbsp; <A NAME="title1289"></A><A NAME="anchor1503"></A>
 Annullamento dell'ultimo comando </H3>

<P><A NAME="index6574"></A>VI permette di annullare l'ultimo comando inserito attraverso il comando <SAMP>u</SAMP>. A seconda della realizzazione di <A NAME="index6575"></A>VI utilizzata, richiamando nuovamente il comando <SAMP>u</SAMP> si riottengono le modifiche annullate precedentemente, oppure si continuano ad annullare gli effetti dei comandi precedenti.</P>

<TABLE ID="anchor1504" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>u </TD><TD>Annulla l'ultimo comando. </TD></TR>
<TR><TD>U </TD><TD>Annulla le modifiche sulla riga attiva. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1504">75.9</A>. Annullamento di un comando. </EM></P>

<H3>75.1.16 &nbsp; <A NAME="title1290"></A><A NAME="anchor1505"></A>
 Caricamento, salvataggio e conclusione </H3>

<P>Il file o i file utilizzati per la modifica (compresi quelli che si creano) vengono aperti normalmente attraverso l'indicazione nella riga di comando, al momento dell'avvio dell'eseguibile <SAMP>vi</SAMP>.</P>

<P>Il salvataggio di un file pu&ograve; essere fatto per mezzo del comando <SAMP>:w</SAMP> (<EM>Write</EM>) seguito eventualmente dal nome del file (quando si vuole salvare con un nome diverso oppure quando si sta creando un file nuovo). La conclusione dell'attivit&agrave; di <A NAME="index6576"></A>VI si ottiene con il comando <SAMP>:q</SAMP>. I comandi possono essere combinati tra loro, per esempio quando si vuole salvare e concludere l'attivit&agrave; simultaneamente con il comando <SAMP>:wq</SAMP>. Il punto esclamativo (<SAMP>!</SAMP>) pu&ograve; essere usato alla fine di questi comandi per forzare le situazioni, come quando si vuole concludere l'attivit&agrave; senza salvare con il comando <SAMP>:q!</SAMP>.</P>

<P>Dal momento che <A NAME="index6577"></A>VI non mostra normalmente alcuna informazione riferita al file su cui si opera (compreso il nome), il comando <SAMP>:f</SAMP> (oppure la combinazione [<KBD>Ctrl-G</KBD>]) mostra sulla riga inferiore dello schermo: il nome del file aperto, le dimensioni e il numero della riga attiva.</P>

<TABLE ID="anchor1506" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>:e <VAR>nomefile</VAR> </TD><TD>Carica il file indicato per poterlo modificare. </TD></TR>
<TR><TD>:e! </TD><TD>Ricarica il file annullando le modifiche fatte nel frattempo. </TD></TR>
<TR><TD>:r <VAR>nomefile</VAR> </TD><TD>Legge il file indicato e ne inserisce il contenuto dopo la riga attiva. </TD></TR>
<TR><TD>:f </TD><TD>Mostra il nome e le caratteristiche del file aperto. </TD></TR>
<TR><TD>:w </TD><TD>Salva. </TD></TR>
<TR><TD>:w <VAR>nomefile</VAR> </TD><TD>Salva una copia con il nome indicato. </TD></TR>
<TR><TD>:wq </TD><TD>Salva e termina l'esecuzione. </TD></TR>
<TR><TD>:q </TD><TD>Fine lavoro. </TD></TR>
<TR><TD>:q! </TD><TD>Fine lavoro forzato. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1506">75.10</A>. I comandi per il caricamento dei file e il loro salvataggio. </EM></P>

<TABLE ID="anchor1507" BORDER="0" WIDTH="100%">
<TR><TD>
<HR>

<PRE>Il mio primo documento scritto con vi.

Non &egrave; facile, ma ne vale ugualmente la pena
~
~
~
~
~
~
:w esempio_</PRE>
<HR>

<P class="caption"> Figura <A HREF="a2104.html#anchor1507">75.4</A>. <A NAME="index6578"></A>VI durante l'esecuzione del comando <SAMP>:w</SAMP>, prima della pressione conclusiva del tasto [<KBD>Invio</KBD>] </P>

</TD></TR>
</TABLE>

<H3>75.1.17 &nbsp; <A NAME="title1291"></A><A NAME="anchor1508"></A>
 Variabili </H3>

<P><A NAME="index6579"></A>VI ha ereditato da <A NAME="index6580"></A>EX delle variabili di configurazione. Non si tratta di variabili di ambiente, ma di variabili interne a <A NAME="index6581"></A>VI. Per attivare una variabile si utilizza il comando seguente:</P>

<P class="syntax"><TT>:set<STRONG><BIG>[</BIG></STRONG>no<STRONG><BIG>]</BIG></STRONG><VAR>nome_della_variabile</VAR>
</TT></P>

<P>Il prefisso <SAMP>no</SAMP>, prima del nome della variabile, serve per disattivarla. La tabella <A HREF="a2104.html#anchor1509">75.11</A> mostra l'elenco di alcune di queste variabili.</P>

<TABLE ID="anchor1509" BORDER="3">

<THEAD>
<TR><TD>Variabile </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>autoindent </TD><TD>Mantiene i livelli di rientro nelle righe nuove. </TD></TR>
<TR><TD>beautify </TD><TD>Elimina i caratteri speciali non stampabili. </TD></TR>
<TR><TD>ignorecase </TD><TD>Nelle ricerche, ignora la differenza tra maiuscole e minuscole. </TD></TR>
<TR><TD>list </TD><TD>Mostra i caratteri di tabulazione e di <A NAME="index6583"></A>interruzione di riga. </TD></TR>
<TR><TD>number </TD><TD>Visualizza i numeri delle righe. </TD></TR>
<TR><TD>ruler </TD><TD>Visualizza le coordinate del cursore alla base dello schermo. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1509">75.11</A>. Variabili utilizzate da <A NAME="index6582"></A>VI attraverso il comando <SAMP>:set</SAMP>. </EM></P>

<DL>
<DT><STRONG>Esempi</STRONG></DT>
<DD>

<P class="command"><STRONG><CODE>:set nolist</CODE></STRONG></P>

<P>Disabilita la visualizzazione dei caratteri di tabulazione e di fine riga.</P>

<P class="command"><STRONG><CODE>:set number</CODE></STRONG></P>

<P>Visualizza i numeri di riga.</P>
</DD>
</DL>

<H3>75.1.18 &nbsp; <A NAME="title1292"></A><A NAME="anchor1510"></A>
 Comandi particolari </H3>

<P>Di seguito sono elencati una serie di comandi particolari che non sono stati inclusi nelle categorie precedenti.</P>

<UL>

<LI>

<P class="syntax"><TT>m<VAR>x</VAR>
</TT></P>

<P>Etichetta la posizione corrente con la lettera rappresentata da <VAR>x</VAR>. Valgono solo le lettere minuscole. Il testo non viene modificato.</P>
</LI>

<LI>

<P class="syntax"><TT>'<VAR>x</VAR>
</TT></P>

<P>Sposta il cursore all'inizio della riga che contiene l'etichetta rappresentata da <VAR>x</VAR>.</P>
</LI>

<LI>

<P class="command">[<KBD>Ctrl+L</KBD>]</P>

<P>Riscrive la schermata: se sono apparsi messaggi che creano difficolt&agrave; alla visualizzazione del testo su cui si sta lavorando, questo comando permette di farli scomparire mostrando il testo effettivo del file.</P>
</LI>

<LI>

<P class="syntax"><TT>:!<VAR>comando</VAR>
</TT></P>

<P>Esegue il comando di <A NAME="index6584"></A>shell indicato.</P>
</LI>

<LI>

<P class="syntax"><TT>:ab<VAR>abbreviazione</VAR><VAR>testo_da_sostituire</VAR>
</TT></P>

<P>Permette di stabilire un'abbreviazione che verr&agrave; sostituita sistematicamente con tutto quello che segue il comando. Se si usa <SAMP>:ab</SAMP> da solo, si ottiene un elenco delle abbreviazioni disponibili.</P>
</LI>
</UL>

<H3>75.1.19 &nbsp; <A NAME="title1293"></A><A NAME="anchor1511"></A>
 File di configurazione </H3>

<P>Pu&ograve; essere utilizzato il file <CODE>~/.exrc</CODE> per personalizzare la configurazione di <A NAME="index6585"></A>VI attraverso comandi <EM>colon</EM> (quelli tipici di <A NAME="index6586"></A>EX). Le cose pi&ugrave; comuni che appariranno all'interno di questo file saranno la definizione di abbreviazioni e la definizione di alcune variabili. Segue un esempio.</P>

<PRE>:ab lx Linux
:ab xwin X Window System
:set autoindent
:set number</PRE>

<H3>75.1.20 &nbsp; <A NAME="title1294"></A><A NAME="anchor1512"></A>
 Problemi di portabilit&agrave; </H3>

<P>Uno dei vantaggi importanti nell'uso di <A NAME="index6587"></A>VI sta nella disponibilit&agrave; di realizzazioni di questo programma per qualsiasi piattaforma. All'inizio di questo gruppo di sezioni su <A NAME="index6588"></A>VI si accennava al fatto che esiste un'ottima versione Dos in grado di funzionare molto bene anche con i vecchi elaboratori dotati di poca memoria.</P>

<P>Quando si trasferiscono testi da un sistema GNU/Linux a Dos e viceversa si pone il problema dell'<A NAME="index6589"></A>insieme di caratteri a disposizione: su GNU/Linux si utilizza presumibilmente la codifica Latin&nbsp;1, mentre con il Dos no.</P>

<P>La soluzione pi&ugrave; semplice a questo problema &egrave; probabilmente quella di usare Latin&nbsp;1 in generale e di convertire le lettere accentate Dos in Latin&nbsp;1 quando possibile. Per questo si pu&ograve; realizzare un semplice file di comandi da eseguire automaticamente utilizzando l'opzione <SAMP>-s</SAMP>.<SUP><A HREF="#footnote1" NAME="footnote-ref1">(1)</A></SUP></P>

<PRE>:1,$s/~E/&agrave;/g
:1,$s/~J/&egrave;/g
:1,$s/~B/&eacute;/g
:1,$s/~M/&igrave;/g
:1,$s/~U/&ograve;/g
:1,$s/~W/&ugrave;/g</PRE>

<P>In pratica, la sintassi da usare all'avvio di <A NAME="index6590"></A>VI dovrebbe essere la seguente:</P>

<P class="syntax"><TT>vi-s<VAR>file_comandi</VAR><VAR>file_da_elaborare</VAR>
</TT></P>

<TABLE BORDER="3" WIDTH="100%">
<TR><TD>

<P>In generale, i problemi legati alla conversione di un file da un <A NAME="index6591"></A>insieme di caratteri all'altro, si risolvono attraverso l'uso di <SAMP>recode</SAMP>, descritto nel capitolo <A HREF="a2375.html#anchor5669">291</A>.</P>

</TD></TR>
</TABLE>

<H2>75.2 &nbsp; <A NAME="title1295"></A><A NAME="anchor1513"></A>
 <A NAME="index6592"></A>AE <A NAME="index6593"></A> </H2>

<P><A NAME="index6594"></A>AE &egrave; un programma per la creazione e la modifica di file di testo che non ha doti particolari, per&ograve; viene utilizzato alle volte, anche in sostituzione a <A NAME="index6595"></A>VI, date le sue dimensioni ridotte e la sua configurabilit&agrave;. In pratica, &egrave; importante conoscere l'uso elementare di <A NAME="index6596"></A>AE perch&eacute; si potrebbe essere costretti a usarlo quando ci si trova in condizioni di emergenza.</P>

<H3>75.2.1 &nbsp; <A NAME="title1296"></A><A NAME="anchor1514"></A>
 Configurazione di <A NAME="index6597"></A>AE <A NAME="index6598"></A> </H3>

<P><A NAME="index6599"></A>AE, pur essendo un programma che utilizza poche risorse, consente una configurazione dettagliata del suo funzionamento. Questo permette di solito di farlo funzionare in modo simile a <A NAME="index6600"></A>VI o a <A NAME="index6601"></A>Emacs. In generale, non &egrave; il caso di intervenire nella configurazione, tuttavia &egrave; bene sapere come si articola.</P>

<P>Il file di configurazione generale &egrave; <CODE>/etc/ae.rc</CODE>, mentre per una configurazione particolare, <A NAME="index6602"></A>AE utilizza il file <CODE>./ae.rc</CODE>, se esiste, oppure il file <CODE>~/ae.rc</CODE> (nella <A NAME="index6603"></A>directory personale dell'utente).</P>

<P>L'eseguibile <SAMP>ae</SAMP> pu&ograve; essere avviato anche con l'opzione <SAMP>-f</SAMP> per indicare un file di configurazione alternativo. Questo fatto viene sfruttato alle volte per realizzare degli <A NAME="index6604"></A>script che permettono di avviarlo al posto di altri programmi del genere, utilizzando la configurazione migliore per emularne il comportamento.</P>

<H3>75.2.2 &nbsp; <A NAME="title1297"></A><A NAME="anchor1515"></A>
 Avvio di <A NAME="index6605"></A>AE </H3>

<P class="syntax"><TT>ae<STRONG><BIG>[</BIG></STRONG>-f<VAR>file_di_configurazione</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG><VAR>file</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>

<P>La sintassi per l'utilizzo dell'eseguibile <SAMP>ae</SAMP> &egrave; molto semplice, e si spiega praticamente da sola: se si usa l'opzione <SAMP>-f</SAMP> si intende indicare esplicitamente un file di configurazione particolare.</P>

<TABLE ID="anchor1516" BORDER="0" WIDTH="100%">
<TR><TD>
<HR>

<PRE>File "" 0 bytes.
File read and write  ^X I ^X^S      Left, down, up, right   ^B  ^N  ^P  ^F
Version, exit, quit  ^X^V ^X^C ^Q   Word left and right     &lt;esc&gt;B  &lt;esc&gt;F
Macros               ^M             Page down and up        ^V      &lt;esc&gt;V
Help on and off      ^X^H           Front and end of line   ^A      ^E
Redraw               ^L             Top and end of file     &lt;esc&gt;&lt;  &lt;esc&gt;&gt;
Insert               typed keys     Delete left and right   BACKSPACE DEL
Literal escape       ^[             Block, cut, paste       ^@   ^W   ^Y
Undo                 ^_             Invert case             &lt;esc&gt;C
....5...10....5...20....5...30....5...40....5...50....5...60....5...70....5...80
_
&lt;&lt; EOF &gt;&gt;











</PRE>
<HR>

<P class="caption"> Figura <A HREF="a2104.html#anchor1516">75.5</A>. Avvio di <A NAME="index6606"></A>AE. </P>

</TD></TR>
</TABLE>

<P>In condizioni normali, avviando <A NAME="index6607"></A>AE senza indicare argomenti si dovrebbe vedere quello che qui viene mostrato nella figura <A HREF="a2104.html#anchor1516">75.5</A>. Nella parte superiore dello schermo vengono riepilogati i comandi pi&ugrave; importanti, annotati con la simbologia tradizionale del tipo <SAMP>^<VAR>x</VAR></SAMP>, a rappresentare delle combinazioni di tasti del tipo [<KBD>Ctrl+<VAR>x</VAR></KBD>].</P>

<P>Se si utilizza <A NAME="index6608"></A>AE da una console virtuale di GNU/Linux, non si dovrebbero avere problemi a spostare il cursore con i tasti freccia e gli altri tasti usati solitamente per questi scopi; inoltre, dal quadro che si vede, dovrebbe essere chiaro che si possono usare i comandi [<KBD>Ctrl+x</KBD>][<KBD>i</KBD>] e [<KBD>Ctrl+x</KBD>][<KBD>Ctrl+s</KBD>], rispettivamente per caricare e per salvare un file.</P>

<H3>75.2.3 &nbsp; <A NAME="title1298"></A><A NAME="anchor1517"></A>
 Compatibilit&agrave; con <A NAME="index6609"></A>VI </H3>

<P><A NAME="index6610"></A>AE pu&ograve; essere configurato per funzionare in modo simile a <A NAME="index6611"></A>VI. &Egrave; il caso di sottolineare questo fatto, perch&eacute; pu&ograve; capitare di dover usare un sistema GNU/Linux minimo di emergenza in cui con il comando <SAMP>vi</SAMP> si ottiene invece l'avvio di <A NAME="index6612"></A>AE in una modalit&agrave; pseudo-<A NAME="index6613"></A>VI: &egrave; proprio questa compatibilit&agrave; incompleta che pu&ograve; creare disagio in quelle situazioni.</P>

<P>La configurazione normale di <A NAME="index6614"></A>AE per l'uso compatibile con <A NAME="index6615"></A>VI, fa s&igrave; che <A NAME="index6616"></A>AE si presenti normalmente come si vede nella figura <A HREF="a2104.html#anchor1518">75.6</A> (dove in particolare <A NAME="index6617"></A>AE viene usato per modificare il file <CODE>/etc/lilo.conf</CODE>).</P>

<TABLE BORDER="3" WIDTH="100%">
<TR><TD>

<P>Dal riepilogo dei comandi nella parte superiore dello schermo si possono riconoscere alcuni comandi tipici di <A NAME="index6618"></A>VI, tuttavia, si deve tenere presente che quelli che iniziano con i classici due punti (<SAMP>:</SAMP>), non vengono mostrati nella parte bassa dello schermo, come invece accade nella tradizione, ma si digitano alla cieca.</P>

</TD></TR>
</TABLE>

<TABLE ID="anchor1518" BORDER="0" WIDTH="100%">
<TR><TD>
<HR>

<PRE>File "/etc/lilo.conf" 295 bytes read.
File read and write     :r      :w      Left, down, up, right   h,j,k,l
exit and abort          :q      :q!     Word left and right     b       w
Macros                  :map            Page down and up        PgDn PgUp
Help on and off         F1              Front and end of line   0       $
Version Redraw          :ver    ^L       Top and bottom of file  Home End
Insert                  i               Delete left and right   X       x
Open                    O       o       Append                  A       a
Delete                  dd      d[wb0]  Copy                    yy      y[wb0]
Literal escape          ^V               Block, cut, and paste   F2  F3  F4
Undo                    u               Invert case             ~
Print   (only upper)    P       p       Shift   (only right)    &gt;&gt;
....5...10....5...20....5...30....5...40....5...50....5...60....5...70....5...80
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.1-1
        label=linux
        root=/dev/hda4
        append="console=tty10"
        read-only
image=/boot/vmlinuz-2.2.1-2</PRE>
<HR>

<P class="caption"> Figura <A HREF="a2104.html#anchor1518">75.6</A>. Avvio di <A NAME="index6619"></A>AE con la configurazione che lo rende compatibile con <A NAME="index6620"></A>VI. </P>

</TD></TR>
</TABLE>

<P>Per esempio, volendo salvare le modifiche del file, occorre digitare il comando <SAMP>:w</SAMP> seguito da [<KBD>Invio</KBD>], senza vederlo apparire da nessuna parte.</P>

<H2>75.3 &nbsp; <A NAME="title1299"></A><A NAME="anchor1519"></A>
 <A NAME="index6621"></A>Joe <A NAME="index6622"></A> </H2>

<P><A NAME="index6623"></A>Joe &egrave; solo uno tra i tanti programmi adatti per la creazione e la modifica di file di testo. Il vantaggio principale di questo programma &egrave; l'assenza di una modalit&agrave; di comando distinta da quella di inserimento del testo, come invece avviene con <A NAME="index6624"></A>VI. Il suo difetto principale &egrave; l'assenza di un <A NAME="index6625"></A>men&ugrave;.</P>

<P>Pu&ograve; gestire pi&ugrave; file contemporaneamente, collocandoli all'interno di finestre differenti.</P>

<H3>75.3.1 &nbsp; <A NAME="title1300"></A><A NAME="anchor1520"></A>
 Configurazione di <A NAME="index6626"></A>Joe </H3>

<P>A prima vista non sembrerebbe, ma <A NAME="index6627"></A>Joe &egrave; un programma altamente configurabile. Per questo viene utilizzato un file di configurazione contenente opzioni predefinite, comandi della tastiera e schede di guida (<EM>help</EM>).</P>

<P>Il file di configurazione viene cercato:</P>

<UL>

<LI>

<P>nella directory corrente;</P>
</LI>

<LI>

<P>nella <A NAME="index6628"></A>directory personale dell'utente;</P>
</LI>

<LI>

<P>in <CODE>/usr/lib/joe/</CODE>, o in <CODE>/etc/joe/</CODE>, a seconda dell'organizzazione della distribuzione GNU/Linux.</P>
</LI>
</UL>

<P>La distribuzione normale di <A NAME="index6629"></A>Joe fornisce diversi file di configurazione, che vengono presi in considerazione a seconda del nome utilizzato per avviare il programma (per esempio attraverso un <A NAME="index6630"></A>collegamento simbolico).</P>

<P>Le indicazioni sul funzionamento di <A NAME="index6631"></A>Joe che appaiono nelle sezioni seguenti, fanno riferimento alla configurazione normale, quella contenuta nel file <CODE>/usr/lib/joe/joerc</CODE> che viene utilizzata in modo predefinito quando l'utente avvia il programma con il suo nome originale e non ha predisposto alcuna configurazione personalizzata.</P>

<P>Se si vuole personalizzare la configurazione, conviene copiare questo file nella propria <A NAME="index6632"></A>directory personale e rinominarlo, in modo da ottenere <CODE>~/.joerc</CODE>.</P>

<H3>75.3.2 &nbsp; <A NAME="title1301"></A><A NAME="anchor1521"></A>
 Avvio di <A NAME="index6633"></A>Joe </H3>

<P class="syntax"><TT>joe<STRONG><BIG>[</BIG></STRONG><VAR>opzioni_globali</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG><STRONG><BIG>[</BIG></STRONG><VAR>opzioni_particolari</VAR><STRONG><BIG>]</BIG></STRONG><VAR>file</VAR><STRONG><BIG>]</BIG></STRONG>...
</TT></P>

<P>L'eseguibile <SAMP>joe</SAMP> pu&ograve; essere avviato o meno con l'indicazione di uno o pi&ugrave; file su cui intervenire. I file indicati, esistenti, vengono aperti e collocati ognuno in una finestra del programma, mentre quelli che non esistono verranno creati.</P>

<P>Le opzioni sono suddivise in due gruppi: quelle globali che intervengono su tutti i file e sono collocate prima di qualunque indicazione di file; quelle particolari che precedono il nome del file a cui si riferiscono.</P>

<P><A NAME="index6634"></A>Joe pu&ograve; essere avviato con altri nomi, attraverso la predisposizione di <A NAME="index6635"></A>collegamenti, oppure modificando direttamente il nome dell'eseguibile. A seconda del nome, viene utilizzato un file di configurazione differente che adatta <A NAME="index6636"></A>Joe al funzionamento di altri programmi del genere. Per conoscere queste caratteristiche particolari, si pu&ograve; consultare la documentazione originale.</P>

<P>Quando si avvia <A NAME="index6637"></A>Joe senza l'indicazione di alcuna opzione, n&eacute; di alcun file, il programma si presenta come nella figura <A HREF="a2104.html#anchor1522">75.7</A>. Viene mostrata una finestra centrale destinata a contenere il testo di un file da creare, con sopra una riga di stato e in basso le note sul copyright.</P>

<TABLE ID="anchor1522" BORDER="0" WIDTH="100%">
<TR><TD>
<HR>

<PRE>    IW   Unnamed                      Row 1    Col 1   10:07  Ctrl-K H for help
_

















** Joe's Own Editor v2.8 ** Copyright (C) 1995 Joseph H. Allen **l-K H for help</PRE>
<HR>

<P class="caption"> Figura <A HREF="a2104.html#anchor1522">75.7</A>. Avvio di <A NAME="index6638"></A>Joe. </P>

</TD></TR>
</TABLE>

<P>Come si pu&ograve; osservare, sulla riga di stato appaiono: le lettere <SAMP>I</SAMP> e <SAMP>W</SAMP> che stanno rispettivamente per <EM>Insert</EM> e <EM>Wrap</EM>; il nome del file, in questo caso <SAMP>Unnamed</SAMP>; la posizione del cursore; l'ora; un promemoria che ricorda come fare per richiamare la guida interna (con la sequenza [<KBD>Ctrl+k</KBD>][<KBD>h</KBD>]).</P>

<P>La riga di stato viene aggiornata a intervalli regolari di un secondo, e questo per non appesantire il sistema con un'attivit&agrave; che in generale non &egrave; urgente.</P>

<P>Una funzione importante della riga di stato &egrave; quella di visualizzare, nella parte sinistra, l'inserimento di un comando composto da una sequenza di tasti, in modo da poter controllare ci&ograve; che si sta facendo o ci&ograve; che non &egrave; stato terminato.</P>

<P>La riga inferiore dello schermo viene utilizzata normalmente per l'inserimento di informazioni che completano un comando, come il nome di un file da salvare o da caricare. Quando questa parte non viene utilizzata, la finestra contenente il testo del file su cui si lavora si riappropria di quello spazio.</P>

<DL>
<DT><STRONG>Alcune opzioni globali</STRONG></DT>
<DD>

<P class="syntax"><TT>-asis
</TT></P>

<P>Uno dei problemi a cui si va incontro con i programmi da utilizzare in un terminale a caratteri &egrave; quello della codifica ASCII che pu&ograve; essere visualizzata sullo schermo. Generalmente &egrave; consentita la visualizzazione dei codici che utilizzano il primi 7&nbsp;bit, cosa che esclude le lettere accentate e altri simboli speciali.</P>

<P>Questa opzione fa in modo che si utilizzi una codifica a 8&nbsp;bit, visualizzando cos&igrave; tutti i simboli. Se il terminale a disposizione non lo consente, &egrave; meglio non attivare questa opzione: <A NAME="index6639"></A>Joe mostrer&agrave; dei simboli alternativi, evidenziandoli in modo da lasciare intendere che in realt&agrave; si tratta di qualcosa d'altro.</P>

<P class="syntax"><TT>-exask
</TT></P>

<P>La conclusione normale dell'attivit&agrave; con un file coincide con il salvataggio dello stesso (si ottiene con la sequenza [<KBD>Ctrl+k</KBD>][<KBD>x</KBD>]). Con questa opzione, si vuole fare in modo che venga sempre richiesta una conferma, in modo da avere la possibilit&agrave; di cambiare nome.</P>

<P class="syntax"><TT>-help
</TT></P>

<P>Visualizza il riassunto dei comandi a disposizione nella parte superiore dello schermo, come quando si utilizza la sequenza [<KBD>Ctrl+k</KBD>][<KBD>h</KBD>].</P>

<P class="syntax"><TT>-marking
</TT></P>

<P>Con questa opzione si facilita la visualizzazione del testo che viene marcato quando si vuole iniziare un'operazione di taglia-copia-incolla.</P>

<P class="syntax"><TT>-lightoff
</TT></P>

<P>Con questa opzione si fa in modo che al termine di un'operazione di copia, il testo non sia pi&ugrave; evidenziato. Potrebbe non essere opportuno attivare questa opzione quando si intendono eseguire varie operazioni di copia successive con lo stesso blocco di partenza.</P>
<DT><STRONG>Alcune opzioni particolari</STRONG></DT>
<DD>

<P class="syntax"><TT>-crlf
</TT></P>

<P>Fa in modo che le righe siano terminate con la sequenza &lt;<EM>CR</EM>&gt;&lt;<EM>LF</EM>&gt; come si fa nell'ambiente Dos.</P>

<P class="syntax"><TT>-rdonly
</TT></P>

<P>Il file viene aperto in sola lettura.</P>
</DD>
</DL>

<H3>75.3.3 &nbsp; <A NAME="title1302"></A><A NAME="anchor1523"></A>
 Comandi </H3>

<P>I comandi che si possono impartire a <A NAME="index6640"></A>Joe sono generalmente in forma di sequenza di tasti iniziata da una combinazione con il tasto [<KBD>Ctrl</KBD>]. Da un punto di vista tecnico, questo &egrave; un vantaggio, perch&eacute; non si usano combinazioni con un tasto [<KBD>meta</KBD>] che pu&ograve; essere un problema attraverso un terminale. Con questo programma, non esistono quindi le modalit&agrave; di funzionamento che distinguono tra la fase di inserimento e modifica e la fase di comando, come avviene invece con <A NAME="index6641"></A>VI.</P>

<P>Teoricamente si pu&ograve; fare tutto utilizzando solo combinazioni con il tasto [<KBD>Ctrl</KBD>], anche se in pratica, quando il terminale lo consente, conviene utilizzare anche tasti con funzionalit&agrave; comuni come i tasti freccia, i tasti pagina, [<KBD>Backspace</KBD>], [<KBD>Canc</KBD>] e [<KBD>Esc</KBD>]. In particolare, conviene ricordare che [<KBD>Esc</KBD>] corrisponde a [<KBD>Ctrl+[</KBD>] (&laquo;control&raquo;, &laquo;parentesi quadra aperta&raquo;).</P>

<P>La documentazione di <A NAME="index6642"></A>Joe e la sua guida interna, utilizzano la notazione tradizionale per indicare le combinazioni di tasti e le sequenze di questi. per cui, <SAMP>^KH</SAMP> rappresenta la sequenza [<KBD>Ctrl+k</KBD>][<KBD>h</KBD>].</P>

<P>Tutto quello che si fa con <A NAME="index6643"></A>Joe pu&ograve; essere interrotto con la combinazione [<KBD>Ctrl+c</KBD>]. Se si stava introducendo un comando, questo viene annullato, mentre se ci si trovava semplicemente a inserire o modificare il testo, viene proposta la conclusione (senza salvataggio) dell'attivit&agrave; su quel file particolare. Fortunatamente viene chiesta una conferma, e si pu&ograve; annullare nuovamente con un'ulteriore combinazione [<KBD>Ctrl+c</KBD>].</P>

<H3>75.3.4 &nbsp; <A NAME="title1303"></A><A NAME="anchor1524"></A>
 Guida interna </H3>

<P>La guida interna di <A NAME="index6644"></A>Joe &egrave; semplicemente un promemoria di comandi che occupano la parte superiore dello schermo, e lasciano la parte inferiore per le operazioni di inserimento e modifica del testo. Per visualizzarla, e successivamente per farla scomparire, si utilizza la sequenza [<KBD>Ctrl+k</KBD>][<KBD>h</KBD>], come suggerisce la riga di stato nella parte destra.</P>

<P>La figura <A HREF="a2104.html#anchor1525">75.8</A> mostra un esempio di questa guida.</P>

<TABLE ID="anchor1525" BORDER="0" WIDTH="100%">
<TR><TD>
<HR>

<PRE>   Help Screen    turn off with ^KH    more help with ESC . (^[.)
 CURSOR           GO TO            BLOCK      DELETE   MISC         EXIT
 ^B left ^F right ^U  prev. screen ^KB begin  ^D char. ^KJ reformat ^KX save
 ^P up   ^N down  ^V  next screen  ^KK end    ^Y line  ^T  options  ^C  abort
 ^Z previous word ^A  beg. of line ^KM move   ^W &gt;word ^R  refresh  ^KZ shell
 ^X next word     ^E  end of line  ^KC copy   ^O word&lt; ^@  insert   FILE
 SEARCH           ^KU top of file  ^KW file   ^J &gt;line SPELL        ^KE edit
 ^KF find text    ^KV end of file  ^KY delete ^_ undo  ^[N word     ^KR insert
 ^L  find next    ^KL to line No.  ^K/ filter ^^ redo  ^[L file     ^KD save
    IW   Unnamed                      Row 1    Col 1   10:24  Ctrl-K H for help
_








</PRE>
<HR>

<P class="caption"> Figura <A HREF="a2104.html#anchor1525">75.8</A>. La guida interna di <A NAME="index6645"></A>Joe. </P>

</TD></TR>
</TABLE>

<P>La guida si compone di diverse schede. La prima di queste &egrave; quella che si vede nella figura, mentre le successive si ottengono con la sequenza [<KBD>Esc</KBD>][<KBD>.</KBD>] (<A NAME="index6646"></A>escape punto). Quando si scorre tra le schede, per tornare a una scheda precedente si utilizza la sequenza [<KBD>Esc</KBD>][<KBD>,</KBD>] (<A NAME="index6647"></A>escape virgola).</P>

<H3>75.3.5 &nbsp; <A NAME="title1304"></A><A NAME="anchor1526"></A>
 Inserimento e modifica normali </H3>

<P>La scrittura e la modifica di testo avviene nel modo pi&ugrave; semplice: la pura digitazione. Come ripetuto pi&ugrave; volte, <A NAME="index6648"></A>Joe non distingue la modalit&agrave; di inserimento e modifica da quella di comando, perch&eacute; i comandi utilizzano combinazioni di tasti a base di [<KBD>Ctrl</KBD>]. La tabella <A HREF="a2104.html#anchor1527">75.12</A> riassume brevemente le possibilit&agrave; esistenti.</P>

<TABLE ID="anchor1527" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Alternativa </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>Caratteri normali </TD><TD> </TD><TD>Inseriscono il testo corrispondente. </TD></TR>
<TR><TD>Ctrl+h </TD><TD>Backspace </TD><TD>Cancella il carattere a sinistra del cursore. </TD></TR>
<TR><TD>Ctrl+d </TD><TD>Canc </TD><TD>Cancella il carattere in corrispondenza del cursore. </TD></TR>
<TR><TD>Invio </TD><TD> </TD><TD>Inserisce un'<A NAME="index6650"></A>interruzione di riga. </TD></TR>
<TR><TD>Ctrl+y </TD><TD> </TD><TD>Elimina la riga su cui si trova il cursore. </TD></TR>
<TR><TD>Ctrl+j </TD><TD> </TD><TD>Elimina il testo tra il cursore e la fine della riga. </TD></TR>
<TR><TD>Ctrl+_ </TD><TD>Ctrl+- </TD><TD>Annulla l'ultimo comando, compresa la digitazione. </TD></TR>
<TR><TD>Ctrl+^ </TD><TD>Ctrl+&igrave; </TD><TD>Ripete l'ultimo comando annullato, compresa la digitazione. </TD></TR>
<TR><TD>Ctrl+r </TD><TD> </TD><TD>Ripristina il testo sullo schermo. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1527">75.12</A>. Riepilogo delle funzionalit&agrave; di inserimento e modifica di testo con <A NAME="index6649"></A>Joe. </EM></P>

<P>&Egrave; importante ricordare che i caratteri che utilizzano pi&ugrave; di 7&nbsp;bit non vengono visualizzati se non si specifica l'opzione <SAMP>-asis</SAMP> o se non si configura il file <CODE>~/.joerc</CODE> in tal senso.</P>

<H4>75.3.5.1 &nbsp; <A NAME="title1305"></A><A NAME="anchor1528"></A> Caratteri di controllo e metacaratteri </H4>

<P><A NAME="index6651"></A>Joe consente di utilizzare delle sequenze particolari di simboli per l'inserimento di codici ASCII che non possono essere scritti altrimenti. Per l'inserimento di questi codici, si possono usare due tipi di sequenze denominate: caratteri di controllo e metacaratteri.</P>

<P>La tecnica dei <STRONG><EM>caratteri di controllo</EM></STRONG> utilizza il simbolo apice inverso (<SAMP>`</SAMP>) per iniziare la sequenza relativa. Quello che segue pu&ograve; essere un numero decimale di tre cifre, oppure un numero esadecimale o un numero ottale. Quando si preme <SAMP>`</SAMP> appare infatti il promemoria seguente che ricorda le tre possibilit&agrave;.</P>

<PRE>Ctrl- (or 0-9 for dec. ascii, x for hex, or o for octal)   </PRE>

<P>I codici che non possono essere rappresentati e appartengono alla fascia che va da 0 a 31 in decimale, vengono rappresentati con i simboli <SAMP>@</SAMP>, <SAMP>A</SAMP>, <SAMP>B</SAMP>, <SAMP>C</SAMP> ... <SAMP>X</SAMP>, <SAMP>Y</SAMP>, <SAMP>Z</SAMP>, <SAMP>[</SAMP>, <SAMP>^</SAMP>, <SAMP>]</SAMP>, <SAMP>\</SAMP> e <SAMP>_</SAMP>. Tali simboli, se il terminale lo consente, appaiono sottolineati.</P>

<P>I codici che non possono essere rappresentati e appartengono alla fascia che va da 128 in poi, appaiono nella forma dei caratteri corrispondenti che si ottengono togliendo l'ottavo bit (ovvero sottraendo 128), ma invertiti.</P>

<P>La tecnica dei <STRONG><EM>metacaratteri</EM></STRONG> utilizza la sequenza [<KBD>Ctrl+\</KBD>][<KBD><VAR>x</VAR></KBD>], dove <VAR>x</VAR> corrisponde al carattere che si ottiene togliendo l'ottavo bit al simbolo che invece si vuole ottenere. Quando si preme [<KBD>Ctrl+\</KBD>], prima di premere il tasto finale, appare un <A NAME="index6652"></A>invito a completare il metacarattere nell'ultima riga dello schermo.</P>

<PRE>Meta-</PRE>

<P>Quando si dispone di un terminale configurato correttamente, ci sono poche probabilit&agrave; di dover utilizzare i caratteri di controllo o i metacaratteri per inserire lettere accentate o altri simboli particolari, dal momento che la tastiera dovrebbe rispondere correttamente. Quando per&ograve; ci si trova a utilizzare un terminale mal configurato, queste tecniche diventano molto importanti.</P>

<P>Nello stesso modo, se possibile, conviene utilizzare una visualizzazione sullo schermo a 8&nbsp;bit, in modo da vedere correttamente tutti i simboli che compongono l'<A NAME="index6653"></A>insieme di caratteri per cui &egrave; configurato il proprio sistema (per l'Italia dovrebbe trattarsi di ISO 8859-1). Se per&ograve; il terminale non lo consente, la visualizzazione attraverso l'inversione del testo &egrave; comunque un'ottima via di scampo.</P>

<P>La tabella <A HREF="a2104.html#anchor1529">75.13</A> elenca le corrispondenze tra le lettere accentate e i caratteri corrispondenti quando si elimina l'ottavo bit.</P>

<TABLE ID="anchor1529" BORDER="3">

<THEAD>
<TR><TD>ISO 8859-1 </TD><TD>Simbolo corrispondente </TD></TR>
</THEAD>

<TBODY>
<TR><TD>&agrave; </TD><TD>` </TD></TR>
<TR><TD>&egrave; </TD><TD>h </TD></TR>
<TR><TD>&eacute; </TD><TD>i </TD></TR>
<TR><TD>&igrave; </TD><TD>l </TD></TR>
<TR><TD>&ograve; </TD><TD>r </TD></TR>
<TR><TD>&ugrave; </TD><TD>y </TD></TR>
<TR><TD>&Agrave; </TD><TD>@ </TD></TR>
<TR><TD>&Egrave; </TD><TD>H </TD></TR>
<TR><TD>&Eacute; </TD><TD>I </TD></TR>
<TR><TD>&Igrave; </TD><TD>L </TD></TR>
<TR><TD>&Ograve; </TD><TD>R </TD></TR>
<TR><TD>&Ugrave; </TD><TD>Y </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1529">75.13</A>. Lettere accentate e simboli corrispondenti nei terminali a 7&nbsp;bit, quando la codifica a 8&nbsp;bit di partenza &egrave; ISO 8859-1. </EM></P>

<H3>75.3.6 &nbsp; <A NAME="title1306"></A><A NAME="anchor1530"></A>
 Navigazione </H3>

<P>La navigazione del cursore all'interno del testo avviene in modo semplice e intuitivo attraverso l'uso dei tasti freccia e pagina, quando possibile, altrimenti con combinazioni di tasti abbastanza facili. Una particolarit&agrave; importante di questo programma &egrave; la possibilit&agrave; di raggiungere facilmente la zona del testo dove sono state fatte modifiche in precedenza. La tabella <A HREF="a2104.html#anchor1531">75.14</A> elenca i tasti e le combinazioni utili per la navigazione del cursore nel testo.</P>

<TABLE ID="anchor1531" BORDER="3">

<THEAD>
<TR><TD>Tasto o combinazione </TD><TD>Risultato </TD></TR>
</THEAD>

<TBODY>
<TR><TD>tasti freccia </TD><TD>Spostano il cursore di una posizione nella direzione indicata dal tasto. </TD></TR>
<TR><TD>Ctrl+f </TD><TD>Spostamento a destra di un carattere. </TD></TR>
<TR><TD>Ctrl+b </TD><TD>Spostamento a sinistra di un carattere. </TD></TR>
<TR><TD>Ctrl+p </TD><TD>Spostamento in alto di una riga. </TD></TR>
<TR><TD>Ctrl+n </TD><TD>Spostamento in basso di una riga. </TD></TR>
<TR><TD>tasti pagina </TD><TD>Spostano il testo in modo verticale di un numero consistente di righe. </TD></TR>
<TR><TD>Ctrl+u </TD><TD>Spostamento alla schermata precedente. </TD></TR>
<TR><TD>Ctrl+v </TD><TD>Spostamento alla schermata successiva. </TD></TR>
<TR><TD>Ctrl+k u </TD><TD>Spostamento all'inizio del file. </TD></TR>
<TR><TD>Ctrl+k v </TD><TD>Spostamento alla fine del file. </TD></TR>
<TR><TD>Ctrl+k l <VAR>n</VAR> </TD><TD>Spostamento alla riga <VAR>n</VAR>. </TD></TR>
<TR><TD>Ctrl+k - </TD><TD>Spostamento alla posizione della modifica precedente. </TD></TR>
<TR><TD>Ctrl+k = </TD><TD>Spostamento alla posizione della modifica successiva. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1531">75.14</A>. Comandi utili per la navigazione con <A NAME="index6654"></A>Joe quando &egrave; configurato nel modo predefinito. </EM></P>

<H3>75.3.7 &nbsp; <A NAME="title1307"></A><A NAME="anchor1532"></A>
 Gestione dei file e conclusione </H3>

<P><A NAME="index6655"></A>Joe permette di gestire diversi file contemporaneamente. Per questo, ogni file viene inserito in una finestra differente. Queste finestre possono essere visibili contemporaneamente, e in tal caso si dividono lo spazio sullo schermo, oppure possono essere semplicemente sovrapposte.</P>

<P>Le operazioni di caricamento e salvataggio riguardano sempre solo la finestra attiva, cio&egrave; quella in cui si trova il cursore e che risulta visibile. La finestra che viene creata eredita tutte le sue caratteristiche da quella attiva nel momento della creazione, compreso il file in essa contenuto.</P>

<P>La tabella <A HREF="a2104.html#anchor1533">75.15</A> elenca i comandi utili per la gestione di file e finestre.</P>

<TABLE ID="anchor1533" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>Ctrl+k e <VAR>file</VAR> </TD><TD>Carica il file indicato in una nuova finestra. </TD></TR>
<TR><TD>Ctrl+k r <VAR>file</VAR> </TD><TD>Inserisce il file indicato nella posizione del cursore. </TD></TR>
<TR><TD>Ctrl+k d <VAR>file</VAR> </TD><TD>Salva eventualmente confermando o cambiando il nome del file. </TD></TR>
<TR><TD>Ctrl+k x </TD><TD>Salva ed elimina la finestra attiva. </TD></TR>
<TR><TD>Ctrl+c </TD><TD>Termina il lavoro della finestra attiva senza salvare. </TD></TR>
<TR><TD>Ctrl+k o </TD><TD>Crea una nuova finestra dividendo in due lo schermo. </TD></TR>
<TR><TD>Ctrl+k i </TD><TD>Ingrandisce al massimo la finestra attiva, oppure suddivide lo schermo tra le finestre. </TD></TR>
<TR><TD>Ctrl+k n </TD><TD>Passa alla finestra successiva. </TD></TR>
<TR><TD>Ctrl+k p </TD><TD>Passa alla finestra precedente. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1533">75.15</A>. Comandi per la gestione di file e finestre. </EM></P>

<P>La figura <A HREF="a2104.html#anchor1534">75.9</A> mostra uno schermo diviso in due finestre.</P>

<TABLE ID="anchor1534" BORDER="0" WIDTH="100%">
<TR><TD>
<HR>

<PRE>    IW   AppuntiLinux/esempi/COPYING  Row 1    Col 1   10:37  Ctrl-K H for help

                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                          675 Mass Ave, Cambridge, MA 02139, USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

    IW   Unnamed (Modified)           Row 1    Col 11  10:37  Ctrl-K H for help
Ciao mondo_







</PRE>
<HR>

<P class="caption"> Figura <A HREF="a2104.html#anchor1534">75.9</A>. Due finestre che si dividono lo spazio dello schermo. </P>

</TD></TR>
</TABLE>

<P>Vale la pena di tenere a mente quanto segue:</P>

<UL>

<LI>

<P>quando si salva utilizzando la sequenza [<KBD>Ctrl+k</KBD>][<KBD>d</KBD>] si pu&ograve; cambiare nome al file che si salva, ma il nome abbinato alla finestra resta ed &egrave; quello che sar&agrave; proposto ancora;</P>
</LI>

<LI>

<P>la sequenza [<KBD>Ctrl+k</KBD>][<KBD>x</KBD>] salva senza fare domande, oppure richiede una conferma se <A NAME="index6656"></A>Joe funziona con l'opzione <SAMP>-exask</SAMP>;</P>
</LI>

<LI>

<P>quando si carica un file all'interno di una finestra ottenuta suddividendo quella corrente, il file utilizza la finestra attiva e non viene collocato in una nuova;</P>
</LI>

<LI>

<P>quando si chiude l'ultima finestra, il programma conclude la sua attivit&agrave;.</P>
</LI>
</UL>

<H3>75.3.8 &nbsp; <A NAME="title1308"></A><A NAME="anchor1535"></A>
 Taglia, copia, incolla e blocchi di testo </H3>

<P>Una della caratteristiche pi&ugrave; importanti di <A NAME="index6657"></A>Joe &egrave; quella di poter intervenire attraverso le operazioni consuete di taglia-copia-incolla anche su porzioni verticali di testo.</P>

<P>La segnalazione del testo da tagliare o copiare avviene attraverso le sequenza [<KBD>Ctrl+k</KBD>][<KBD>b</KBD>], per l'inizio, e [<KBD>Ctrl+k</KBD>][<KBD>k</KBD>], per la posizione oltre la fine del blocco. Normalmente, il blocco selezionato risulta evidenziato.</P>

<P>Per tutto il tempo in cui il blocco risulta evidenziato, &egrave; possibile incollare attraverso [<KBD>Ctrl+k</KBD>][<KBD>c</KBD>], nella posizione in cui si trova il cursore, tagliare (nel senso di eliminare) attraverso [<KBD>Ctrl+k</KBD>][<KBD>y</KBD>], o spostare con la sequenza [<KBD>Ctrl+k</KBD>][<KBD>m</KBD>]. Il testo evidenziato pu&ograve; anche essere salvato in un file differente, attraverso [<KBD>Ctrl+k</KBD>][<KBD>w</KBD>]</P>

<P>Normalmente, la selezione del testo avviene nel modo tradizionale, verso destra e poi vero il basso, oppure verso sinistra e poi verso l'alto. &Egrave; possibile attivare la modalit&agrave; di selezione rettangolare attraverso [<KBD>Ctrl+t</KBD>][<KBD>x</KBD>]. Quando questa modalit&agrave; &egrave; attivata, si dovrebbe notare una lettera <SAMP>X</SAMP> sulla barra di stato, nella parte sinistra.</P>

<P>La possibilit&agrave; di selezionare un blocco di testo rettangolare (o verticale) fa s&igrave; che poi si possa incollare e spostare un blocco del genere, trattando il testo come una tabella.</P>

<P>La tabella <A HREF="a2104.html#anchor1536">75.16</A> elenca i comandi utili per la gestione dei blocchi di testo.</P>

<TABLE ID="anchor1536" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>Ctrl+k b </TD><TD>Segnala l'inizio di un blocco di testo. </TD></TR>
<TR><TD>Ctrl+k k </TD><TD>Segnala la fine di un blocco di testo. </TD></TR>
<TR><TD>Ctrl+k c </TD><TD>Incolla un blocco di testo. </TD></TR>
<TR><TD>Ctrl+k y </TD><TD>Cancella un blocco di testo. </TD></TR>
<TR><TD>Ctrl+k m </TD><TD>Sposta un blocco di testo. </TD></TR>
<TR><TD>Ctrl+k w </TD><TD>Salva un blocco di testo in un file. </TD></TR>
<TR><TD>Ctrl+t x </TD><TD>Passa alla modalit&agrave; di selezione rettangolare oppure a quella normale. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1536">75.16</A>. Comandi per la gestione dei blocchi di testo. </EM></P>

<H3>75.3.9 &nbsp; <A NAME="title1309"></A><A NAME="anchor1537"></A>
 Modalit&agrave; varie e formattazione del testo </H3>

<P>Un programma per la gestione di file di testo pu&ograve; richiedere comportamenti differenti a seconda del tipo di file su cui si opera. In particolare pu&ograve; essere importante che il testo vada a capo da solo, oppure pu&ograve; essere preferibile il contrario. Nello stesso modo, si pu&ograve; desiderare che il testo scritto venga inserito in sovrascrittura, oppure nel modo normale.</P>

<P>La tabella <A HREF="a2104.html#anchor1538">75.17</A> elenca alcuni comandi utili per la formattazione del testo.</P>

<TABLE ID="anchor1538" BORDER="3">

<THEAD>
<TR><TD>Comando </TD><TD>Descrizione </TD></TR>
</THEAD>

<TBODY>
<TR><TD>Ctrl+t w </TD><TD>Suddivide automaticamente le righe, o meno. </TD></TR>
<TR><TD>Ctrl+k j </TD><TD>Riformatta il paragrafo in base ai margini stabiliti. </TD></TR>
<TR><TD>Ctrl+t l <VAR>n</VAR> </TD><TD>Definisce il margine sinistro (di <VAR>n</VAR> colonne). </TD></TR>
<TR><TD>Ctrl+t r <VAR>n</VAR> </TD><TD>Definisce il margine destro (di <VAR>n</VAR> colonne). </TD></TR>
<TR><TD>Ctrl+t t </TD><TD>Scambio delle modalit&agrave; di sovrascrittura e inserimento. </TD></TR>
</TBODY>
</TABLE>

<P><EM> Tabella <A HREF="a2104.html#anchor1538">75.17</A>. Comandi per la formattazione del testo. </EM></P>

<H3>75.3.10 &nbsp; <A NAME="title1310"></A><A NAME="anchor1539"></A>
 Ricerche e sostituzioni </H3>

<P></P>

<P>La ricerca di una stringa, o di un modello, si inizia con la sequenza [<KBD>Ctrl+k</KBD>][<KBD>f</KBD>].</P>

<PRE>Find (^C to abort):</PRE>

<P>Dopo l'inserimento della stringa, o del modello, viene richiesto il modo in cui effettuare la ricerca.</P>

<PRE>(I)gnore (R)eplace (B)ackwards Bloc(K) NNN (^C to abort):</PRE>

<P>Premendo semplicemente [<KBD>Invio</KBD>] si inizia una ricerca in avanti, altrimenti occorre indicare una o pi&ugrave; istruzioni, attraverso l'uso di lettere o numeri, in relazione al tipo di azione che si intende compiere:</P>

<UL>

<LI>

<P><SAMP>b</SAMP> &nbsp; inizia una ricerca all'indietro;</P>
</LI>

<LI>

<P><SAMP>i</SAMP> &nbsp; non distingue tra lettere maiuscole e minuscole;</P>
</LI>

<LI>

<P><SAMP><VAR>n</VAR></SAMP> &nbsp; inserendo un numero si intende raggiungere l'<VAR>n</VAR>-esima occorrenza della stringa o del modello di ricerca;</P>
</LI>

<LI>

<P><SAMP>r</SAMP> &nbsp; sostituisce le stringhe trovate.</P>
</LI>
</UL>

<P>Quando la ricerca viene fatta con l'opzione <SAMP>r</SAMP> allo scopo di sostituire le stringhe, viene richiesta la stringa da utilizzare nella sostituzione.</P>

<PRE>Replace with (^C to abort):</PRE>

<P>Una volta inserita e premuto [<KBD>Invio</KBD>] inizia la ricerca, e in presenza di una corrispondenza viene richiesto se si intende sostituire o meno il testo.</P>

<PRE>Replace (Y)es (N)o (R)est (B)ackup (^C to abort)?</PRE>

<UL>

<LI>

<P><SAMP>y</SAMP> &nbsp; sostituisce il testo;</P>
</LI>

<LI>

<P><SAMP>n</SAMP> &nbsp; salta la sostituzione e cerca la prossima occorrenza;</P>
</LI>

<LI>

<P><SAMP>r</SAMP> &nbsp; sostituisce tutte le occorrenze a partire da quella appena ritrovata (eventualmente limitandosi al numero indicato quando veniva specificato il tipo di ricerca);</P>
</LI>

<LI>

<P>[<KBD>Ctrl+c</KBD>] &nbsp; interrompe la ricerca.</P>
</LI>
</UL>

<P><A NAME="index6658"></A>Joe consente di utilizzare delle espressioni per la ricerca, in modo da definire un modello particolare. In modo simile, &egrave; consentito anche l'utilizzo di espressioni per la sostituzione. Queste espressioni ricordano vagamente le <A NAME="index6659"></A>espressioni regolari. Per conoscerne l'utilizzo si pu&ograve; consultare la documentazione: <EM>joe</EM>(1). Vale la pena di rammentare che <SAMP>\\</SAMP> rappresenta una singola barra obliqua inversa, mentre <SAMP>\n</SAMP> rappresenta il <A NAME="index6660"></A>codice di interruzione di riga.</P>

<P>[<KBD>Ctrl+l</KBD>] consente di ripetere una ricerca.</P>

<H3>75.3.11 &nbsp; <A NAME="title1311"></A><A NAME="anchor1540"></A>
 Completamento e storico </H3>

<P>Quando il programma propone un <A NAME="index6661"></A>invito a inserire qualche tipo di informazione (si pensi a quando si salva o si carica un file), &egrave; possibile utilizzare il tasto [<KBD>Tab</KBD>] per tentare di ottenere il completamento del nome. Se il nome non pu&ograve; essere completato, la pressione ulteriore di quel tasto fa apparire l'elenco delle possibilit&agrave;.</P>

<P>Nello stesso modo, si possono usare i tasti [<KBD>freccia&nbsp;su</KBD>] o [<KBD>freccia&nbsp;gi&ugrave;</KBD>] per recuperare un'informazione inserita in precedenza nella stessa situazione. Si ottiene cio&egrave; lo scorrimento dello storico dei dati inseriti.</P>

<H3>75.3.12 &nbsp; <A NAME="title1312"></A><A NAME="anchor1541"></A>
 Considerazioni finali </H3>

<P><A NAME="index6662"></A>Joe &egrave; un programma per la gestione dei file di testo piuttosto potente. Molte delle sue caratteristiche non sono state analizzate qui, soprattutto non sono analizzate le sue possibilit&agrave; di configurazione.</P>

<P>Come gi&agrave; suggerito, se si intende utilizzare assiduamente questo programma conviene consultare la sua documentazione originale: <EM>joe</EM>(1).</P>
Appunti di informatica libera 2001.08.18  --- <EM>Copyright &copy; 2000-2001 Daniele Giacomini -- &nbsp;daniele&nbsp;@&nbsp;swlibero.org</EM><HR>

<P><A HREF="#footnote-ref1" NAME="footnote1">1)</A> Le sigle <SAMP>~E</SAMP>, <SAMP>~J</SAMP>, ecc. rappresentano le lettere accentate della codifica utilizzata nei sistemi Dos. Per scrivere un file del genere, occorrono due fasi: una in un ambiente che accetti la codifica Latin&nbsp;1 e l'altra in Dos.</P>
</DIV>
<HR>
<P>Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome  <A HREF="creazione_e_modifica_di_file_di_testo.html">creazione_e_modifica_di_file_di_testo.html</A></P>
<P>
<A HREF="a2105.html">[successivo]</A>
<A HREF="a2103.html">[precedente]</A>
<A HREF="a2.html">[inizio]</A>
<A HREF="a2506.html">[fine]</A>
<A HREF="a21.html">[indice generale]</A>
<A HREF="a26.html">[violazione GPL]</A>
<A HREF="a2504.html">[licenze]</A>
<A HREF="a2505.html">[indice analitico]</A>
</P>
</BODY>
</HTML>