% Linux Guida dell'Utente                   -*- TeX -*-
 % vi.tex
 % Copyright (c) 1993, 1994 by Larry Greenfield
 %
 % Traduzione di Eugenia Franzoni, 1997
 %
 % Questo file e' liberamente distribuibile, ma si deve preservare
 % questo
 % avviso di copyright su tutte le copie, e deve essere distribuito
 % solo come
 % parte di "Linux Guida dell'Utente". L'uso di questo file e'
 % protetto dal copyright dell'intero documento, nel file
 % "copyright.tex".
 
 
 \chapter{Introduzione a Vi}\label{vi-chapter}
 
 \bttindex{vi}
 
 {\tt vi} (pronunciato ``vi ai'') \`e l'unico editor che si trova veramente
 in quasi tutte le installazioni di \unix. Originariamente \`e stato scritto
 all'Universit\`a della California a Berkeley\index{Universit\`a della
 California, Berkeley}, e se ne possono trovare delle versioni in ciascuna
 edizione di \unix, compreso \linux. Inizialmente \`e un po' ostico, ma ha
 molte caratteristiche potenti; in generale suggeriamo ad un utente alle
 prime armi di usare Emacs\ttindex{emacs}, che \`e in genere pi\`u facile da
 imparare. Comunque, chi usa pi\`u di una piattaforma o chi non ama Emacs pu\`o
 volere imparare ad usare {\tt vi}.
 
 %This chapter is designed to unearth the mysteries of {\tt vi}. Some
 %people will convulse at the mere mention of {\tt vi}, and will declare
 %that users no longer should be subjected to "Vicious".  Others
 %overflow with admiration for the speed, flexibility and power that
 %{\tt vi} offers its loyal users. In reality personal taste dictates
 %what tools are the best to use. Some like sports-cars, others like
 %luxury-cars, and the same applies to computer hardware, operating
 %systems and in this case editors.  The object of this chapter and the
 %tutorials, is so that you can better evaluate whether or not {\tt vi}
 %suits you.
 
 Per capire perch\'e il tasto \key{k}\ pu\`o significare di spostare il cursore
 in alto di una linea e perch\'e ci sono tre modalit\`a diverse \`e necessaria
 una breve introduzione storica di {\tt vi}. Se siete impazienti di
 imparare ad usare l'editor, i due manuali vi guideranno dai primi comandi
 alla conoscenza di tutti i comandi di cui mai avrete bisogno. Il capitolo
 comprende anche una guida ai comandi, che serve come riferimento da tenere
 accanto al terminale.
 
 Anche se {\tt vi} non diventer\`a il vostro editor di testi usuale, non fa
 male sapere come funziona. \`E praticamente sicuro che il sistema UNIX
 che usate abbia qualche variante di {\tt vi}. Forse sar\`a necessario usare
 {\tt vi} per installare qualche altro editor, come Emacs. Molti strumenti,
 applicazioni e giochi UNIX usano un sottoinsieme dei comandi di {\tt
 vi}.
 
 \section{Breve storia di Vi}
 
 I primi editor di testo erano editor di linea, e venivano usati
 tipicamente da terminali di stampa stupidi. Un editor  tipico che operava
 in questa modalit\`a \`e {\bf Ed}\ttindex{ed}: come editor era potente ed
 efficiente, usava pochissime risorse del computer, e funzionava bene con i
 monitor del tempo. {\tt vi} offre un'alternativa visiva con un insieme dei
 comandi significativamente esteso in confronto ad {\tt ed}.
 
 {\tt vi} come lo conosciamo \`e cominciato come editor di linea, e si
 chiamava {\tt ex}\ttindex{ex}. In effetti, {\tt ex} si pu\`o vedere come una
 modalit\`a particolare di {\tt vi}, anche se in effetti \`e vero il contrario.
 La componente visiva di {\tt ex} pu\`o essere avviata da linea di comando
 usando il comando {\tt vi}, o da dentro {\tt ex}.
 
 L'editor {\tt ex}/{\tt vi} \`e stato sviluppato all'Universit\`a della
 California a Berkeley\index{Universit\`a della California, Berkeley} da
 William Joy\index{Joy, William}. Originariamente era fornito come utility
 non supportata fino alla sua inclusione ufficiale nella distribuzione
 dello Unix System V della AT\&T. Da allora \`e diventato sempre pi\`u
 popolare, anche dopo le sfide di editor pi\`u moderni a tutto schermo.
 
 Grazie alla popolarit\`a di {\tt vi} ne esistono molte varianti e se ne
 possono trovare versioni sulla maggior parte dei sistemi operativi. Non \`e
 intenzione di questo capitolo includere tutti i comandi disponibili sotto
 {\tt vi} o sotto le sue varianti; molti cloni hanno esteso e modificato il
 comportamento originale di {\tt vi}, e la maggior parte non
 supportano tutti i comandi originari di {\tt vi}.
 
 Se avete una buona conoscenza di lavoro di {\tt ed}, {\tt vi} sar\`a facile
 da imparare. Anche se non avete intenzione di usare {\tt vi} come normale
 editor, una sua conoscenza di base non pu\`o che essere utile.
 
 \section{Breve manuale di Ed}
 \bttindex{ed}
  
 Lo scopo di questo manuale \`e di farvi cominciare ad usare {\tt ed}. {\tt
 ed} \`e progettato per essere facile da usare, e richiede poco esercizio per
 iniziare. Il modo migliore per imparare \`e esercitarsi,
 quindi seguite le istruzioni e provatelo prima di disprezzare i suoi
 vantaggi pratici.
 
 \subsection{Creare un file}
 {\tt ed} \`e capace di modificare solo un file alla volta. Seguite il
 seguente esempio per creare il vostro primo file di testo con {\tt ed}.
 
 \begin{verbatim}
 /home/larry# ed
 a
 Questo e' il mio primo file di testo con Ed.
 E' veramente divertente.
 .
 w primo.txt
 /home/larry# q
 \end{verbatim}
 
 Potete verificare il contenuto del file usando il comando di
 concatenamento file di Unix:
 \begin{verbatim}
 /home/larry# cat primo.txt
 \end{verbatim}
 
 L'esempio qui sopra illustra diversi punti importanti. Quando richiamate
 {\tt ed} come qui sopra avrete un file vuoto. Il tasto \key{a}\ viene
 usato per aggiungere del testo al file. Per finire di inserire il testo,
 viene usato un punto \key{.}\ nella prima colonna del testo stesso. Per
 salvare il testo in un file, si usa il tasto \key{q}\ in combinazione con
 il nome del file, ed infine si usa il tasto \key{q}\ per uscire
 dall'editor.
 
 L'osservazione pi\`u importante \`e che ci sono due modalit\`a di operazione:
 inizialmente l'editor \`e in modalit\`a comandi; un comando \`e definito da
 caratteri, quindi per capire le intenzioni dell'utente {\tt ed} usa una
 {\bf modalit\`a testo} e una {\bf modalit\`a comandi}.
 
 \subsection{Modificare un file esistente}
 Per aggiungere una linea di testo ad un file esistente seguite il prossimo
 esempio.
 \begin{verbatim}
 /home/larry# ed primo.txt
 a
 Questa e' un'altra linea di testo.
 .
 w
 q
 \end{verbatim}
 
 Se controllate il file con {\tt cat} vedrete che \`e stata aggiunta una
 nuova linea tra la prima e la seconda linea del file originario. Come
 faceva {\tt ed} a sapere dove inserire la nuova linea di testo?        
 
 Quando {\tt ed} legge il file tiene traccia della linea corrente; il
 comando \key{a}\ aggiunger\`a del testo dopo la linea corrente. {\tt ed} pu\`o
 anche inserire il testo prima della linea corrente con il tasto di comando
 \key{i}: l'effetto sar\`a l'inserimento del testo prima della linea
 corrente.
 
 Ora \`e facile vedere che {\tt ed} opera sul testo, linea per linea.  Tutti
 i comandi possono essere applicati alla linea scelta.
 
 Per aggiungere una linea di testo alla fine del file:
 \begin{verbatim}
 /home/larry# ed primo.txt
         $a
         L'ultima linea di testo.
         .
         w
         q
 \end{verbatim}
 
 Il modificatore di comandi \key{\$}\ dice a {\tt ed} di aggiungere la
 linea dopo l'ultima linea del testo. Per aggiungere una linea prima della
 prima linea il modificatore sarebbe \key{1}. Possiamo ora scegliere la
 linea a cui premettere o posporre una linea di testo da inserire.
 
 Come facciamo a sapere che c'\`e sulla linea corrente? Il tasto di comando
 \key{p}\ mostrer\`a il contenuto della linea corrente. Se volete mettere la
 linea corrente alla linea 2 e vederne il contenuto, fate cos\`{\i}:
 \begin{verbatim}
 /home/larry# ed primo.txt
         2p
         q
 \end{verbatim}
 
 \subsection{I numeri di linea in dettaglio}
 Avete visto come mostrare il contenuto della linea corrente, con l'uso del
 comando \key{p}; sapete anche che ci sono dei modificatori dei numeri di
 linea per i comandi. Per stampare il contenuto della seconda linea,
 digitate
 \begin{verbatim}
         2p
 \end{verbatim}
 
 Ci sono dei modificatori speciali che si riferiscono a posizioni che
 possono variare nella durata della sessione di modifica del file: il tasto
 {\key \$} \`e l'ultima linea del testo. Per stampare l'ultima linea:
 \begin{verbatim}
         $p
 \end{verbatim}
 
 Il numero di linea corrente usa il modificatore speciale {\key .}. Per
 mostrare la linea corrente usando un modificatore, fate:
 \begin{verbatim}
         .p
 \end{verbatim}
 
 Questa procedura pu\`o sembrare inutile, anche se \`e molto utile quando si
 parla di intervalli di numeri di linea.
 
 Per mostrare il contenuto del testo dalla linea 1 alla linea 2, bisogna
 dare a {\tt ed} un intervallo.
 \begin{verbatim}
         1,2p
 \end{verbatim}
 
 Il primo numero si riferisce alla linea di inizio, e il secondo si
 riferisce alla linea di fine. La linea corrente sar\`a di conseguenza il
 secondo numero dell'intervallo di comando.
 
 Se volete mostrare il contenuto del file dall'inizio alla linea corrente:
 \begin{verbatim}
         1,.p
 \end{verbatim}
 
 Per mostrare il contenuto del file dalla linea corrente alla fine:
 \begin{verbatim}
         .,$p
 \end{verbatim}
 
 Manca solo di mostrare il contenuto del file intero, che viene lasciato
 come esercizio a voi.
 
 Per cancellare le prime 2 linee del file:
 \begin{verbatim}
         1,2d
 \end{verbatim}
 
 Il tasto di comando {\key d} cancella il testo linea per linea; se volete
 cancellare l'intero contenuto dovete dare:
 \begin{verbatim}
         1,$d
 \end{verbatim}
 
 Se avete fatto molti cambiamenti e non volete salvare il contenuto del
 file, l'opzione migliore \`e uscire dall'editor senza prima salvare il file.
 
 La maggior parte degli utenti non usano {\tt ed} come editor principale.
 Gli editor pi\`u moderni sono a tutto schermo, ed hanno insiemi di comandi
 pi\`u flessibili. {\tt ed} \`e una buona introduzione a {\tt vi} e spiega da dove
 provengono i suoi comandi.
 
 \ettindex{ed}
 
 \section{Breve manuale di Vi}
 Lo scopo di questo manuale \`e di cominciare ad usare l'editor {\tt vi};
 non assume nessuna esperienza di {\tt vi}, quindi vi
 saranno spiegati i dieci comandi pi\`u usati, che
 sono sufficienti per fare la maggior parte
 delle modifiche ai file; potrete allargare il vostro vocabolario di {\tt
 vi} quando vi serve. \`E preferibile che abbiate una macchina su cui fare
 pratica, a mano a mano che andate avanti.
 
 \subsection{Avviare vi}
 Per avviare vi, digitate semplicemente le lettere {\tt vi} seguite dal
 nome del file che volete creare. Vedrete uno schermo con una colonna di
 tilde (\verb"~") sul lato sinistro. {\tt vi} \`e ora in modalit\`a comandi: 
 qualsiasi cosa che inserirete verr\`a interpretata come un comando. I due
 comandi di input base sono:
 
 \begin{verbatim}
      i     inserisce del testo a sinistra del cursore
      a     aggiunge del testo a destra del cursore
 \end{verbatim}
 
 Dato che siete all'inizio di un file vuoto, non importa quale dei due
 usate. Digitatene uno, e poi inserite il testo seguente (una poesia di 
 Augustus DeMorgan trovate in {\em The Unix Programming 
 Environment\/} di B.W. Kernighan e R. Pike):
 
 \begin{verbatim}
      Great fleas have little fleas<Invio>
        upon their backs to bite 'em,<Invio>
      And little fleas have lesser fleas<Invio>
        and so ad infinitum.<Invio>
      And the great fleas themselves, in turn,<Invio>
        have greater fleas to go on;<Invio>
      While these again have greater still,<Invio>
        and greater still, and so on.<Invio>
      <Esc>
 \end{verbatim}
 
 Notate che bisogna premere il tasto \key{Esc} per finire l'inserzione e 
 tornare in
 modalit\`a comandi.
 
 \subsection{Comandi di spostamento del cursore}
 
 \begin{verbatim}
      h     sposta il cursore uno spazio a sinistra
      j     sposta il cursore uno spazio verso il basso
      k     sposta il cursore uno spazio verso l'alto
      l     sposta il cursore uno spazio a destra
 \end{verbatim}
 
 Questi comandi possono essere ripetuti tenendo premuto il tasto: provate a
 spostarvi in giro per il testo. Se provate a fare uno spostamento
 impossibile, come premere la lettera {\bf k} quando il cursore \`e sulla
 prima linea, lo schermo lampegger\`a, o il terminale far\`a un suono. Non vi
 preoccupate, non morde, e non fa male al file.
 
 \subsection{Cancellare del testo}
 \begin{verbatim}
      x     cancella il carattere sul cursore
      dd    cancella una linea
 \end{verbatim}
 
 Spostate il cursore sulla seconda linea e posizionatelo in modo che sia
 sotto l'apostrofo nella parola {\em 'em}. Premete la lettera  \key{x}, e
 l'apostrofo scomparir\`a. Ora premete la lettera  \key{i} per tornare in
 modalit\`a inserimento e digitate le lettere {\bf th}. Premete  \key{Esc}
 quando avete finito.
 
 \subsection{Salvare i file}
 \begin{verbatim}
      :w    salva (scrive su disco)
      :q    esce
 \end{verbatim}
 
 Assicuratevi di essere in modalit\`a comandi premendo il tasto  \key{Esc}.
 Ora digitate {\bf :wq} e salverete il vostro lavoro scrivendolo su un
 file sul disco.
 
 Il comando per uscire da vi \`e  \key{q}. Se volete combinare il salvataggio
 e l'uscita, digitate semplicemente {\bf :wq}. C'\`e anche un'abbreviazione
 conveniente per {\bf :wq}---{\bf ZZ}. Dato che la maggior parte del lavoro
 di programmazione consiste nel far girare un programma, trovare un
 problema, richiamare il programma in un editor, fare dei piccoli
 cambiamenti, e poi uscire dall'editor per far girare di nuovo il
 programma, {\bf ZZ} sar\`a un comando che userete spesso.
 (In realt\`a, {\bf ZZ} non \`e un sinonimo esatto di {\bf :wq} --- se non
 avete fatto nessuna modifica al file dall'ultimo salvataggio, {\bf ZZ}
 uscir\`a senza salvare, mentre {\bf :wq} salver\`a lo stesso.)
 
 Se avete incasinato le cose senza speranza, e volete solo ricominciare da
 capo, potete digitare {\bf :q!} (ricordatevi prima di premere il tasto
 \key{Esc}). Se non mettete il punto esclamativo, vi non vi far\`a uscire
 senza salvare.
 
 \subsection{E poi?}
 
 I dieci comandi che avete appena imparato dovrebbero esservi sufficienti
 per lavorare; comunque, avete solo grattato la superficie dell'editor vi:
 ci sono comandi per copiare e spostare materiale da un posto all'altro in
 un file, per spostare materiale da un file ad un altro, per modificare
 l'editor secondo i vostri gusti personali, eccetera. In tutto esistono
 circa 150 comandi.
 
 \section{Manuale avanzato di vi}
 Il vantaggio e la potenza di {\tt vi} sono nella possibilit\`a di usarlo con
 successo conoscendo solo un piccolo sottoinsieme dei comandi. La maggior
 parte degli utenti di {\tt vi} si sentono un po' strani all'inizio, ma
 dopo poco tempo sentono il bisogno di conoscerlo meglio.
 
 Il manuale che segue assume che l'utente abbia finito il manuale breve
 (qui sopra) e si senta a proprio agio con {\tt vi}; mostrer\`a alcune delle
 caratteristiche pi\`u potenti di {\tt ex}/{\tt vi}, dalla copia del testo
 alle definizioni delle macro; c'\`e una sezione su {\tt ex} e le sue
 impostazioni, che aiuta a personalizzare l'editor. Questo manuale descrive
 i comandi, piuttosto che portarvi a conoscerli insieme per insieme. \`E
 preferibile che spendiate del tempo a provarli su un testo di esempio, che
 possiate distruggere.
 
 Questo manuale non descrive tutti i comandi di {\tt vi} anche se sono
 coperti tutti quelli usati pi\`u comunemente. Anche se scegliete di usarlo
 come editor alternativo, si spera che apprezziate {\tt vi} e quello che 
 offre a chi lo sceglie.
 
 \subsection{Spostarsi nel testo}
 La funzione pi\`u semplice  di un editor \`e di spostare il cursore nel testo.
 Ecco alcuni altri comandi di spostamento:
 \begin{verbatim}
         h          sposta il cursore uno spazio a destra
         j          sposta il cursore una linea in basso
         k          sposta il cursore una linea in alto
         l          sposta il cursore una linea a destra
 
 Alcune implementazioni permettono anche di spostare il cursore con i tasti
 freccia.
 
         w          sposta all'inizio della parola seguente
         e          sposta alla fine della parola seguente
         E          sposta alla fine della parola seguente prima di uno
                    spazio
         b          sposta all'inizio della parola precedente
         0          sposta all'inizio della linea
         ^          sposta alla prima parola della linea corrente
         $          sposta alla fine della linea
         <CR>       sposta all'inizio della linea seguente
         -          sposta all'inizio della linea precedente
         G          sposta alla fine del file
         1G         sposta all'inizio del file
         nG         sposta alla linea numero n
         <Cntl> G   mostra il numero di linea corrente
         %          alla parentesi corrispondente
         H          alla prima linea della schermata
         M          alla linea centrale della schermata
         L          all'ultima linea della schermata
         n|         sposta il cursore alla colonna n
 \end{verbatim}
 
 Lo schermo scorrer\`a automaticamente quando il cursore raggiunge o la cima
 o il fondo della schermata. Ci sono dei comandi alternativi che possono
 controllare lo scorrimento dello schermo:
 
 \begin{verbatim}
         <Cntl> f   scorre una schermata avanti
         <Cntl> b   scorre una schermata indietro
         <Cntl> d   scorre mezza schermata avanti
         <Cntl> u   scorre mezza schermata indietro
 \end{verbatim}
 
 I comandi riportati qui sopra  controllano lo spostamento del
 cursore. Alcuni di questi comandi accettano un modificatore
 nella forma di un numero che precede il comando, che di solito
 ripeter\`a il comando stesso quel numero di volte.
 
 Per spostare il cursore un numero di posizioni a sinistra:
 \begin{verbatim}
         nl         sposta il cursore n posizioni a sinistra
 \end{verbatim}
 
 Se voleste inserire n spazi prima di una parte di testo, potreste
 usare il modificatore di comando per il comando di inserimento:
 digitate  il numero di volte che volete ripetere l'inserimento, poi
 premete \key{Esc}.
 \begin{verbatim}
         ni         inserisce del testo e lo ripete n volte
 \end{verbatim}
 
 I comandi che riguardano le linee usano il modificatore per riferirsi
 al numero di linee: un buon esempio \`e il comando \key{G}.
 
 \begin{verbatim}
         1G        sposta il cursore alla prima linea
 \end{verbatim}
 
 {\tt vi} ha un gran numero di comandi che possono essere usati per
 spostare il cursore all'interno del file, da spostamenti di un
 carattere singolo a spostamenti diretti del cursore su una linea.
 {\tt vi} pu\`o anche posizionare il cursore ad una linea scelta da
 linea di comando.
 \begin{verbatim}
         vi +10 mio.tex
 \end{verbatim}
 Questo comando apre il file 
 {\em mio.tex\/} e posiziona il cursore a 10 linee dall'inizio del file.
 
 Provate alcuni dei comandi di questa sezione. Pochissime persone se
 li ricordano tutti insieme; la maggior parte ne usano
 solo un piccolo sottoinsieme.
 
 Bene. Ora vi potete spostare nel testo: come fate a modificarlo?
 
 \subsection{Modificare il testo}
 
 Lo scopo \`e di cambiare il contenuto del file, e {\tt vi} offre un
 vastissimo insieme di comandi per aiutare a farlo.
 
 Questa sezione focalizzer\`a l'attenzione su come aggiungere testo,
 modificare quello esistente, e cancellarlo. Alla fine di questa 
 sezione avrete le conoscenze necessarie per creare qualsiasi file di
 testo. Le sezioni restanti trattano di comandi pi\`u comodi da
 digitare.
 
 Quando si inserisce del testo, si possono inserire delle linee
 multiple usando il tasto \key{Invio}. Se bisogna correggere un errore
 di battitura e siete sulla linea in questione in modalit\`a
 inserimento, potete usare il tasto \key{backspace} per spostare il
 cursore nel testo. Le diverse versioni di {\tt vi} si comportano in
 maniera diversa; alcune spostano semplicemente il cursore indietro e
 il testo pu\`o essere ancora visualizzato ed accettato, altre
 rimuoveranno il testo a mano a mano che tornate indietro, alcuni
 cloni permettono addirittura di spostare il cursore dalla modalit\`a
 inserimento con i tasti freccia; non \`e il comportamento standard di
 {\tt vi}. Se il testo \`e visibile e usate  il tasto \key{Esc} quando
 siete sulla linea in cui avete cancellato il testo con \key{backspace}, il
 testo dopo il cursore viene cancellato. Usate la vostra versione
 dell'editor per abituarvici. 
 
 \begin{verbatim}
         a           Aggiunge del testo dopo la posizione corrente del cursore
         A           Aggiunge del testo alla fine della linea
         i           Inserisce del testo a sinistra del cursore
         I           Inserisce del testo a sinistra del primo carattere
                     non vuoto della linea corrente
         o           Apre una nuova linea ed inserisce il testo sotto la 
                     linea corrente
         O           Apre una nuova linea ed inserisce il testo sopra la 
                     linea corrente
 \end{verbatim}
 
 {\tt vi} ha un piccolo insieme di comandi di cancellazione che
 possono essere migliorati con l'uso dei modificatori.
 
 \begin{verbatim}
         x           Cancella un carattere da sotto il cursore
         dw          Cancella dalla posizione corrente alla fine della parola
         dd          Cancella la linea corrente
         D           Cancella dalla posizione corrente alla fine della linea
 \end{verbatim}
 
 I modificatori possono essere usati per aggiungere potere ai comandi.
 Gli esempi qui sotto sono solo alcune delle possibilit\`a fornite.
 \begin{verbatim}
         nx          Cancella n caratteri da sotto il cursore
         ndd         Cancella n linee
         dnw         Cancella n parole (equivalente a ndw)
         dG          Cancella dalla posizione corrente alla fine del  file
         d1G         Cancella dalla posizione corrente all'inizio del file
         d$          Cancella dalla posizione corrente alla fine della linea
                     (Lo stesso di D)
         dn$         Cancella dalla linea corrente alla fine dell'n-esima linea
 \end{verbatim}
 
 L'elenco di comandi qui sopra mostra che l'operazione di
 cancellazione \`e molto potente. Questo diventa evidente quando viene
 applicata in combinazione con i comandi di spostamento del cursore.
 Un comando da annotare \`e \key{D}, dato che ignora le direttive dei
 modificatori.
 
 In determinate occasioni potreste voler disfare i cambiamenti fatti.
 I seguenti comandi riportano il testo alla situazione precedente ai
 cambiamenti:
 \begin{verbatim}
         u           Annulla l'ultimo comando
         U           Annulla tutti i cambiamenti fatti sulla linea corrente
         :e!         Riporta allo stato dell'ultimo salvataggio
 \end{verbatim}
 {\tt vi} non vi permette solo di annullare i cambiamenti, ma annulla
 gli annullamenti. Usando il comando \key{5dd} cancellate 5 linee, poi
 riportatele con il comando \key{u}. Le modifiche possono essere
 rieseguite con un altro comando \key{u}. 
 
 {\tt vi} offre dei comandi che permettono di fare delle modifiche al
 testo senza dover prima cancellare e poi ridigitare la nuova versione:
 \begin{verbatim}
         rc          Sostituisce il carattere sotto il cursore con c
                     Sposta il cursore a destra se viene ripetuto con un 
                     modificatore, come in 2rc)
         R           Sovrascrive il testo con il nuovo testo
         cw          Modifica la parola corrente
         c$          Modifica  il testo dalla posizione corrente alla fine 
                     della linea
         cnw         Modifica le prossime n parole (lo stesso di ncw).
         cn$         Modifica fino alla fine dell'n-esima linea
         C           Modifica fino alla fine della linea (lo stesso di c$)
         cc          Modifica la linea corrente
         s           Sostituisce il testo che digitate al posto del carattere 
                     corrente
         ns          Sostituisce il testo che digitate al posto dei seguenti 
                     n caratteri
 \end{verbatim}
 
 Dai comandi di modifica che permettono di dare una stringa di
 caratteri si esce con il tasto \key{Esc}.
 
 Il comando \key{cw} parte dalla posizione corrente nella parola alla
 fine della parola stessa; quando si usa un comando di modifica che
 specifica una distanza verr\`a applicato il cambiamento:
 {\tt vi} metter\`a un {\bf \$} come ultimo carattere. Il nuovo testo
 pu\`o essere pi\`u lungo o pi\`u breve del testo originale.
 
 \subsection{Copiare e spostare delle sezioni di testo}
 
 Spostare del testo coinvolge un buon numero di comandi, che vengono
 combinati per raggiungere il risultato finale. Questa sezione
 introdurr\`a dei buffer con e senza nome insieme ai comandi che
 tagliano ed incollano il testo. 
 
 Copiare del testo implica tre passi principali:
 \begin{enumerate}
 \item {\bf Yanking} (copia) del testo in un buffer.
 \item {\bf Moving} (sposta) del cursore alla posizione destinata 
 \item {\bf Pasting} (incolla) del testo nel buffer di modifica.
 \end{enumerate}
 
 Per copiare del testo nel buffer senzanome usate il comando \key{y}.
 \begin{verbatim}
         yy          Sposta una copia della linea corrente al buffer senzanome.
         Y           Sposta una copia della linea corrente al buffer senzanome.
         nyy         Sposta le n linee successive nel buffer senzanome.
         nY          Sposta le n linee successive nel buffer senzanome.
         yw          Sposta una parola nel buffer senzanome.
         ynw         Sposta n parole nel buffer senzanome.
         nyw         Sposta n parole nel buffer senzanome.
         y$          Sposta la posizione corrente alla fine della linea.
 \end{verbatim}
 
 Il  buffer senzanome \`e un buffer temporaneo che viene corrotto
 facilmente da altri comandi comuni. In determinate occasioni il testo
 pu\`o essere necessario per un lungo periodo di tempo; in questo caso
 viene usato un buffer con nome. {\tt vi} ha 26 buffer con nome, che
 si identificano con le lettere dell'alfabeto. Per distinguere
 tra un comando e il nome di un buffer, {\tt vi} usa il carattere
 \key{"}. Quando si usa un buffer con nome con la lettera minuscola,
 il contenuto viene sostituito, mentre se si usa la lettera maiuscola,
 il contenuto viene aggiunto a quello gi\`a presente nel buffer. 
 \begin{verbatim}
         "ayy        Sposta la linea corrente nel buffer a.
         "aY         Sposta la linea corrente nel buffer a.
         "byw        Sposta la parola corrente nel buffer b.
         "Byw        Aggiungi la parola corrente al contenuto del buffer b.
         "by3w       Sposta le prossime 3 parole nel buffer b.
 \end{verbatim}
 
 Usate il comando \key{p} per incollare il contenuto del buffer
 tagliato nel buffer di modifica.
 \begin{verbatim}
         p           Incolla dal buffer senzanome a DESTRA del cursore
         P           Incolla dal buffer senzanome a SINISTRA del cursore
         nP          Incolla n copie del buffer senzanome a SINISTRA del cursore
         "ap         Incolla dal buffer a a DESTRA del cursore
         "b3P        Incolla 3 copie del buffer b a SINISTRA del cursore
 \end{verbatim}
 
 Quando state usando {\tt vi} dall'interno di un xterm, avete una o
 pi\`u opzioni per copiare del testo. Selezionate la sezione di testo
 che volete copiare trascinando con il mouse sopra il testo. Tenere
 premuto il pulsante sinistro del mouse e trascinare dall'inizio alla
 fine del testo invertir\`a il colore del testo stesso; questo piazza
 automaticamente il testo in un buffer riservato dal server X. Per
 incollare il testo premete il pulsante centrale del mouse.
 Ricordatevi di mettere {\tt vi} in modalit\`a inserimento, dato che
 l'input potrebbe essere interpretato come comandi e il risultato \`e
 ignoto. Usando la stessa tecnica potete copiare una parola singola
 cliccando due volte sulla parola con il pulsante sinistro del mouse.
 Solo la parola verr\`a copiata. Per incollare la procedura \`e la stessa
 di prima. Il contenuto del buffer cambier\`a solamente quando viene
 evidenziata una nuova area.
 
 Per spostare del testo bisogna fare tre passi:
 \begin{enumerate}
 \item {\bf Cancellare} il testo spostandolo in un buffer con o senza
 nome.
 \item {\bf Spostare} il cursore al punto in cui si vuole spostare il
 testo.
 \item {\bf Incollare} il buffer.
 \end{enumerate}
 
 Il processo \`e lo stesso che per copiare, con il cambiamento nel primo
 passo, in cui si deve cancellare il testo. Quando si usa il comando
 \key{dd} la linea viene cancellata e messa all'interno del buffer
 senzanome. Potete incollarne il contenuto come quando avete copiato
 il testo nella posizione desiderata.
 
 \begin{verbatim}
          "add       Cancella la linea e la mette nel buffer a.
          "a4dd      Cancella 4 linee e le mette nel buffer a.
          dw         Cancella una parola e la mette nel buffer senzanome.
 \end{verbatim}
 Vedere la sezione sulla modifica del testo per altri esempi su come
 cancellare del testo.
 
 Quando il sistema crasha il contenuto dei buffer con e senza nome
 viene perso, ma il contenuto del buffer di modifica pu\`o essere
 recuperato (vedere "Comandi utili").
 
 \subsection{Cercare e sostituire del testo}
 
 {\tt vi} ha molti comandi di ricerca; potete cercare dei singoli
 caratteri, e anche espressioni regolari.
 
 I due comandi principali di ricerca di caratteri sono \key{f} e
 \key{t}.
 \begin{verbatim}
          fc         Trova il carattere c successivo. Si sposta a DESTRA 
                     verso il prossimo.
          Fc         Trova il carattere c successivo. Si sposta a SINISTRA 
                     verso il precedente.
          tc         Si sposta a DESTRA al carattere prima del prossimo c.
          Tc         Si sposta a SINISTRA al carattere seguente il c precedente.
                     (In alcuni cloni e' lo stesso di Fc)
          ;          Ripete gli ultimi comandi f,F,t,T
          ,          Lo stesso di ; ma inverte la direzione del comando 
                     originale.
 \end{verbatim}
 
 Se non trovate il carattere che stavate cercando, {\tt vi} suoner\`a
 o vi dar\`a un qualche altro segnale.
 
 {\tt vi} vi permette di cercare una stringa nel buffer di modifica:
 \begin{verbatim}
          /str       Cerca a destra ed in basso il successivo evento di str.
          ?str       Cerca a sinistra ed in alto il successivo evento di str.
          n          Ripete l'ultimo comando / o ?
          N          Ripete l'ultimo comando / o ? in direzione inversa
 \end{verbatim}
 
 Quando si usano i comandi \key{/} o \key{?} viene liberata una linea in
 fondo allo schermo, dove si inserisce la stringa di ricerca seguita da
 \key{Invio}. 
 
 La stringa nel comando \key{/} o \key{?} pu\`o essere un'espressione regolare,
 cio\`e una descrizione di un insieme di caratteri, che
 viene costruita usando del testo intermezzato con dei caratteri speciali: 
 {\bf . * [] \ \^ \$}.
 
 \begin{verbatim}
          .          Fa corrispondere un qualsiasi singolo carattere tranne
                     la newline.
          \          Considera i caratteri speciali come normali.
          *          Fa corrispondere 0 o piu' eventi del carattere precedente.
          []         Fa corrispondere esattamente uno dei caratteri tra
                     parentesi.
          ^          La corrispondenza del carattere seguente deve essere
                     all'inizio della linea.
          $          Fa corrispondere i caratteri precedenti alla fine della
                     linea.
          [^]        Fa corrispondere tutti i caratteri non inclusi dopo il
                     carattere di negazione.
          [-]        Fa corrispondere un insieme di caratteri.        
 \end{verbatim}
 
 	L'unico modo per capire bene le espressioni regolari \`e usarle. Qui
 sotto ci sono una serie di esempi:
 
 \begin{verbatim}
          c.pe       Fa corrispondere cope, cape, caper ecc
          c\.pe      Fa corrispondere c.pe, c.per ecc
          sto*p      Fa corrispondere stp, stop, stoop ecc
          car.*n     Fa corrispondere carton, cartoon, carmen ecc
          xyz.*      Fa corrispondere xyz alla fine della linea
          ^The       Fa corrispondere qualsiasi linea che cominci con The
          atime$     Fa corrispondere qualsiasi linea che finisca con atime
          ^Only$     Fa corrispondere qualsiasi linea che contenga solo la
                     parola Only
          b[aou]rn   Fa corrispondere barn, born, burn.
          Ver[D-F]   Fa corrispondere VerD, VerE, VerF.
          Ver[^1-9]  Fa corrispondere Ver seguito da un carattere che non
                     sia un numero
         the[ir][re] Fa corrispondere their,therr, there, theie.
   [A-Za-z][A-Za-z]* Fa corrispondere qualsiasi parola.
 \end{verbatim}
 
         {\tt vi} usa la modalit\`a comandi di {\tt ex} per fare le
 operazioni di ricerca e di sostituzione. Tutti i comandi che cominciano
 con un due punti sono richieste in modalit\`a {\tt ex}.
 
 I comandi di ricerca e sostituzione permettono di usare le espressioni
 regolari su un intervallo di linee e sostituire la stringa corrispondente.
 L'utente pu\`o chiedere conferma prima di attuare la sostituzione. Vale la
 pena di riguardare come {\tt ed} rappresenta i numeri di linea. 
 \begin{verbatim}
          :<inizio>,<fine>s/<trova>/<sostituisci>/g   Comando generale
 
          :1,$s/the/The/g      Cerca nell'intero file e sostituisci the con
                               The.
          :%s/the/The/g        % sta per l'intero file (come sopra)
          :.,5s/^.*//g         Cancella il contenuto dalla linea corrente
                               alla linea 5.
          :%s/the/The/gc       Sostituisci the con The ma chiedi conferma
                               prima di fare la sostituizione.
          :%s/^....//g         Cancella i primi quattro caratteri di
                               ciascuna linea.
 \end{verbatim}
 
 Il comando di ricerca \`e molto potente se usato in combinazione con le
 stringhe di ricerca con le espressioni regolari. Se non si mette la
 direttiva \key{g} il cambiamento viene fatto solo sulla prima corrispondenza
 di ciascuna linea.
 
 Talvolta potreste voler usare la stringa di ricerca originale nel
 risultato delle sostituzioni. Si pu\`o digitare di nuovo il comando sulla
 linea, ma {\tt vi} permette di inserire nella stringa di sostituzione
 alcuni caratteri speciali:
 \begin{verbatim}
          :1,5s/help/&ing/g    sostituisce help con helping nelle prime 5
                               linee
          :%s/ */&&/g          Raddoppia il numero degli spazi tra le
                               parole.
 \end{verbatim}
 
 Usare le stringhe di corrispondenza complete ha i suoi limiti, quindi {\tt
 vi} usa le parentesi di escape \key{\\(} e \key{\\)} per scegliere
 l'intervallo di sostituzione. La sostituzione pu\`o essere costruita usando
 il tasto con l'escape \key{\\1}, che identifica l'intervallo nell'ordine
 della definizione.
 \begin{verbatim}
          :s/^\(.*\):.*/\1/g          Cancella tutto cio' che e' prima dei due
                                      punti, compresi i due punti stessi.
          :s/\(.*\):\(.*\)/\2:\1/g    Inverte le parole ai due lati dei due
                                      punti.
 \end{verbatim}
 
 Molto probabilmente rileggerete queste ultime perle. {\tt vi} offre dei
 comandi molto potenti, che moltissimi editor moderni non hanno; il prezzo
 da pagare \`e anche l'argomento pi\`u usato contro {\tt vi}: i comandi possono
 essere difficili da imparare e da leggere. Anche se la maggior parte delle
 cose possono apparire un po' strane all'inizio, con un po' di esercizio
 alla volta l'insieme di comandi di {\tt vi} diventer\`a per voi una seconda
 lingua.
 
 \ettindex{vi}
 % Local Variables: 
 % mode: latex
 % TeX-master: "guide"
 % End: 
