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 daniele @ 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. <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ù importante che è necessario conoscere quando ci si avvicina a un nuovo sistema operativo è quello che permette di creare e modificare i file di testo normale. Nel caso dei sistemi Unix, è indispensabile conoscere <A NAME="index6525"></A>VI, oltre ad altri applicativi simili che possono risultare più 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 <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ù importante per la creazione e la modifica dei file di testo è <A NAME="index6528"></A>VI. È più importante perché 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 è quello di chiarire questa logica, almeno in parte, in modo da facilitarne l'utilizzo in caso di necessità.</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à più o meno ampliate. Per tale motivo, <CODE>/bin/vi</CODE> è 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ù importante è quella del programma <SAMP>vim</SAMP> che è stato portato su diversi sistemi. In particolare, la versione Dos è 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 Kibyte di memoria RAM.</P>
</TD></TR>
</TABLE>
<H3>75.1.1 <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 è 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 è 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ò deriva il nome che fa riferimento al suo comportamento «visuale» (<EM>VIsual</EM>).</P>
<P>A sua volta, <A NAME="index6536"></A>VI è la derivazione di un programma precedente, <A NAME="index6537"></A>EX, che si limitava a gestire una sola riga alla volta. Ma questa eredità è servita per incorporare i comandi tipici di <A NAME="index6538"></A>EX.</P>
<H3>75.1.2 <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ò 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à creato.</P>
<P>È anche possibile l'indicazione di alcune opzioni, tra cui, le più 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ò 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> è 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à accennato, <A NAME="index6544"></A>EX (precisamente l'eseguibile <SAMP>ex</SAMP>) è il programma da cui è 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 <A NAME="title1277"></A><A NAME="anchor1481"></A>
Modalità di funzionamento </H3>
<P><A NAME="index6548"></A>VI distingue diverse modalità di funzionamento, altrimenti definibili come stati o contesti. Quando si avvia <A NAME="index6549"></A>VI, questo si trova di solito nella modalità 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à di inserimento e modifica.</P>
<P>Per complicare ulteriormente le cose, c'è da aggiungere che esistono in realtà due tipi di comandi: «visuali» (<EM>visual</EM>) e «due punti» (<EM>colon</EM>). I comandi visuali sono i più semplici e si compongono di sequenze di uno o più tasti il cui inserimento non appare in alcuna parte dello schermo e si concludono senza la pressione del tasto [<KBD>Invio</KBD>]; i comandi «due punti» 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ù 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à di inserimento si riferisce al momento in cui è possibile modificare il testo. Per passare dalla modalità di comando a quella di inserimento, si preme il tasto corrispondente alla lettera «i» (inserimento prima del cursore) o alla lettera «a» (inserimento dopo il cursore).</P>
<P>Per tornare alla modalità di comando, da quella di inserimento, è sufficiente premere il tasto [<KBD>Esc</KBD>]. Quando ci si trova già nella modalità di comando, la pressione del tasto [<KBD>Esc</KBD>] non produce alcunché 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 è quello di dover passare alla modalità 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ù 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ù recenti.</P>
<H3>75.1.4 <A NAME="title1278"></A><A NAME="anchor1482"></A>
Posizione attiva </H3>
<P>Per la descrizione del funzionamento di <A NAME="index6553"></A>VI è 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ò parlare di riga attiva, colonna attiva e parola attiva, intendendo quelle su cui si trova il cursore.</P>
<H3>75.1.5 <A NAME="title1279"></A><A NAME="anchor1483"></A>
Moltiplicatori </H3>
<P>Prima di affrontare i comandi di <A NAME="index6554"></A>VI è importante comprendere che l'effetto di molti di questi può essere <STRONG><EM>moltiplicato</EM></STRONG> utilizzando un numero. Il concetto è molto semplice e si richiama alla matematica: <SAMP>2a</SAMP> = <SAMP>a+a</SAMP>.</P>
<H3>75.1.6 <A NAME="title1280"></A><A NAME="anchor1484"></A>
Inserimento </H3>
<P>Come già accennato, si può inserire o modificare del testo solo quando si passa alla modalità 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ò usare:</P>
<UL>
<LI>
<P> [<KBD>Invio</KBD>] per terminare una riga e passare alla successiva;</P>
</LI>
<LI>
<P> [<KBD>Backspace</KBD>] per tornare indietro (nella maggior parte dei casi si ottiene anche la cancellazione del testo);</P>
</LI>
<LI>
<P> [<KBD>Esc</KBD>] per terminare la modalità di inserimento e passare a quella di comando.</P>
</LI>
</UL>
<P>Con le realizzazioni di <A NAME="index6556"></A>VI più sofisticate, è 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à di comando.</P>
<TABLE ID="anchor1485" BORDER="0" WIDTH="100%">
<TR><TD>
<HR>
<PRE>Il mio primo documento scritto con vi.
Non è 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à 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à di inserimento. </EM></P>
<H3>75.1.7 <A NAME="title1281"></A><A NAME="anchor1487"></A>
Navigazione </H3>
<P>Come già 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ù recenti permettono l'uso dei tasti freccia durante la modalità di inserimento (oltre che durante la modalità di comando), ma questo è solo un aiuto minimo: in generale è necessario tornare alla modalità 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 |
| <- | | \/ | | /\ | | -> |
`-----' `-----' `-----' `-----'</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 è 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 è 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ò 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 <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ò far precedere da un moltiplicatore (un numero) e in più, o in alternativa, lo si può 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à il comando precedente.</P>
<P>Tuttavia, per poter applicare questo concetto, è necessario che i comandi da utilizzare in associazione con i modificatori (di spostamento), siano stati previsti per questo. Deve trattarsi cioè di comandi che richiedono questa ulteriore aggiunta.</P>
<P>Come si vedrà 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ò far seguire alcun modificatore. Questo tipo di comandi può 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 <A NAME="title1283"></A><A NAME="anchor1491"></A>
Cancellazione </H3>
<P>Durante la fase di inserimento è 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à di comando.</P>
<P>I comandi di cancellazione più 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è 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 è 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 <A NAME="title1284"></A><A NAME="anchor1493"></A>
Sostituzione </H3>
<P>La modifica del testo inserito può avvenire attraverso i comandi di cancellazione già 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ù 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à 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 «b».</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 <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 è un po' complicata. Per questa attività 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 «y» 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ù semplice di gestire questo meccanismo è quello di usare l'area temporanea senza nome. Per copiare una porzione di testo si può 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ò 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ò 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 <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è identificate attraverso le lettere dell'alfabeto, si procede nei modi già 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> è la lettera che si vuole usare.</P>
<P>Si introduce però una novità importante: è 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 <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 è:</P>
<P class="syntax"><TT>/<VAR>modello</VAR>
</TT></P>
<P>mentre per la ricerca a ritroso è 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ò essere utilizzato con <A NAME="index6569"></A>VI è 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ò 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 «Linux» oppure «linux».</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 <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 è 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ò 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 è fisso, ma può contenere un riferimento alla stringa trovata, attraverso il simbolo <SAMP>&</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 «pippo» con la parola «pappa». 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 è 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ò conferma per ogni sostituzione.</P>
<P class="command"><STRONG><CODE>:.,10s/^/xxxx/g</CODE></STRONG></P>
<P>Inserisce la stringa «xxxx» all'inizio di dieci righe a partire da quella attiva.</P>
</DD>
</DL>
<H3>75.1.15 <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 <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ò 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à 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à simultaneamente con il comando <SAMP>:wq</SAMP>. Il punto esclamativo (<SAMP>!</SAMP>) può essere usato alla fine di questi comandi per forzare le situazioni, come quando si vuole concludere l'attività 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 è 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 <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 <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à 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à 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 <A NAME="title1293"></A><A NAME="anchor1511"></A>
File di configurazione </H3>
<P>Può 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ù 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 <A NAME="title1294"></A><A NAME="anchor1512"></A>
Problemi di portabilità </H3>
<P>Uno dei vantaggi importanti nell'uso di <A NAME="index6587"></A>VI sta nella disponibilità 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 1, mentre con il Dos no.</P>
<P>La soluzione più semplice a questo problema è probabilmente quella di usare Latin 1 in generale e di convertire le lettere accentate Dos in Latin 1 quando possibile. Per questo si può 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/à/g
:1,$s/~J/è/g
:1,$s/~B/é/g
:1,$s/~M/ì/g
:1,$s/~U/ò/g
:1,$s/~W/ù/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 <A NAME="title1295"></A><A NAME="anchor1513"></A>
<A NAME="index6592"></A>AE <A NAME="index6593"></A> </H2>
<P><A NAME="index6594"></A>AE è un programma per la creazione e la modifica di file di testo che non ha doti particolari, però viene utilizzato alle volte, anche in sostituzione a <A NAME="index6595"></A>VI, date le sue dimensioni ridotte e la sua configurabilità. In pratica, è importante conoscere l'uso elementare di <A NAME="index6596"></A>AE perché si potrebbe essere costretti a usarlo quando ci si trova in condizioni di emergenza.</P>
<H3>75.2.1 <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 è il caso di intervenire nella configurazione, tuttavia è bene sapere come si articola.</P>
<P>Il file di configurazione generale è <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ò 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 <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> è 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 <esc>B <esc>F
Macros ^M Page down and up ^V <esc>V
Help on and off ^X^H Front and end of line ^A ^E
Redraw ^L Top and end of file <esc>< <esc>>
Insert typed keys Delete left and right BACKSPACE DEL
Literal escape ^[ Block, cut, paste ^@ ^W ^Y
Undo ^_ Invert case <esc>C
....5...10....5...20....5...30....5...40....5...50....5...60....5...70....5...80
_
<< EOF >>
</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ù 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 <A NAME="title1298"></A><A NAME="anchor1517"></A>
Compatibilità con <A NAME="index6609"></A>VI </H3>
<P><A NAME="index6610"></A>AE può essere configurato per funzionare in modo simile a <A NAME="index6611"></A>VI. È il caso di sottolineare questo fatto, perché può 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à pseudo-<A NAME="index6613"></A>VI: è proprio questa compatibilità incompleta che può 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ì 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) >>
....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 <A NAME="title1299"></A><A NAME="anchor1519"></A>
<A NAME="index6621"></A>Joe <A NAME="index6622"></A> </H2>
<P><A NAME="index6623"></A>Joe è solo uno tra i tanti programmi adatti per la creazione e la modifica di file di testo. Il vantaggio principale di questo programma è l'assenza di una modalità di comando distinta da quella di inserimento del testo, come invece avviene con <A NAME="index6624"></A>VI. Il suo difetto principale è l'assenza di un <A NAME="index6625"></A>menù.</P>
<P>Può gestire più file contemporaneamente, collocandoli all'interno di finestre differenti.</P>
<H3>75.3.1 <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 è 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 <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ò essere avviato o meno con l'indicazione di uno o più 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ò 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ò consultare la documentazione originale.</P>
<P>Quando si avvia <A NAME="index6637"></A>Joe senza l'indicazione di alcuna opzione, né 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ò 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à che in generale non è urgente.</P>
<P>Una funzione importante della riga di stato è quella di visualizzare, nella parte sinistra, l'inserimento di un comando composto da una sequenza di tasti, in modo da poter controllare ciò che si sta facendo o ciò che non è 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 è quello della codifica ASCII che può essere visualizzata sullo schermo. Generalmente è consentita la visualizzazione dei codici che utilizzano il primi 7 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 bit, visualizzando così tutti i simboli. Se il terminale a disposizione non lo consente, è meglio non attivare questa opzione: <A NAME="index6639"></A>Joe mostrerà dei simboli alternativi, evidenziandoli in modo da lasciare intendere che in realtà si tratta di qualcosa d'altro.</P>
<P class="syntax"><TT>-exask
</TT></P>
<P>La conclusione normale dell'attività 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à 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ù 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 <<EM>CR</EM>><<EM>LF</EM>> 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 <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 è un vantaggio, perché non si usano combinazioni con un tasto [<KBD>meta</KBD>] che può essere un problema attraverso un terminale. Con questo programma, non esistono quindi le modalità 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ò 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à 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>] («control», «parentesi quadra aperta»).</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ò 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à su quel file particolare. Fortunatamente viene chiesta una conferma, e si può annullare nuovamente con un'ulteriore combinazione [<KBD>Ctrl+c</KBD>].</P>
<H3>75.3.4 <A NAME="title1303"></A><A NAME="anchor1524"></A>
Guida interna </H3>
<P>La guida interna di <A NAME="index6644"></A>Joe è 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 >word ^R refresh ^KZ shell
^X next word ^E end of line ^KC copy ^O word< ^@ insert FILE
SEARCH ^KU top of file ^KW file ^J >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 è 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 <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ù semplice: la pura digitazione. Come ripetuto più volte, <A NAME="index6648"></A>Joe non distingue la modalità di inserimento e modifica da quella di comando, perché 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à 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+ì </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à di inserimento e modifica di testo con <A NAME="index6649"></A>Joe. </EM></P>
<P>È importante ricordare che i caratteri che utilizzano più di 7 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 <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ò 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à.</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à 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ò 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 bit, in modo da vedere correttamente tutti i simboli che compongono l'<A NAME="index6653"></A>insieme di caratteri per cui è configurato il proprio sistema (per l'Italia dovrebbe trattarsi di ISO 8859-1). Se però il terminale non lo consente, la visualizzazione attraverso l'inversione del testo è 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>à </TD><TD>` </TD></TR>
<TR><TD>è </TD><TD>h </TD></TR>
<TR><TD>é </TD><TD>i </TD></TR>
<TR><TD>ì </TD><TD>l </TD></TR>
<TR><TD>ò </TD><TD>r </TD></TR>
<TR><TD>ù </TD><TD>y </TD></TR>
<TR><TD>À </TD><TD>@ </TD></TR>
<TR><TD>È </TD><TD>H </TD></TR>
<TR><TD>É </TD><TD>I </TD></TR>
<TR><TD>Ì </TD><TD>L </TD></TR>
<TR><TD>Ò </TD><TD>R </TD></TR>
<TR><TD>Ù </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 bit, quando la codifica a 8 bit di partenza è ISO 8859-1. </EM></P>
<H3>75.3.6 <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à importante di questo programma è la possibilità 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 è configurato nel modo predefinito. </EM></P>
<H3>75.3.7 <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è 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ò cambiare nome al file che si salva, ma il nome abbinato alla finestra resta ed è quello che sarà 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à.</P>
</LI>
</UL>
<H3>75.3.8 <A NAME="title1308"></A><A NAME="anchor1535"></A>
Taglia, copia, incolla e blocchi di testo </H3>
<P>Una della caratteristiche più importanti di <A NAME="index6657"></A>Joe è 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, è 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ò 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. È possibile attivare la modalità di selezione rettangolare attraverso [<KBD>Ctrl+t</KBD>][<KBD>x</KBD>]. Quando questa modalità è attivata, si dovrebbe notare una lettera <SAMP>X</SAMP> sulla barra di stato, nella parte sinistra.</P>
<P>La possibilità di selezionare un blocco di testo rettangolare (o verticale) fa sì 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à 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 <A NAME="title1309"></A><A NAME="anchor1537"></A>
Modalità varie e formattazione del testo </H3>
<P>Un programma per la gestione di file di testo può richiedere comportamenti differenti a seconda del tipo di file su cui si opera. In particolare può essere importante che il testo vada a capo da solo, oppure può essere preferibile il contrario. Nello stesso modo, si può 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à 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 <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ù 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> inizia una ricerca all'indietro;</P>
</LI>
<LI>
<P><SAMP>i</SAMP> non distingue tra lettere maiuscole e minuscole;</P>
</LI>
<LI>
<P><SAMP><VAR>n</VAR></SAMP> 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> 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> sostituisce il testo;</P>
</LI>
<LI>
<P><SAMP>n</SAMP> salta la sostituzione e cerca la prossima occorrenza;</P>
</LI>
<LI>
<P><SAMP>r</SAMP> 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>] 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, è 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ò 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 <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), è possibile utilizzare il tasto [<KBD>Tab</KBD>] per tentare di ottenere il completamento del nome. Se il nome non può essere completato, la pressione ulteriore di quel tasto fa apparire l'elenco delle possibilità.</P>
<P>Nello stesso modo, si possono usare i tasti [<KBD>freccia su</KBD>] o [<KBD>freccia giù</KBD>] per recuperare un'informazione inserita in precedenza nella stessa situazione. Si ottiene cioè lo scorrimento dello storico dei dati inseriti.</P>
<H3>75.3.12 <A NAME="title1312"></A><A NAME="anchor1541"></A>
Considerazioni finali </H3>
<P><A NAME="index6662"></A>Joe è 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à di configurazione.</P>
<P>Come già 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 © 2000-2001 Daniele Giacomini -- daniele @ 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 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>
|