#LyX 1.4.3-5 created this file. For more info see http://www.lyx.org/ \lyxformat 245 \begin_document \begin_header \textclass paper \begin_preamble %% LyX 1.4.3-5 created this file. For more info, see http://www.lyx.org/. %% Do not edit unless you really know what you are doing. \usepackage{geometry} \geometry{verbose,letterpaper,lmargin=3cm,rmargin=3cm} \makeatletter \makeatother \end_preamble \language english \inputencoding latin1 \fontscheme default \graphics default \paperfontsize default \spacing single \papersize default \use_geometry false \use_amsmath 0 \cite_engine basic \use_bibtopic false \paperorientation portrait \secnumdepth -1 \tocdepth 5 \paragraph_separation indent \defskip medskip \quotes_language english \papercolumns 1 \papersides 1 \paperpagestyle default \tracking_changes false \output_changes false \end_header \begin_body \begin_layout Title \size giant Vi(m) per principianti \end_layout \begin_layout SubTitle semplici indicazioni per utilizzare un \begin_inset Quotes erd \end_inset semplice \begin_inset Quotes erd \end_inset editor \end_layout \begin_layout Author by Kijio \end_layout \begin_layout Quote \begin_inset Quotes erd \end_inset Articolo 19 \end_layout \begin_layout Quote Ogni individuo ha il diritto alla libertà di opinione e di espressione, incluso il diritto di non essere molestato per la propria opinione e quello di cercare, ricevere e diffondere informazioni e idee attraverso ogni mezzo e senza riguardo a frontiere. \begin_inset Quotes erd \end_inset \end_layout \begin_layout Quote Dichiarazione Universale dei Diritti dell'Uomo \end_layout \begin_layout Standard \newpage \begin_inset LatexCommand \tableofcontents{} \end_inset \end_layout \begin_layout Standard \newpage \end_layout \begin_layout Part* Prefazione \end_layout \begin_layout Section L'Autore \end_layout \begin_layout Standard Kijio è il soprannome di un appassionato di computer che, verificato da anni le enormi funzionalità di Linux, ha trovato in Vim il miglior editor per modificare qualsiasi file in situazioni critiche. \end_layout \begin_layout Section Contributi \end_layout \begin_layout Standard Hyol e' un programmatore che ha scoperto Vim da poco tempo, ma ne e' rimasto affascinato. Ha scritto i capitoli dal Wrap al Code Folding che trattano l'uso di Vim per la programmazione. \end_layout \begin_layout Section Cambiamenti e Ringraziamenti \end_layout \begin_layout Standard Questa nuova versione del Marzo 2007 e' variata dalla precedente per i seguenti motivi: \end_layout \begin_layout Enumerate correzioni grammaticali ed errori di battitura, ringrazio `wee; \end_layout \begin_layout Enumerate inserimento di nuove spiegazioni (Buffer: caricare e modificare piu' file) grazie ai consigli dati a `wee` (weeworld.altervista.org) da un anonimo (che ringrazio); \end_layout \begin_layout Enumerate ora il file è disponibile in formato pdf. \end_layout \begin_layout Standard Si ringrazia inoltre tutti coloro che hanno contribuito alla correzione ed alla pubblicazione delle vecchie versioni, in particolare Mike Vargas di www.volalibero.it. \end_layout \begin_layout Section Distribuzione e copia. \end_layout \begin_layout Standard Questo documento è rilasciato sotto licenza FDL allegata a questa guida come file txt, si rimanda quindi a tale licenza le modalità di distribuzione e/o copia. \end_layout \begin_layout Section Premessa \end_layout \begin_layout Standard \noindent Vi (si pronuncia Vi-ai) e Vim (ossia Vi migliorato) e' lo strumento di modifica file piu' semplice ed efficace che l'operatore di Linux ha, a parer mio, a disposizione. \end_layout \begin_layout Standard \noindent Infatti in pochi Kb sono concentrati un numero di possibilita' di modifica testo, e non solo, che permette di eseguire procedure complesse che per elencarle tutte non bastano le oltre centinaia di pagine dei manuali che potreste trovare in libreria. \end_layout \begin_layout Standard \noindent Purtroppo c'e' un prezzo da pagare, e non parlo del manuale, ma della procedura di apprendimento. Infatti l'apparente, e ripeto apparente, difficolta' di utilizzo e' superabile con una minima conoscenza, ma soprattutto con la necessaria consapevolezza che in Vi(m) ci sono due concetti: i \begin_inset Quotes erd \end_inset mode \begin_inset Quotes erd \end_inset (che possiamo intenderli ambienti di lavoro) e la linea di comando. \end_layout \begin_layout Standard \noindent Vi(m) non permette la modifica dei file 'al volo' e per i principianti potrebbe essere una grossa delusione, cosa che scompare come si impara a immettere nella giusta sequenza comandi e procedure. Alcuni autori sostengono che con vi/vim si migliora la capacita' di scrittura e l'efficienza di scrivere testi. Indipendentemente da cio' sappiate che se avete da modificare un file di configurazione di una linux box senza veste grafica, o in caso di emergenza, con Vi(m) avrete pochi fronzoli e molta sostanza!. \end_layout \begin_layout Standard \noindent Le conoscenze per imparare con questa guida sono medio-basse. Credo che con questa guida, la guida interna a vim e con i link di riferimento chiunque puo' imparare nel giro di pochi giorni. \end_layout \begin_layout Standard \noindent Faccio notare che io uso Vim con Linux e che ancora non ho sperimentato l'ultima versione (la 7). Quindi, mentre non sono a conoscenza di eventuali variazioni nei sistemi operativi proprietari, sicuramente non troverete le ultime implementazioni della versione 7. \end_layout \begin_layout Standard \noindent Ovviamente Vim mantiene la retrocompatibilita', quindi, che io sappia, i vecchi comandi sono tutti funzionali ad oggi. \end_layout \begin_layout Standard \noindent Rimango a disposizione per consigli e suggerimenti. Se poi qualcuno vuol cimentarsi nello scrivere nuovi capitoli e' il benvenuto, e diventerà a pieno titolo co-redattore. \end_layout \begin_layout Section Simboli utilizzati \end_layout \begin_layout Standard I comandi da usare sono messi sempre con dicitura a capo, e dove non premesso, qualora fosse necessario la pressione del tasto Invio, sara' indicata con . \newpage \end_layout \begin_layout Part* Vim per editare \end_layout \begin_layout Section Lanciare Vi(m) \end_layout \begin_layout Standard \noindent per caricare vim basta lanciare il comando da shell : \end_layout \begin_layout LyX-Code \noindent Vi \end_layout \begin_layout Standard \noindent Verra' visualizzata la seguente finestra, almeno se usate la versione uguale alla mia! \end_layout \begin_layout Standard \noindent \begin_inset Box Doublebox position "c" hor_pos "c" has_inner_box 1 inner_pos "c" use_parbox 0 width "60line%" special "none" height "1in" height_special "totalheight" status open \begin_layout Standard ~ \end_layout \begin_layout Standard ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ VIM - Vi IMproved (VI Migliorato) \end_layout \begin_layout Standard ~ \end_layout \begin_layout Standard ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ versione 6.4.6 \end_layout \begin_layout Standard ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ di Bram Moolenaar et al. \end_layout \begin_layout Standard ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ Vim è 'open source' e può essere distribuito liberamente \end_layout \begin_layout Standard ~ \end_layout \begin_layout Standard ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ Diventa un utente Vim registrato! \end_layout \begin_layout Standard ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ batti :help register per informazioni \end_layout \begin_layout Standard ~ \end_layout \begin_layout Standard ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ batti :q per uscire \end_layout \begin_layout Standard ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ batti :help o per aiuto online \end_layout \begin_layout Standard ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ batti :help version6 per informazioni su versione \end_layout \begin_layout Standard ~ \end_layout \begin_layout Standard ~ \end_layout \begin_layout Standard Batti :quit per uscire da Vim\InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ 0,0-1 \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ \InsetSpace ~ Tut \end_layout \end_inset \end_layout \begin_layout Standard \noindent Tutto cio' che viene visualizzato non e' realmente presente nel vostro nuovo file, che tra l'altro non lo avete neanche denominato o salvato. E' possibile lanciare direttamente la modifica di un file semplicemente da linea di comando: \end_layout \begin_layout LyX-Code \noindent vi nome_del_file_che_voglio_editare \end_layout \begin_layout Standard \noindent In questo caso si vedrebbe direttamente il contenuto del file. \end_layout \begin_layout Section Le zone e i modi \end_layout \begin_layout Standard \noindent Come visibile dalla figura sopra e' possibile individuare due zone, la prima delimitata dai segni ~ (tilde) che individuano dove e' possibile editare il testo. La seconda zona, delimitata nell'ultima riga in fondo, con l'indicazione 0,0-1 Tut, rappresenta lo spazio per l'immissione dei comandi. Quest'ultima visualizza il mode corrente, la numerazione riferita alla posizione del cursore (numero colonna, numero carattere riga) e la possibilita' di eseguire comandi. \end_layout \begin_layout Standard \noindent Nel momento in cui lanciate l'editor semplicemente con il comando vi , esso e' in command mode, ossia in attesa di un vostro comando, dato con la pressione di una determinata lettera, per permettere l'operazione desiderata, ad esempio l'inserimento di un testo. \end_layout \begin_layout Standard \noindent I \begin_inset Quotes erd \end_inset mode \begin_inset Quotes erd \end_inset sono: \end_layout \begin_layout Itemize inserimento -> attivabile con il tasto i (e non solo ...) \end_layout \begin_layout Itemize \noindent sostituzione -> attivabile con il tasto backspace (e non solo ...) \end_layout \begin_layout Itemize \noindent visualizza -> attivabile con il tasto v \emph on \end_layout \begin_layout Standard \noindent Il command mode viene richiamato tutte le volte che premete Esc. E' l'ambiente di lavoro "in attesa", non individuato da nessuna segnalazione nella linea (o spazio che dir si voglia) di comando. \end_layout \begin_layout Standard \noindent Proprio questa ultima riga, quella di immissione dei comandi, viene attivata, partendo sempre dal command mode, con la pressione del tasto : (due punti), in tale modo e' possibile immettere i comandi opportuni. \end_layout \begin_layout Standard \noindent Oltre ai due punti possiamo usare anche altri tasti per l'attivazione della riga di comando come / e ?, ma questo lo vediamo piu' avanti! (altrimenti diventate piu' bravi di me subito !). Prendete queste nozioni cosi' come sono, visto che con le istruzioni che seguono vi chiariranno (spero ...) il tutto. \end_layout \begin_layout Section Spostarsi \end_layout \begin_layout Standard \noindent Per spostarsi in vim basta usare, in command mode, le frecce, nel caso del buon vecchio vi dovrete usare i tasti h j k l. Ecco lo schema: \end_layout \begin_layout Quotation \noindent \emph on \InsetSpace ~ k \end_layout \begin_layout Quotation \noindent \emph on h l \end_layout \begin_layout Quotation \noindent \emph on \InsetSpace ~ j \end_layout \begin_layout Itemize \emph on k \emph default corrisponde ad un movimento in alto \end_layout \begin_layout Itemize \noindent \emph on h \emph default sinistra \end_layout \begin_layout Itemize \noindent \emph on l \emph default destra \end_layout \begin_layout Itemize \noindent \emph on j \emph default basso \end_layout \begin_layout Standard \noindent Il tutto e' stato fatto per facilitare il movimento senza staccare le mani dalla tastiera principale. In origine era necessaria per forza maggiore: non c'era il tastierino delle frecce! \end_layout \begin_layout Section Editare \end_layout \begin_layout Standard \noindent Per iniziare a scrivere dovete immettervi nel mode inserimento, semplicemente premendo il tasto i e magicamente vedrete scomparire tutte le scritte e potrete iniziare a digitare quello che desiderate, con tanto di ritorno a capo con il tasto ovviamente per cancellare nel caso di Vim potete utilizzare il tasto backspace (quello sopra il tasto Invio), oppure sovrascrive ndo il testo premendo il tasto Ins. \end_layout \begin_layout Standard \noindent Noterete che nell'ultima riga in basso, a sinistra, viene visualizzato -- INSERISCI -- oppure -- SOSTITUISCI -- alternativamente ogni volta che premete il tasto i oppure Ins. \end_layout \begin_layout Standard \noindent Esistono delle scorciatoie per effettuare modifiche immediate al testo a secondo della posizione da cui vogliamo incominciare, l'importate da sapere e' che si parte sempre dal command mode. Ecco un breve elenco delle funzioni principali e normalmente piu' usate : \end_layout \begin_layout Standard \end_layout \begin_layout Standard \begin_inset Tabular \begin_inset Text \begin_layout Standard \family roman \series medium \shape up \size normal \emph off \bar no \noun off \color none Tasto da premere (in command mode) \end_layout \end_inset \begin_inset Text \begin_layout Standard \family roman \series medium \shape up \size normal \emph off \bar no \noun off \color none Azione effettuata \end_layout \end_inset \begin_inset Text \begin_layout Standard dd \end_layout \end_inset \begin_inset Text \begin_layout Standard cancella (taglia) l'intera riga dove e' posizionato il cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard D (shift+d) \end_layout \end_inset \begin_inset Text \begin_layout Standard cancella dal punto del cursore in poi la riga. \end_layout \end_inset \begin_inset Text \begin_layout Standard Y \end_layout \end_inset \begin_inset Text \begin_layout Standard copia l'intera riga dove e' presente il cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard y \end_layout \end_inset \begin_inset Text \begin_layout Standard copia il testo selezionato (solo in visual mode)* \end_layout \end_inset \begin_inset Text \begin_layout Standard p \end_layout \end_inset \begin_inset Text \begin_layout Standard \family roman \series medium \shape up \size normal \emph off \bar no \noun off \color none incolla dopo il cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard P \end_layout \end_inset \begin_inset Text \begin_layout Standard incolla prima del cursore \end_layout \end_inset \end_inset \end_layout \begin_layout Section Annullare i comandi \end_layout \begin_layout Standard \noindent La cosa piu' difficile su vi e' annullare l'ultimo comando, infatti bisogna: \end_layout \begin_layout Enumerate entrate in command mode premendo Esc \emph on \end_layout \begin_layout Enumerate \noindent premete il tasto u \end_layout \begin_layout Standard \noindent difficile eh? \end_layout \begin_layout Standard \noindent In questo modo verra' annullata l'ultima operazione effettuata. \end_layout \begin_layout Section Cancella taglia incolla \end_layout \begin_layout Standard \noindent Vi(m) usa un simpatico modo di cancellare, infatti tutto quello che viene tolto con i comandi di cancellazione vengono immessi nel buffer della memoria, quindi per Vi(m) cancellare = tagliare. Ovviamente questi anglofoni usano delete ... e quindi il comando e' dd o D. \end_layout \begin_layout Standard \noindent Per copiare invece viene utilizzato il termine 'strappo', be' io lo chiamo cosi' ! ossia Yank e, abbreviato, Y oppure y. \end_layout \begin_layout Standard \noindent Tanto per rendermi noioso e prolisso ripeto per l'ennesima volta che i comandi che seguono si danno sempre in command mode. Nel caso si volesse incollare basta utilizzare il comando paste, ossia p o P vediamo in dettaglio come utilizzare questi tasti e le loro pecularieta': \end_layout \begin_layout Standard \noindent Per selezionare solo una parte di testo per poi cancellare o copiare bisogna entrare in Visual mode, ossia da command mode premete il tasto v e vedrete che il testo, a mano a mano che vi muovete, sara' evidenziato, a questo punto potete usare i comandi della tabella soprariportati per editare. \end_layout \begin_layout Section Ricercare le stringhe ed eventualmente sostituirle \end_layout \begin_layout Standard \noindent E' una cosa semplicissima trovare le stringhe in Vi(m). \end_layout \begin_layout Standard \noindent In command mode entriamo nella riga comando premendo il tasto /, quello del diviso del tastierino numerico, ed immettiamo la stringa che volgiamo trovare, dal punto in cui siamo col cursore, in basso: \end_layout \begin_layout LyX-Code \noindent /quello_che_cerco_spero_che_sia_da_qui_in_giu' \end_layout \begin_layout Standard \noindent con Vim vedrete pure le parole trovate evidenziate colorate!;) \end_layout \begin_layout Standard \noindent Per passare da una parola all'altra trovata lungo tutto il testo basta premere in command mode la lettera n (senza ). \end_layout \begin_layout Standard \noindent Se invece la ricerca e' a ritroso usate il carattere ? al posto di / nella stessa identica maniera. \end_layout \begin_layout Standard \noindent In caso negativo Vi(m) sara' cosi' solerte da comunicarvi che quell'espressione non e' stata trovata. \end_layout \begin_layout Standard \noindent Attenzione pero', vale sempre la regole del case-sensitive, ossia Vi(m) nella ricerca controlla anche il tipo di carattere utilizzato se maiuscolo o minuscolo, quindi se non trova quello che cercate magari e' scritto con caratteri maiuscoli/minuscoli differenti. \end_layout \begin_layout Standard \noindent Per sostituire i testi trovati basta utilizzare, sempre con la linea di comando, la lettera s (sostituisci ... ;) ) ed il solito / in questo modo: \end_layout \begin_layout LyX-Code \noindent :s /vecchia_parola/nuova_parola \end_layout \begin_layout Standard \noindent in questo modo sostiuite la prima occorrenza che il programma trova. \end_layout \begin_layout Standard \noindent Nel caso in cui si voglia sostiuire tutte le occorrenze basta aggiungere /g: \end_layout \begin_layout LyX-Code \noindent :s /vecchia_parola/nuova_parola/g \end_layout \begin_layout Section Ripetere i comandi \end_layout \begin_layout Standard \noindent In Vi(m) e' possibile ripetere determinate operazioni: a partire dalla posizione corrente del cursore basta essere in command mode, digitare il numero di volte che vogliamo che venga effettuata l'operazione, seguita dal comando desiderato. Ad esempio se volete cancellare 2 righe : \end_layout \begin_layout LyX-Code \noindent 2 dd \end_layout \begin_layout Standard \noindent quindi schematicamente: \end_layout \begin_layout Quotation \noindent \emph on [numero di volte che il comando deve funzionare] [il_comando_desiderato] \end_layout \begin_layout Section Salvare ed uscire \end_layout \begin_layout Standard \noindent Per lanciare il salvataggio oppure per uscire e' necessario utilizzare la riga di comando. I comandi sono write (w abbreviato), e save (s abbreviato), oppure x (che fa tutte e due in contemporanea). \end_layout \begin_layout Standard \noindent Come sopradetto bisogna usare il carattere : (due punti) per poi specificare il comando che vogliamo impartire. Ad esempio per uscire e salvare: \end_layout \begin_layout LyX-Code :x \end_layout \begin_layout Standard \noindent L'uso del punto esclamativo ! dopo un comando nella linea di comando significa forzatura ( ad esempio q! esce senza salvare ). \end_layout \begin_layout Standard \begin_inset Tabular \begin_inset Text \begin_layout Standard Comando \end_layout \end_inset \begin_inset Text \begin_layout Standard Azione effettuatua \end_layout \end_inset \begin_inset Text \begin_layout Standard \family roman \series medium \shape up \size normal \emph off \bar no \noun off \color none :w nuovo_nome \end_layout \end_inset \begin_inset Text \begin_layout Standard \family roman \series medium \shape up \size normal \emph off \bar no \noun off \color none salva il file con nuovo_nome \end_layout \end_inset \begin_inset Text \begin_layout Standard :q \end_layout \end_inset \begin_inset Text \begin_layout Standard esce dal file senza salvare, purche' non si siano fatte delle modifiche \end_layout \end_inset \begin_inset Text \begin_layout Standard :q! \end_layout \end_inset \begin_inset Text \begin_layout Standard \family roman \series medium \shape up \size normal \emph off \bar no \noun off \color none esce dal file anche se si sono fatte delle modifiche, in questo modo quello che sara' presente e' il file senza modifiche \end_layout \end_inset \begin_inset Text \begin_layout Standard :wq \end_layout \end_inset \begin_inset Text \begin_layout Standard \family roman \series medium \shape up \size normal \emph off \bar no \noun off \color none prima salva il file presente con lo stesso nome e poi esce da Vi(m) \end_layout \end_inset \begin_inset Text \begin_layout Standard :x \end_layout \end_inset \begin_inset Text \begin_layout Standard come sopra (salva ed esce) \end_layout \end_inset \end_inset \end_layout \begin_layout Section Creiamo i nostri file \end_layout \begin_layout Standard \noindent Per creare il necessario facciamo in modo che tutto risulti intuibile, quindi, su una shell creiamo una directory tutorial: \end_layout \begin_layout LyX-Code \noindent mkdir tutorial \end_layout \begin_layout LyX-Code \noindent ci spostiamo su essa \end_layout \begin_layout LyX-Code \noindent cd tutorial \end_layout \begin_layout Standard \noindent Creiamo un paio di file con nomi facili e contenuto altrettanto intuitivo: \end_layout \begin_layout LyX-Code \noindent echo "io adoro la cioccolata" > cioccolata \end_layout \begin_layout LyX-Code \noindent echo "tutto e' buono con la panna" > panna \end_layout \begin_layout Standard \noindent In questo modo abbiano 2 file, dal nome dolce ;) , pero', non contenti, vogliamo creare un file chiamato goloso contenente parti di tutti e due. \end_layout \begin_layout Section Partiamo con l'editing multiplo \end_layout \begin_layout Standard \noindent Potremmo usare merge o altri tipi di comandi bash per poi modificare il tutto con vi ed i suoi strumenti di modifica, ma senza dubbio la cosa migliore sarebbe crearne uno confrontando i due, ed usare il copia/incolla trasportando i dati da una parte all'altra. \end_layout \begin_layout Standard \noindent Facciamo un esempio concreto: \end_layout \begin_layout Enumerate caricare Vi(m) con uno dei file \end_layout \begin_layout Enumerate \noindent da dentro Vi(m) lanciare l'editing dell'altro \end_layout \begin_layout Enumerate \noindent effettuare i copia/incolla delle parti che ci interessano tra l'uno e l'altro file \end_layout \begin_layout Enumerate \noindent salvare i risultati con un file nuovo, magari chiamandolo \begin_inset Quotes erd \end_inset goloso \begin_inset Quotes erd \end_inset ;) \end_layout \begin_layout Standard \noindent Lanciamo quindi vi con panna: \end_layout \begin_layout LyX-Code \noindent vi panna \end_layout \begin_layout Standard \noindent in modalita' command mode invochiamo il comando di editing con la lettera e sulla linea di comando, seguita dal nome del file da modificare: \end_layout \begin_layout LyX-Code \noindent :e cioccolata \end_layout \begin_layout Standard \noindent A questo punto sara' visibile il file cioccolata, per ritornare al file panna basta, sempre in command mode, digitare sulla linea di comando la lettera e \end_layout \begin_layout Standard \noindent seguita dal simbolo del cancelletto: \end_layout \begin_layout LyX-Code \noindent :e# \end_layout \begin_layout Standard \noindent quindi per passare da un file all'altro basta usare e# nella linea di comando. \end_layout \begin_layout Standard \noindent Ovviamente ora il gioco e' facile! copiamo la prima, ed unica riga, premendo il tasto Y (y maiuscolo, insomma shift+y): \end_layout \begin_layout LyX-Code \noindent Y \end_layout \begin_layout Standard \noindent Passiamo al file cioccolata con: \end_layout \begin_layout LyX-Code \noindent :e# \end_layout \begin_layout Standard \noindent e premiamo il comando per incollare, ossia il tasto P (shift+p): \end_layout \begin_layout LyX-Code \noindent P \end_layout \begin_layout Standard \noindent vedrete che automaticamente sara' aggiunta una riga corrispondente alla prima del file panna. \end_layout \begin_layout Standard \noindent A questo punto basta modificare in modalita' inserimento (ricordate? si preme il tasto i) il testo, ad esempio come segue: \end_layout \begin_layout LyX-Code \noindent io adoro la cioccolata con la panna \end_layout \begin_layout Standard \noindent Poi andare in modalita' comando (o command mode che dir si voglia) e salvare con un nuovo nome: \end_layout \begin_layout LyX-Code \noindent :w goloso \end_layout \begin_layout Standard \noindent ed avremo il nostro file derivante dalla modifica dei due precedenti file. \end_layout \begin_layout Section Accorgimenti vari \end_layout \begin_layout Standard \noindent Il bello di Vi(m) e' quello che, oltre alla modifica, permette anche il ritorno al primo file modificato, infatti, senza uscire da 'goloso', sempre in command line possiamo richiamare panna con: \end_layout \begin_layout LyX-Code \noindent :rew \end_layout \begin_layout Standard \noindent e quindi avremo ora a disposizione di modifica \begin_inset Quotes erd \end_inset panna \begin_inset Quotes erd \end_inset e \begin_inset Quotes erd \end_inset goloso \begin_inset Quotes erd \end_inset . \end_layout \begin_layout Standard \noindent Altro comando utile e' : \end_layout \begin_layout LyX-Code \noindent :args \end_layout \begin_layout Standard \noindent per far vedere l'altro file a disposizione dell'editing. \end_layout \begin_layout Standard \noindent Interessante e' l'utilizzo del comando e, infatti abbiamo: \end_layout \begin_layout LyX-Code \noindent :#e+ n file_che_vogliamo_aprire \end_layout \begin_layout Standard \noindent dove n e' il numero di riga da cui possiamo far partire il multi-editing del file_che_vogliamo_aprire, oppure: \end_layout \begin_layout LyX-Code \noindent :#e+ file_che_vogliamo_aprire \end_layout \begin_layout Standard \noindent in questo modo si parte semplicemente dall'ultima riga del file_che_vogliamo_apr ire. \end_layout \begin_layout Standard \noindent Nel caso di errori, al di la' del comando di undelete per i singoli file possiamo anche usare il comando: \end_layout \begin_layout LyX-Code \noindent :e! \end_layout \begin_layout Standard \noindent che fara' tornare tutto all'ultima modifica salvata del file a video. \end_layout \begin_layout Standard \noindent Esiste anche il comando: \end_layout \begin_layout LyX-Code \noindent :n \end_layout \begin_layout Standard \noindent che fa partire la modifica del "prossimo" file, ma che personalmente non ho mai trovato la necessita' di utilizzarlo. \end_layout \begin_layout Section Le impostazioni \end_layout \begin_layout Standard \noindent Vi(m) permette di impostare alcuni parametri/opzioni che poi possono essere definiti come default. \end_layout \begin_layout Standard \noindent Se volete vedere le varie opzioni basta entrare nella linea di comando e digitare il comando :set all, ossia: \end_layout \begin_layout LyX-Code \noindent : set all \end_layout \begin_layout Standard \noindent sarete sommersi da un nugolo di opzioni. Alcune necessitano di valori numerici, altre invece hanno la possibilita' di essere esplicitamente azionate o negate con comandi univoci. \end_layout \begin_layout Standard \noindent Per il dettaglio potete leggervi l'help, oppure vedere che parametri ha attualmente una certa opzione con: \end_layout \begin_layout LyX-Code \noindent :set opzione? \end_layout \begin_layout Standard \noindent Di seguito indichero' i 4 piu' usati (da me). \newline \end_layout \begin_layout Standard \noindent \emph on > Vedere il numero di righe: \end_layout \begin_layout Standard \noindent per i programmatori e per i pigroni e' sempre utile, quindi, dato che il parametro e' number (il contrario e' nonumber),bastera' immettere: \end_layout \begin_layout LyX-Code \noindent : set number \end_layout \begin_layout Standard \noindent per levare la visualizzazione: \end_layout \begin_layout LyX-Code \noindent :set nonumber \end_layout \begin_layout Standard \noindent \emph on > Eliminare il commento sonoro agli errori: \end_layout \begin_layout LyX-Code \noindent :set noerrorbeels \end_layout \begin_layout Standard \noindent per riattivare: \end_layout \begin_layout LyX-Code \noindent :set errorbeels \end_layout \begin_layout Standard \noindent \emph on > Impostare una lunghezza massima di riga : \end_layout \begin_layout LyX-Code \noindent :set textwidth x \end_layout \begin_layout Standard \noindent ossia dopo x (numero) caratteri il testo andra' a capo automaticamente, ad esempio: \end_layout \begin_layout LyX-Code \noindent :set textwidth 50 \end_layout \begin_layout Standard \noindent andra' a capo automaticamente ogni 50 caratteri. \end_layout \begin_layout Standard \noindent Ricordatevi di abilitare anche la funzione autoindent, con: \end_layout \begin_layout LyX-Code \noindent :set autoindent \end_layout \begin_layout Standard \noindent altrimenti texwidth non funzionera'. \newline \end_layout \begin_layout Standard \noindent \emph on > Disabilitare il case sensitive (ossia la ricerca specifica maiuscole-minuscole ): \end_layout \begin_layout LyX-Code \noindent :set ignorecase \end_layout \begin_layout Standard \noindent in questo modo se effettuate una ricerca con: \end_layout \begin_layout LyX-Code \noindent /mio \end_layout \begin_layout Standard \noindent ricerchereste non solo la parola mio, ma anche Mio, mIo, miO, MIo, mIO, MiO, MIO \end_layout \begin_layout Standard \noindent per ri-abilitare la ricerca mirata: \end_layout \begin_layout LyX-Code \noindent :set noignorecase \end_layout \begin_layout Standard \noindent E' possibile fissare tutti i parametri voluti su un file che sara' letto all'avvio di Vi(m). \end_layout \begin_layout Standard \noindent Bastera' creare per Vim, se non e' gia' presente nella vostra directory home, il file .vimrc (in vi viene talvolta usato .exrc) contenente tutte le opzioni desiderate. \end_layout \begin_layout Standard \noindent Ecco un'esempio di .vimrc (o .exrc per vi): \end_layout \begin_layout Standard \noindent \begin_inset Box Doublebox position "t" hor_pos "c" has_inner_box 1 inner_pos "t" use_parbox 0 width "35line%" special "none" height "1in" height_special "totalheight" status open \begin_layout Standard set noerrorbells \end_layout \begin_layout Standard set ignorecase \end_layout \begin_layout Standard set autoindent \end_layout \begin_layout Standard set textwidth 50 \end_layout \begin_layout Standard set number \end_layout \end_inset \end_layout \begin_layout Standard \noindent avrete in questo modo rispettivamente: disabilitato il suono che segnala un'errore, disabilitato il riconoscimento nella ricerca in maniera selettiva per le maiuscole/minuscole, configurato il ritorno a capo ogni 50 caratteri (prima autoindent e poi textwidth), visualizzato il numero di righe. \end_layout \begin_layout Standard \noindent Ovviamente potrete aggiungere o modificare opzioni a vostro piacimento. \end_layout \begin_layout Section I simboli \end_layout \begin_layout Standard \noindent Vi(m) ha alcuni simboli che identificano alcune particolarita'. \end_layout \begin_layout Standard \noindent Il piu' semplice da ricordare e' $ che sta per fine (riga), infatti non solo premendolo il cursore si sposta al termine della riga ma alcuni comandi sono collegati ad esso. \end_layout \begin_layout Standard \noindent Ad esempio d$, corrisponde a D, ossia cancella dal cursore fino alla fine della riga. \end_layout \begin_layout Standard \noindent Non tutti i comandi seguono questa regola, ma e' comunque estremamente utile nel caso di comandi multipli, magari digitati sulla linea di comando. \end_layout \begin_layout Standard \noindent Va ricordato inoltre che il contrario a $ e' 0 (zero) anche se il suo uso e' estremamente ridotto. \end_layout \begin_layout Standard \noindent Altro comodo simbolo e' % in quanto se richiamato in command mode, in presenza di una parentesi, cerca la sua corrispondente. E' sicuramente un aiuto per i programmatori. \end_layout \begin_layout Standard \noindent Il carattere ~ (tilde) invece opera una curiosa trasformazione: in command mode, se premuto sopra un testo, cambia il maiuscolo/minuscolo di ogni singola lettera. \end_layout \begin_layout Section Lanciare i comandi della shell \end_layout \begin_layout Standard \noindent E' semplice lanciare la shell con Vi(m), basta infatti immettere nella linea di comando il simbolo ! (punto esclamativo) seguito dal comando desiderato. \end_layout \begin_layout Standard \noindent Ad esempio per visualizzare la directory corrente, magari utilizzando il reindirizzamento dei comandi di bash, basta fare: \end_layout \begin_layout LyX-Code \noindent :!ls | more \end_layout \begin_layout Standard \noindent e vedrete l'elenco dei file presenti, una pagina alla volta (notate che il tutto avviene in maniera trasparente, compreso l'uso del pipe, ossia il simbolo |). \end_layout \begin_layout Section Edit complesso: come memorizzare e utilizzare piu' volte i dati, tramite yank e put. \end_layout \begin_layout Standard \noindent Nel caso in cui ci fosse la necessita' di ripetere/cancellare determinati contenuti dovremmo \newline selezionarli/individuarli/cancellarli piu' volte. \end_layout \begin_layout Standard \noindent Fortunatamente Vi(m) ci viene incontro, vediamo come. Possiamo associare ad una lettera un certo contenuto, in modo da incollare solo quello che ci serve ed in maniera anche ricorsiva. \end_layout \begin_layout Standard \noindent Ecco come fare: \end_layout \begin_layout Enumerate individuiamo quello che ci interessa \end_layout \begin_layout Enumerate \noindent inviamo il comando, da linea di comando, yank: \newline \emph on :numero_riga_iniziale,numero_riga_finale yank x \emph default \newline dove x e' la lettera che vogliamo associare al buffer memorizzato, ossia denominiamo x 'quella parte di memoria' (puo' essere anche la stessa lettera x) \end_layout \begin_layout Enumerate \noindent immettiamo col comando put dove va immesso il buffer denominato x, incollando di conseguenza il suo contenuto: \newline \emph on :numero_riga_dopo_la_quale_sara'_immesso_il_testo put x \end_layout \begin_layout Standard \noindent Creiamo ad esempio un file (es. boschetto) con il seguente contenuto: \end_layout \begin_layout Standard \noindent \begin_inset Box Doublebox position "t" hor_pos "c" has_inner_box 1 inner_pos "t" use_parbox 0 width "50line%" special "none" height "1in" height_special "totalheight" status open \begin_layout Standard 1 Kijio e' andato nel bosco e ha trovato: \end_layout \begin_layout Standard 2 \end_layout \begin_layout Standard 3 elfi \end_layout \begin_layout Standard 4 nani \end_layout \begin_layout Standard 5 gnomi \end_layout \begin_layout Standard 6 \end_layout \begin_layout Standard 7 fragole \end_layout \begin_layout Standard 8 lamponi \end_layout \begin_layout Standard 9 \end_layout \begin_layout Standard 10 cappuccetto e il lupo che giocavano a ramino \end_layout \begin_layout Standard ~ \end_layout \begin_layout Standard ~ \end_layout \begin_layout Standard 10,44 Tut \end_layout \end_inset \end_layout \begin_layout Standard \noindent potremmo associare ad ogni possbile incontro una lettera: \end_layout \begin_layout LyX-Code \noindent :3,5 yank e \end_layout \begin_layout Standard \noindent in questo modo associamo alla lettera e il contenuto delle righe 3,5 (elfi,nani, gnomi) dopodiche' facciamo anche: \end_layout \begin_layout LyX-Code \noindent :7,8 yank f \end_layout \begin_layout LyX-Code \noindent :10 yank c \end_layout \begin_layout Standard \noindent sempre seguendo l'esempio, se ora cancellassimo tutto, eccetto la prima riga, potremmo comodamente scegliere cosa incollare a partire dalla seconda \end_layout \begin_layout Standard \noindent riga, ad esempio il lupo con cappuccetto: \end_layout \begin_layout LyX-Code \noindent :1 put c \end_layout \begin_layout Standard \noindent oppure con fragole e lamponi con f, o in alternativa gli essere fantasiosi con e. \end_layout \begin_layout Section Alias \end_layout \begin_layout Standard \noindent Se volete associare ad una certa sequenza di caratteri potete utilizzare, tramite la linea di comando, il comando ab (io lo chiamo alias ....): \end_layout \begin_layout LyX-Code \noindent :ab lettere contenuto \end_layout \begin_layout Standard \noindent ad esempio se scrivete sulla linea di comando: \end_layout \begin_layout LyX-Code \noindent :ab kj Kijio e' sicuramente il piu' pollastro con Vi \end_layout \begin_layout Standard \noindent sara' associato alla sequenza kj tutta la frase che segue (Kijio e' sicuramente il piu' pollastro con Vi) \end_layout \begin_layout Standard \noindent infatti se provate ad immettere un testo, utilizzando kj, vedrete che alla fine dell'immissione, tornando in command mode, kj si trasformera' nella frase assegnatagli. \end_layout \begin_layout Standard \noindent Per levare l'assegnazione basta usare unab: \end_layout \begin_layout LyX-Code \noindent :unab lettera \end_layout \begin_layout Standard \noindent dove ovviamente lettera e' quella che avevate utilizzato prima per l'assegnazion e. \end_layout \begin_layout Standard \noindent A riguardo degli alias un consiglio e' d'obbligo: state attenti a non usare sequenze alfanumeriche che possano essere confuse con stringhe da non modificar e. Se ad esempio in programmazione usate per \emph on \begin_inset Quotes erd \end_inset for do \begin_inset Quotes erd \end_inset \emph default la parola \emph on \begin_inset Quotes erd \end_inset fd \begin_inset Quotes erd \end_inset \emph default e nel contempo usate una variabile \emph on \begin_inset Quotes erd \end_inset fb \begin_inset Quotes erd \end_inset \emph default rischiate di sostituire tutto con l'alias creato! \end_layout \begin_layout Section Buffer: caricare e modificare piu' file \end_layout \begin_layout Standard \noindent Vim permette di caricare contemporaneamente piu' file, editandoli in maniera sequenziale. \end_layout \begin_layout Standard \noindent Ad esempio potete caricare due file \emph on caio.txt \emph default e \emph on sempronio.txt \emph default con: \end_layout \begin_layout LyX-Code \noindent vim caio.txt sempronio.txt \end_layout \begin_layout Standard \noindent e vedrete la schermata del primo file, per passare al secondo file basta entrare in command mode e selezionare: \end_layout \begin_layout LyX-Code \noindent :b2 \end_layout \begin_layout Standard \noindent b1 sta per buffer numero 2. Per tornare al primo basta ridare il comando: \end_layout \begin_layout LyX-Code \noindent :b1 \newpage \end_layout \begin_layout Part* \noindent Vim per programmare \end_layout \begin_layout Section \noindent Wrap \end_layout \begin_layout Standard \noindent Avendo impostato la lunghezza del testo vim andra' a capo dopo un certo numero di caratteri. \end_layout \begin_layout Standard \noindent L'opzione wrap permette di andare a capo senza inserire effettivamente dei caratteri \emph on \emph default , ovvero sara' solamente un tipo di visualizzazione, evitando un possibili problemi con il compilatore. \end_layout \begin_layout LyX-Code \noindent \align block :set wrap \end_layout \begin_layout Section \noindent La tabulazione \end_layout \begin_layout Standard \noindent Per impostare la tabulazione usiamo il comando softtabstop. Il default e' 8. \end_layout \begin_layout LyX-Code \noindent \align block :set softtabstop=4 \end_layout \begin_layout Standard \noindent Notate che se premete e poi \emph on \emph default Vim lo convertira' in un carattere . Anche se premete 4 (in questo caso) spazi verranno convertiti in un carattere . Non vogliamo avere i caratteri tabulazione, ma spazi? Semplice. \end_layout \begin_layout LyX-Code \noindent \align block :set expandtab \end_layout \begin_layout Standard \noindent Questo comando fa si' che il venga espanso in un numero di spazi pari al numero impostato con il softtabstop. Ovvero premendo una volta e come premere 4 volte . Per altri programmi gia' scritti con le tabulazioni invece degli spazi usiamo il comando \end_layout \begin_layout LyX-Code \noindent \align block :retab \end_layout \begin_layout Section \noindent Sostituzione di caratteri \end_layout \begin_layout Standard \noindent Purtroppo, essendo un amante del tab, ho spesso incontrato programmi scritti con gli spazi ed ho notato che il retab non funziona al contrario. Ovviamente con Vim si puo' fare questo e altro con un "semplice" comando: \end_layout \begin_layout LyX-Code \noindent \align block :%s/ / \backslash t/g \end_layout \begin_layout Standard \noindent Per una descrizione dettagliata del significato del comando si veda il capitolo precedente \emph on Ricercare le stringhe ed eventualmente sostituirle. \end_layout \begin_layout Standard \noindent Notate che \begin_inset Quotes erd \end_inset \backslash t \begin_inset Quotes erd \end_inset indica un carattere di tablulazione (un tab). Ovviamente se odiate i tab potete usare un comando analogo oltre al retab. \end_layout \begin_layout Section \noindent Indentazione \end_layout \begin_layout Standard \noindent Il comando shiftwidth permette di impostare il numero di spazi dell'indentazione. \end_layout \begin_layout LyX-Code \noindent \align block :set shiftwidth=numero_spazi \end_layout \begin_layout Standard \noindent Questo comando fa si' che pozionati su un caratte non-blank e premendo in command mode \emph on ">\InsetSpace \thinspace{} >" \emph default vengano aggiunti gli spazi specificati, mentre premendo \emph on \begin_inset Quotes eld \end_inset <\InsetSpace \thinspace{} < \begin_inset Quotes erd \end_inset \emph default l'indentazione viene rimossa. \end_layout \begin_layout Standard \noindent Se non avete settato expandtab e la tabulazione e' di 8 spazi; ogni due "indentazioni" (cioe' 8 spazi) saranno sostituiti con un \emph on \emph default . Per cui Vim sostituira' automaticamente un numero n di spazi con un tab se shiftwidth e softtabstop sono uguali a n. \end_layout \begin_layout LyX-Code \noindent \align block :set autoindent \end_layout \begin_layout Standard \noindent Questa impostazione fa in modo che vengano mantenuti i caratteri di spazio e di tabulazione quando si va a capo. \end_layout \begin_layout Standard \noindent Ad Esempio: \end_layout \begin_layout Standard \noindent \emph on .... \end_layout \begin_layout Standard \noindent \emph on for(;;); //don't try this at home! \end_layout \begin_layout Standard \noindent \emph on //dopo l'invio mi sono ritrovato qui senza dover premerre o o >\InsetSpace \thinspace{} > \end_layout \begin_layout Standard \noindent \emph on .... \end_layout \begin_layout LyX-Code \noindent \align block :set smartindent \end_layout \begin_layout Standard \noindent Con questa opzione abilitata Vim aggiungera' un livello di indentazione, ovvero aggiungera' una indentazione pari a shiftwidth quando andate a capo dopo una \emph on { \emph default o una qualunque parola che si trova nelle cinwords. Vim togliera' anche l'indentazione alla chiusura di una graffa oppure in un ciclo for senza \emph on {} \emph default , cioe' con una sola istruzione, ecc. \end_layout \begin_layout Standard \noindent Esiste poi un indentazione piu intelligente ovvero \end_layout \begin_layout LyX-Code \noindent \align block :set cindent \end_layout \begin_layout Standard \noindent questa e' appositamente studiata per i programmatori C per indentare automaticam nete secndo lo standard C. \end_layout \begin_layout Standard \noindent Premendo in command mode il tasto <=> si utilizza il programma interno di vim per indentare. Per cui premendo due volte <=><=> Vim indentera' la riga, se non e' indentata. Oppure ci si puo' posizionare sulla prima \emph on { \emph default di un blocco di codice e poi premere <=><%> per indentare quel blocco di codice fino alla corrispondente }. \end_layout \begin_layout Section \noindent Syntax color & Filetype \end_layout \begin_layout LyX-Code \noindent \align block :set syntax on \end_layout \begin_layout Standard \noindent permette a Vim di colorare le diverse parole chiave di un linguaggio di programmazione. Vim per sapere che tipo di file state editando (e attivare la giusta colorazion e) utilizza l'estensione del file. Se editate un file senza estensione o con estensione non standard bastera' utilizzare il comando filetype per far in modo di avere la giusta colorazione delle parole, ad esempio: \end_layout \begin_layout LyX-Code \noindent \align block :set filetype=c \end_layout \begin_layout Section \noindent Tags \end_layout \begin_layout Standard \noindent Esiste un progamma: \emph on ctags \emph default , che e' incluso con Vim. Questo programma permette di costruire un indice di funzioni utile a Vim (e ovvimaente a noi tramite il comando :tag). Inanzittutto scriviamo da shell, nella directory dove si trovano i/il file c che dobbiamo editare \end_layout \begin_layout LyX-Code \noindent \align block $ctags *.c \end_layout \begin_layout Standard \noindent In questo modo creiamo un file che rappresenta l'indice. Supponiamo che il nostro programma contenga chiamate a funzioni che si trovano in altri file (o anche nello stesso): come fare per vedere il codice di queste funzioni? Semplice ci posizioniamo sopra all'invocazione, premiamo CTRL+] e Vim saltera' automaticamente alla definizione di tale funzione (anche se essa si trova in un'altro file). Per tornare indietro premiamo \emph on \emph default CTRL+j. \end_layout \begin_layout Standard \noindent Per accedere alla definizione di una funzione possiamo anche scrivere in command mode \end_layout \begin_layout LyX-Code \noindent \align block :tag nome_funzione \end_layout \begin_layout Standard \noindent Per cercare il nome di una funzione possiamo utilizzare \end_layout \begin_layout LyX-Code \noindent \align block :tag /nome_funzione_da_cercare \end_layout \begin_layout Standard \noindent che ci portera alla prima funzione che inizia con nome_funzione_cercare. Si puo' anche utilizzare una espressione regolare. \end_layout \begin_layout LyX-Code \noindent \align block :tselect {nome_funzione} \end_layout \begin_layout Standard \noindent si comporta come :tag nome_funzione \emph on , \emph default ma restituisce una lista di elementi. Il comando :count seguito da una delle seguenti parole: \emph on \emph default tnext, tprevious, trewind e tlast permette di saltare agevolmente da una definizione di funzione ad un'altra. \end_layout \begin_layout Standard \noindent Il comando tselect, a meno che non abbiate una serie di funzioni tutte con il nome uguale, risulta efficace utilizzato in questo modo: \end_layout \begin_layout LyX-Code \noindent \align block :tselect /parte_del_nome_di_funzione \end_layout \begin_layout Standard \noindent Esso restituisce una lista di funzioni che hanno nel loro nome parte_del_nome_di _funzione. Premendo il numero corrispondente a una voce di questa lista Vim posizionera' il cursore sulla definizione di tale funzione. \end_layout \begin_layout Section \noindent Autocompletition \end_layout \begin_layout Standard \noindent Suuponiamo ad esempio di avere: \end_layout \begin_layout Standard \noindent \emph on .... \end_layout \begin_layout Standard \noindent \emph on void io_Amo_Vim(void) \end_layout \begin_layout Standard \noindent \emph on ... \end_layout \begin_layout Standard \noindent ora dobbiamo richiamare la funzione....pero' senza scriverla tutta. Per far cio' semplicemente si abbozza l'inizio e' si preme \emph on CRTL+p \emph default . \end_layout \begin_layout Standard \noindent Con CTRL+p cerchiamo da quel punto indietro una parola che inizi con le lettere digitate fino a quel momento, per cerchera' in avanti premiamo \emph on CTRL+n. \end_layout \begin_layout Standard \noindent Ecco la sequanza ordinata di dove Vim cerca le parole per la completazione automatica: file in editing, file in altre finestre, file nei buffers caricati, file nei buffers scaricati, nella lista corrente dei tags, nei file #include e nel file corrente. \end_layout \begin_layout LyX-Code \noindent \align block :set ignorecase \end_layout \begin_layout Standard \noindent Co nquesto comando Vim ignorera' maiuscole e minuscole quando cerchera' una parola per la completazione automatica. \end_layout \begin_layout Section \noindent Backup \end_layout \begin_layout LyX-Code \noindent \align block :set backup \end_layout \begin_layout Standard \noindent Questa impostazione fa si che ogni volta che salviamo il file che stiamo editando Vim esegua un backup. In questo modo possiamo recuperare la versione del programma precedente al salvataggio. Il file di backup ha lo stesso nome del file che state editando, ma con una ~ finale. \end_layout \begin_layout LyX-Code \noindent \align block :set patchmode=.orig \end_layout \begin_layout Standard \noindent Impostando questa opzione facciamo in modo che la prima volta che editiamo un file tale file sia copiato come nome_file_che_editiamo.orig, in questo modo ovviamo al fatto che con :set backup il file di backup viene sovrascritto ogni volta che salviamo. \end_layout \begin_layout Standard \noindent Se il ~ finale non ci piace lo possiamo cambiare con il comando \end_layout \begin_layout LyX-Code \noindent \align block :set backuptext=testo_da_accodare_al_nome_del_file \end_layout \begin_layout Standard \noindent Anche la cartella dove Vim salva il backup puo' essere personalizzata tramite \end_layout \begin_layout LyX-Code \noindent \align block :set backupdir=nome_cartella \end_layout \begin_layout Section \noindent Map (per compilare) \end_layout \begin_layout Standard \noindent Questa cosa e' fantastica. Scrivendo semplicemente \end_layout \begin_layout LyX-Code \noindent \align block map :w:!gcc % -o %:r \end_layout \begin_layout Standard \noindent faremo in modo che premendo F8 si compili il programma: % indica il nome del file che sis ta editando, mentre %:r indica il nome di tale file senza estensione. \end_layout \begin_layout LyX-Code \noindent \align block map :./%:r \end_layout \begin_layout Standard \noindent Bhe' questo comando serve a eseguire il programma compilato, premendo F9. Ovviamente entrambi i comandi devono essere seguiti dalla pressione del taasto invio, ho evitato di mettere per non confondervi. \end_layout \begin_layout Standard \noindent Le vie di Vim sono infinite... \end_layout \begin_layout Standard \noindent Aggiungete questo al vostro .vimrc: \end_layout \begin_layout LyX-Code \noindent \align block map :call CompileRunGcc() \end_layout \begin_layout LyX-Code \noindent \align block map : call CompileGcc() \end_layout \begin_layout LyX-Code \noindent \align block func! CompileRunGcc() \end_layout \begin_layout LyX-Code \noindent \align block exec "w" "Save the file \end_layout \begin_layout LyX-Code \noindent \align block exec "!gcc % -o %< && cr 10 && IF EXIST %<.exe (%<) \end_layout \begin_layout LyX-Code \noindent \align block ELSE banner -c = Compile Unsuccessful " \end_layout \begin_layout LyX-Code \noindent \align block exec "i" "jump back where we were \end_layout \begin_layout LyX-Code \noindent \align block endfunc \end_layout \begin_layout LyX-Code \noindent \align block func! CompileGcc() \end_layout \begin_layout LyX-Code \noindent \align block exec "w" \end_layout \begin_layout LyX-Code \noindent \align block exec "!gcc % -o %< && IF EXIST %<.exe (cr 5 && banner -c # Success) \end_layout \begin_layout LyX-Code \noindent \align block ELSE banner -c # Compile Unsuccessful " \end_layout \begin_layout LyX-Code \noindent \align block exec "i" \end_layout \begin_layout LyX-Code \noindent \align block endfunc \end_layout \begin_layout Standard \noindent Con il comando :map ottenerete una lista di tutti i tasti "mappati". Questo capitolo ha trattato il compilatore c++ (il quale compila anche programmi c). Settaggi analoghe e' possible farle per gli altri linguaggi di programmazione. \end_layout \begin_layout Section \noindent Code Folding \end_layout \begin_layout Standard \noindent Pensavate che in Vim non si potesse fare? Allora il code folding consiste nel collassare piu' righe in una (state tranquilli e' solo una visualizzazione che fa risparmiare un po di scrolling e capire meglio la struttura del programma). \end_layout \begin_layout Standard \noindent Tutti i comandi iniziano con la lettera z. Quindi posizionatevi sul nome di una funzione e premete zfap, ovviamente in command mode (che serve per collassare un paragrafo, ma e' efficace anche sulle funzioni). Con il comando zo eseguito sulla linea rappresentante la zona collassata ne visualizzerete il contenuto, mentre con zc la ri-collasserete. \end_layout \begin_layout Standard \noindent Con zr visualizzerete tutto il testo il testo in tutti i folds, il comando inverso e' zm. Con zR visualizzerete tutto il testo nel caso in cui il fold contenga altri folds, il comando opposto e' zM. Ovviamente si possono fare molte cose con i fold e ci sono molte opzioni per settarli, come in tutte le funzionalita' di Vim del resto, pero' il comando \end_layout \begin_layout LyX-Code \noindent \align block :set foldmethod=indent \end_layout \begin_layout Standard \noindent e' particolarmente utile, dato che collassa per indentazione. Cio' significa che avrete una cosa di questo tipo: \end_layout \begin_layout Standard \noindent \emph on void merge(stringlist* list1, stringlist list2) { \end_layout \begin_layout Standard \noindent \emph on +--- linee collassate ---------------------------------------------------------- ----------- \end_layout \begin_layout Standard \noindent \emph on } \end_layout \begin_layout LyX-Code \noindent \align block :set foldopen=all \end_layout \begin_layout LyX-Code \noindent \align block :set foldclose=all \end_layout \begin_layout Standard \noindent Con la prima opzione attivata quando il cursore sara' sopra ad una linea che rappresenta un'insieme di righe collassate la aprira' automaticamente, mentre aundo il cursore uscira' da quest'insieme di linee esse saranno nuovamente collassate, grazie alla seconda opzione. \end_layout \begin_layout Section \noindent Conclusioni \end_layout \begin_layout Standard \noindent Spero di essere stato chiaro, comunque è da ricordare che l'unico metodo per imparare ed apprezzare Vim è quello di usarlo. Infatti chiunque, una volta capito il metodo di ragionare per usarlo, potrà sorprendersi dalla facilità nell'ottenimento dei risultati desiderati. \end_layout \begin_layout Standard \noindent Ricordo che in Vim ha gia' un aiuto incomporato, basta infatti richiamare il comando help da command mode: \end_layout \begin_layout LyX-Code \noindent :help \end_layout \begin_layout Standard \noindent si puo' inoltre specificare su cosa si vuole l'aiuto, ad esempio per avere nozioni sulle opzioni di compatibilita': \end_layout \begin_layout LyX-Code \noindent :help compatible \end_layout \begin_layout Standard \noindent e per uscire per tornare ad editare: \end_layout \begin_layout LyX-Code \noindent :q \end_layout \begin_layout Standard \noindent Per tutti coloro interessati a segnalare errori, critiche e altro potete contattarci presso i seguenti indirizzi di posta elettronica: \end_layout \begin_layout Standard \noindent Kijio: kijionerd@gmail.com \end_layout \begin_layout Standard \noindent Hyol: gccdvl@gmail.com \end_layout \begin_layout Section \noindent Link di riferimento \end_layout \begin_layout Standard \noindent Se volete approfondire l'argomento su internet troverete molte risorse, io ne cito solo alcune, sono state controllate nel marzo 2005, e non vi assicuro quindi che sono presenti nel momento che leggete questo libro: \end_layout \begin_layout Standard \noindent in italiano: \end_layout \begin_layout List \labelwidthstring 00.00.0000 \noindent \emph on http://ianua.initd.org/vimit/vim62/index62.html \emph default (traduzione del manuale di Vim6.2, è possibile scaricare diversi formati, txt e pdf, oppure leggerlo in html on line) \end_layout \begin_layout List \labelwidthstring 00.00.0000 \noindent \emph on http://ianua.initd.org/vimit/vim70/index70.html \emph default (come sopra ma per la versione 7) \end_layout \begin_layout List \labelwidthstring 00.00.0000 \noindent \emph on http://www.patricksystem.it/opensource/appunti_vim/index.html \end_layout \begin_layout List \labelwidthstring 00.00.0000 \noindent \emph on http://www.vim.org/6k/features.it.txt \end_layout \begin_layout List \labelwidthstring 00.00.0000 \noindent \emph on http://www.interpuntonet.it/RIVISTA/69/Vi/gvim.html \end_layout \begin_layout List \labelwidthstring 00.00.0000 \noindent \emph on http://www.messinalug.org/mediawiki/index.php/Vim_for_Programmers_-_Quarta_Parte \emph default da qui e' stata tratta interamente la prima parte di Map (per compilare) \end_layout \begin_layout Standard \noindent In inglese: \end_layout \begin_layout List \labelwidthstring 00.00.0000 \noindent \emph on http://www.linux.org/docs/ldp/howto/Vim-HOWTO/vim-tutorial.html \emph default In verita' questo e' un elenco ufficiale di documenti presentati da linux.org, ci troverete anche: \end_layout \begin_deeper \begin_layout List \labelwidthstring 00.00.0000 \noindent \emph on http://www.thomer.com/vi/vi.html \emph default ossia Vi Lovers Home Page, dove trovare davvero tutto sull'editor, un'infinità di manuali da scaricare, guide, con tanto di giudizi ed osservazioni sui lavori fatti da parte dell'autore della pagina web. \end_layout \end_deeper \begin_layout List \labelwidthstring 00.00.0000 \noindent \emph on http://swobodin.fedora-tn.org/archives/11 \emph default da qui deriva la seconda parte del capitolo (map per compilare) \end_layout \begin_layout Section \noindent Libri consigliati \end_layout \begin_layout Standard \noindent Sinceramente non credo occorra comprare nessun libro, basta ed avanza quello che si trova su internet, ma se proprio non ne potete farne a meno di spendere i soldi in voluminosi manuali, vi consiglio: \end_layout \begin_layout Standard \noindent Linux Guida di Riferimento \begin_inset Quotes erd \end_inset O'Reilly \begin_inset Quotes erd \end_inset distribuita in italia da Apogeo. Ci troverete un elenco sintetico dei comandi Linux e, nelle oltre 770 pagine, anche 30 che parlano dell'editor Vi. \end_layout \begin_layout Standard \noindent Ma se conoscete l'inglese e volete sbeffeggiare il sottoscritto per la sua incompletezza ;) , potete sempre ordinare e studiare: \end_layout \begin_layout Standard \noindent Learning the vi Editor, 6th Edition, Nov. 1998, edito da O'Reilly \end_layout \begin_layout Standard \noindent Sono ben 344 pagine che parlano solo ed esclusivamente di Vi(m), ovviamente in inglese. \end_layout \begin_layout Standard \noindent Su questo sito \emph on http://truth.sk/vim/vimbook-OPL.pdf \emph default troverete un interessante libro in formato pdf \emph on . \emph default \newpage \end_layout \begin_layout Part* Appendice \end_layout \begin_layout Subsection I modi \end_layout \begin_layout Standard \noindent \begin_inset Tabular \begin_inset Text \begin_layout Standard MODALITA' \end_layout \end_inset \begin_inset Text \begin_layout Standard Tasto da premere per avviare \end_layout \begin_layout Standard \end_layout \end_inset \begin_inset Text \begin_layout Standard Note \end_layout \end_inset \begin_inset Text \begin_layout Standard COMMAND MODE o "modalita' in attesa" \end_layout \end_inset \begin_inset Text \begin_layout Standard Esc \end_layout \end_inset \begin_inset Text \begin_layout Standard normalmente viene visualizzato sullo schermo ^[ e' la modailita' iniziale \end_layout \end_inset \begin_inset Text \begin_layout Standard INSERT MODE o \begin_inset Quotes erd \end_inset modalita' di inserimento \begin_inset Quotes erd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Standard i (ved. Tab. inserisci /sostituisci) \end_layout \end_inset \begin_inset Text \begin_layout Standard si parte da command mode \end_layout \end_inset \begin_inset Text \begin_layout Standard VISUAL MODE O \begin_inset Quotes erd \end_inset modalita' visiva \begin_inset Quotes erd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Standard v \end_layout \end_inset \begin_inset Text \begin_layout Standard si parte da command mode - permette di selezionare il testo con i tasti cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard RIGA DI COMANDO \end_layout \end_inset \begin_inset Text \begin_layout Standard : (ved. tabella mod. riga comando) \end_layout \end_inset \begin_inset Text \begin_layout Standard : (ved. tabella mod. riga comando) \end_layout \end_inset \end_inset \end_layout \begin_layout Subsection Command mode \end_layout \begin_layout Paragraph* \noindent \emph on Movimento \end_layout \begin_layout Standard \noindent \align left \begin_inset Tabular \begin_inset Text \begin_layout Standard Tasto da premere \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione azione \end_layout \end_inset \begin_inset Text \begin_layout Standard k \end_layout \end_inset \begin_inset Text \begin_layout Standard alto \end_layout \end_inset \begin_inset Text \begin_layout Standard h \end_layout \end_inset \begin_inset Text \begin_layout Standard sinistra \end_layout \end_inset \begin_inset Text \begin_layout Standard l \end_layout \end_inset \begin_inset Text \begin_layout Standard destra \end_layout \end_inset \begin_inset Text \begin_layout Standard j \end_layout \end_inset \begin_inset Text \begin_layout Standard basso \end_layout \end_inset \begin_inset Text \begin_layout Standard w \end_layout \end_inset \begin_inset Text \begin_layout Standard avanti di una parola \end_layout \end_inset \begin_inset Text \begin_layout Standard b \end_layout \end_inset \begin_inset Text \begin_layout Standard indietro di una parola \end_layout \end_inset \begin_inset Text \begin_layout Standard e \end_layout \end_inset \begin_inset Text \begin_layout Standard si sposta alla fine della parola senza considerare i segni di punteggiatura \end_layout \end_inset \begin_inset Text \begin_layout Standard E \end_layout \end_inset \begin_inset Text \begin_layout Standard come sopra ma considera i segni di punteggiatura come parole \end_layout \end_inset \begin_inset Text \begin_layout Standard num. G \end_layout \end_inset \begin_inset Text \begin_layout Standard si sposta alla num. riga \end_layout \end_inset \end_inset \end_layout \begin_layout Paragraph* \noindent \emph on Cancella \end_layout \begin_layout Standard \noindent (non si limita a cancellare ma tiene in memoria, quindi simile al `taglia`) \end_layout \begin_layout Standard \noindent \begin_inset Tabular \begin_inset Text \begin_layout Standard Tasto da premere \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione azione \end_layout \end_inset \begin_inset Text \begin_layout Standard dd \end_layout \end_inset \begin_inset Text \begin_layout Standard cancella tutta la riga \end_layout \end_inset \begin_inset Text \begin_layout Standard D \end_layout \end_inset \begin_inset Text \begin_layout Standard cancella dal punto del cursore alla fine della riga \end_layout \end_inset \begin_inset Text \begin_layout Standard d$ \end_layout \end_inset \begin_inset Text \begin_layout Standard come sopra \end_layout \end_inset \begin_inset Text \begin_layout Standard dw \end_layout \end_inset \begin_inset Text \begin_layout Standard cancella una parola \end_layout \end_inset \begin_inset Text \begin_layout Standard dG \end_layout \end_inset \begin_inset Text \begin_layout Standard cancella fino alla fine del file \end_layout \end_inset \begin_inset Text \begin_layout Standard num. dd \end_layout \end_inset \begin_inset Text \begin_layout Standard cancella num. righe a partire da quella in cui e' presente il cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard d^ \end_layout \end_inset \begin_inset Text \begin_layout Standard cancella dal cursore all'inizio della riga \end_layout \end_inset \begin_inset Text \begin_layout Standard x \end_layout \end_inset \begin_inset Text \begin_layout Standard cancella il carattere sotto il cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard X \end_layout \end_inset \begin_inset Text \begin_layout Standard cancella un carattere all'indietro \end_layout \end_inset \begin_inset Text \begin_layout Standard J \end_layout \end_inset \begin_inset Text \begin_layout Standard unisce due righe \end_layout \end_inset \end_inset \end_layout \begin_layout Standard \noindent Per cancellare e ritrovarvi in insert mode potete usare tutti i comandi sopra riportati sostituendo \begin_inset Quotes erd \end_inset c \begin_inset Quotes erd \end_inset al posto di \begin_inset Quotes erd \end_inset d \begin_inset Quotes erd \end_inset . \end_layout \begin_layout Paragraph* \noindent \emph on Copia \end_layout \begin_layout Standard \noindent \align left \begin_inset Tabular \begin_inset Text \begin_layout Standard Tasto da premere \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione azione \end_layout \end_inset \begin_inset Text \begin_layout Standard Y \end_layout \end_inset \begin_inset Text \begin_layout Standard copia l'intera riga su cui e' presente il cursore nel buffer corrente \end_layout \end_inset \begin_inset Text \begin_layout Standard YY \end_layout \end_inset \begin_inset Text \begin_layout Standard come sopra \end_layout \end_inset \begin_inset Text \begin_layout Standard ye \end_layout \end_inset \begin_inset Text \begin_layout Standard copia fino alla fine della parola nel buffer corrente \end_layout \end_inset \end_inset \end_layout \begin_layout Paragraph* \noindent \emph on Incolla \end_layout \begin_layout Standard \noindent \align left \begin_inset Tabular \begin_inset Text \begin_layout Standard Tasto da premere \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione azione \end_layout \end_inset \begin_inset Text \begin_layout Standard p \end_layout \end_inset \begin_inset Text \begin_layout Standard inserisce quello presente nel buffer dopo il cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard P \end_layout \end_inset \begin_inset Text \begin_layout Standard inserisce quello presente nel buffer prima del cursore \end_layout \end_inset \end_inset \end_layout \begin_layout Paragraph* \noindent \emph on Inserisci/sostituisci \end_layout \begin_layout Standard \noindent \align left \begin_inset Tabular \begin_inset Text \begin_layout Standard Tasto da premere \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione azione \end_layout \end_inset \begin_inset Text \begin_layout Standard i \end_layout \end_inset \begin_inset Text \begin_layout Standard entra in modalita' inserimento prima del cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard I \end_layout \end_inset \begin_inset Text \begin_layout Standard entra in modalita' inserimento prima del primo carattere del cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard cc \end_layout \end_inset \begin_inset Text \begin_layout Standard modifica la riga dove e' presente il cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard cw \end_layout \end_inset \begin_inset Text \begin_layout Standard modifica la parola dove e' presente il cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard c$ \end_layout \end_inset \begin_inset Text \begin_layout Standard modifica la riga fino alla fine, a partire da dove e' situato il cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard C \end_layout \end_inset \begin_inset Text \begin_layout Standard come sopra \end_layout \end_inset \begin_inset Text \begin_layout Standard a \end_layout \end_inset \begin_inset Text \begin_layout Standard inserisce testo dopo il cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard A \end_layout \end_inset \begin_inset Text \begin_layout Standard inserisce testo alla fine della riga \end_layout \end_inset \begin_inset Text \begin_layout Standard o \end_layout \end_inset \begin_inset Text \begin_layout Standard inserisce una nuova riga editabile prima di quella del cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard O \end_layout \end_inset \begin_inset Text \begin_layout Standard inserisce una nuova riga editabile dopo di quella del cursore \end_layout \end_inset \begin_inset Text \begin_layout Standard Ins \end_layout \end_inset \begin_inset Text \begin_layout Standard cambia la modalita' inserimento in sostituzione e viceversa \end_layout \end_inset \begin_inset Text \begin_layout Standard ~ \end_layout \end_inset \begin_inset Text \begin_layout Standard inverte maiuscole/minuscole e viceversa \end_layout \end_inset \end_inset \end_layout \begin_layout Paragraph* \noindent \emph on Annulla \end_layout \begin_layout Standard \noindent \align left \begin_inset Tabular \begin_inset Text \begin_layout Standard Tasto da premere \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione azione \end_layout \end_inset \begin_inset Text \begin_layout Standard u \end_layout \end_inset \begin_inset Text \begin_layout Standard annulla l'ultima azione di modifica testo \end_layout \end_inset \begin_inset Text \begin_layout Standard U \end_layout \end_inset \begin_inset Text \begin_layout Standard rigenera, senza modifiche, la riga in cui e' presente il cursore \end_layout \end_inset \end_inset \end_layout \begin_layout Subsection Riga di comando \end_layout \begin_layout Standard \noindent (inizia dal command mode, si immette il comando e poi si preme Invio) \end_layout \begin_layout Paragraph* \noindent \emph on Cerca testo \end_layout \begin_layout Standard \noindent \align left \begin_inset Tabular \begin_inset Text \begin_layout Standard Comando \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione \end_layout \end_inset \begin_inset Text \begin_layout Standard /nomeparola \end_layout \end_inset \begin_inset Text \begin_layout Standard cerca la parola nomeparola dal cursore in basso 1 volta \end_layout \end_inset \begin_inset Text \begin_layout Standard ?nomeparola \end_layout \end_inset \begin_inset Text \begin_layout Standard cerca la parola nomeparola dal cursore in alto 1 volta \end_layout \end_inset \begin_inset Text \begin_layout Standard n \end_layout \end_inset \begin_inset Text \begin_layout Standard per continuare la ricerca verso il basso \end_layout \end_inset \begin_inset Text \begin_layout Standard N \end_layout \end_inset \begin_inset Text \begin_layout Standard per continuare la ricerca verso l'alto \end_layout \end_inset \end_inset \end_layout \begin_layout Paragraph* \noindent \emph on Salva ed Esci da Vi(m) \end_layout \begin_layout Standard \noindent \align left \begin_inset Tabular \begin_inset Text \begin_layout Standard Comando \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione \end_layout \end_inset \begin_inset Text \begin_layout Standard :w \end_layout \end_inset \begin_inset Text \begin_layout Standard scrive il file corrente \end_layout \end_inset \begin_inset Text \begin_layout Standard :w nomefile \end_layout \end_inset \begin_inset Text \begin_layout Standard scrive il file corrente chiamandolo nomefile \end_layout \end_inset \begin_inset Text \begin_layout Standard :q \end_layout \end_inset \begin_inset Text \begin_layout Standard esce dal file corrente se non modificato \end_layout \end_inset \begin_inset Text \begin_layout Standard :wq \end_layout \end_inset \begin_inset Text \begin_layout Standard scrive il file corrente ed esce da Vi(m) \end_layout \end_inset \begin_inset Text \begin_layout Standard :x \end_layout \end_inset \begin_inset Text \begin_layout Standard come sopra (salva ed esce) \end_layout \end_inset \begin_inset Text \begin_layout Standard :q! \end_layout \end_inset \begin_inset Text \begin_layout Standard forza l'uscita da Vi(m) senza scrivere alcun file \end_layout \end_inset \end_inset \end_layout \begin_layout Paragraph* \noindent \emph on Editing multiplo \end_layout \begin_layout Standard \noindent \align left \begin_inset Tabular \begin_inset Text \begin_layout Standard Comando \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione \end_layout \end_inset \begin_inset Text \begin_layout Standard :e file \end_layout \end_inset \begin_inset Text \begin_layout Standard carica un'altro file per l'editing, tenendo im memoria quello presente \end_layout \end_inset \begin_inset Text \begin_layout Standard :e# \end_layout \end_inset \begin_inset Text \begin_layout Standard apre il file, o gli altri file, caricati precedentemente \end_layout \end_inset \begin_inset Text \begin_layout Standard :args \end_layout \end_inset \begin_inset Text \begin_layout Standard visualizza i file multipli \end_layout \end_inset \begin_inset Text \begin_layout Standard :rew \end_layout \end_inset \begin_inset Text \begin_layout Standard torna all'inizio della lista dei file \end_layout \end_inset \end_inset \end_layout \begin_layout Paragraph* \noindent \emph on Configurazione \end_layout \begin_layout Standard \noindent \align left \begin_inset Tabular \begin_inset Text \begin_layout Standard Comando \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione \end_layout \end_inset \begin_inset Text \begin_layout Standard :set textwidth 50 \end_layout \end_inset \begin_inset Text \begin_layout Standard imposta a 50 caratteri la fine della riga \end_layout \end_inset \begin_inset Text \begin_layout Standard :set noerrorbells \end_layout \end_inset \begin_inset Text \begin_layout Standard disabilita il suono associato agli errori \end_layout \end_inset \begin_inset Text \begin_layout Standard :set errorbells \end_layout \end_inset \begin_inset Text \begin_layout Standard abilita il suono associato agli errori \end_layout \end_inset \begin_inset Text \begin_layout Standard :set number \end_layout \end_inset \begin_inset Text \begin_layout Standard abilita la visualizzazione del numero di righe (potete saltare ad una riga con il comando :numero_riga) \end_layout \end_inset \begin_inset Text \begin_layout Standard :set nonumber \end_layout \end_inset \begin_inset Text \begin_layout Standard disabilita la visualizzazione del numero di righe \end_layout \end_inset \begin_inset Text \begin_layout Standard :set all \end_layout \end_inset \begin_inset Text \begin_layout Standard richiama tutte le variabili di configurazioni (possono essere definite in maniera definitiva modificando il file ~/.exrc) \end_layout \end_inset \end_inset \end_layout \begin_layout Paragraph* \noindent \emph on Copia \emph default / \emph on Incolla \emph default \emph on multiplo \end_layout \begin_layout Standard \noindent \align left \begin_inset Tabular \begin_inset Text \begin_layout Standard Comando \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione \end_layout \end_inset \begin_inset Text \begin_layout Standard :rigax,rigaz yank m \end_layout \end_inset \begin_inset Text \begin_layout Standard assegna al buffer di memoria, chiamato m, il testo contenuto dalla rigax alla rigaz \end_layout \end_inset \begin_inset Text \begin_layout Standard :rigav put m \end_layout \end_inset \begin_inset Text \begin_layout Standard immette il contenuto del buffer, chiamato m, dopo la rigav \end_layout \end_inset \end_inset \end_layout \begin_layout Paragraph* \noindent \emph on Alias e Macro \end_layout \begin_layout Standard \noindent \align left \begin_inset Tabular \begin_inset Text \begin_layout Standard Comando \end_layout \end_inset \begin_inset Text \begin_layout Standard Descrizione \end_layout \end_inset \begin_inset Text \begin_layout Standard :ab \end_layout \end_inset \begin_inset Text \begin_layout Standard mostra gli alias presenti \end_layout \end_inset \begin_inset Text \begin_layout Standard :ab lista elenco_lunghissimo \end_layout \end_inset \begin_inset Text \begin_layout Standard crea un alias \begin_inset Quotes erd \end_inset lista \begin_inset Quotes erd \end_inset identificandolo con \begin_inset Quotes erd \end_inset elenco_lunghissimo \begin_inset Quotes erd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Standard :unab lista \end_layout \end_inset \begin_inset Text \begin_layout Standard rimuove l'alias \begin_inset Quotes erd \end_inset lista \begin_inset Quotes erd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Standard :map \end_layout \end_inset \begin_inset Text \begin_layout Standard elenca le macro con la sequenza associata \end_layout \end_inset \begin_inset Text \begin_layout Standard :map x yz \end_layout \end_inset \begin_inset Text \begin_layout Standard crea una macro x assegnandole una sequenza yz di comandi \end_layout \end_inset \begin_inset Text \begin_layout Standard :unmap x \end_layout \end_inset \begin_inset Text \begin_layout Standard rimuove la macro x \end_layout \end_inset \end_inset \end_layout \begin_layout Standard \noindent \align left Note: se viene utilizzato ! con map ( :map! ) viene attivata la modalita' inserimento \end_layout \end_body \end_document