vi micro-manuale interattivo per nuovi utenti ................................................................................ Per apprendere vi QUI e ORA, sei vivamente incoraggiato ad aprire questo file con vi (minuscolo) digitando ESATTAMENTE, al prompt dei comandi: vi -Readonly vi-muman.txt ove: il -Readonly (R maiuscolo) e' l'opzione di sola lettura che ti impedira' di modificare questo file; vi-muman.txt e' solo il nome di questo file. ^^^^^^^^^^^^^^^ MEMORIZZA O SCRIVI DA QUALCHE PARTE! ^^^^^^^^^^^^^^^ PER USCIRE da vi premi uno dopo l'altro i tasti [ESC] :q [ENTER] ove: il tasto [ESC] e' quello in alto a sinistra (sulla tastiera!) ed [ENTER] e' il tasto INVIO. Dopo aver premuto tali tasti, ricordati di sollevare il dito dai medesimi. Prima di premere [ENTER] vedrai circa questo :q Questo comando (quit) apparira' nell'ultima riga in basso. Se per qualche misterioso motivo accadono fenomeni inaspettati allora premi [ESC] :q! [ENTER] Uscirai (quit!) dal file senza fare danni. Poi potrai riaprirlo. E questa volta stai attento a non premere tasti a vanvera sulla tastiera. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Per andare AVANTI di 1 pagina: [CTRL] f (tieni premuto [CTRL] e premi f) Per andare INDIETRO di 1 pagina: [CTRL] b (f sta per Forward, b per Backward) (continua) Bravo! Esercizi a - torna alle pagine precedenti e poi torna qui b - esci da questo manuale (ricordi come si fa? Se no: torna su e studia!) e riapri questo file con vi, non dimenticando l'opzione di sola lettura: se non ti ricordi come si fa, torna alla pagina iniziale e memorizza (meglio nella tua testa che su un foglio) c - continua a fare gli esercizi a, b finche' non ti senti sicuro. AVVERTENZA 1: in questo manuale ci sono parecchi esercizi: per evitare di fare danni e' proprio un'ottima idea usare l'opzione di sola lettura di vi. AVVERTENZA 2: l'idea di non fare gli esercizi invece e' proprio pessima ________________________________________________________________________________ INDICE ________________________________________________________________________________ 0 INTRODUZIONE 0.0 COSA e' vi? 0.1 PERCHE' imparare vi? 0.2 COME imparare vi? 1 PER INIZIARE 1.0 Primo passo: MODALITA' COMANDI e MODALITA' INSERIMENTO 1.1 I comandi di base 1.2 Per muoversi 1.3 E ora all'opera! 1.4 Ricerca di stringhe 1.5 L'uso di set 2 INFORMAZIONI SUPPLEMENTARI 2.0 Altri comandi 2.1 Sostituzione di stringhe 2.2 Scrittura di files 2.3 Lettura di altri files 2.4 Aprire diversi files contemporaneamente 2.5 Aprire un file in sola lettura 2.6 Comandi di shell 2.7 A me una shell! 2.8 Le macro ________________________________________________________________________________ *** 0 INTRODUZIONE -- 0.0 COSA e' vi ? vi (in minuscolo) e' un editor di testi, ovvero un programma che consente di scrivere files di testo. -- 0.1 PERCHE' imparare vi ? Perche' dovrei fare la fatica di imparare un editor di testi misterioso ed enigmatico come vi quando ci sono tanti editors comodi e facili? Per alcuni ottimi motivi: a - vi e' l'unico editor che si ha la certezza di trovare su TUTTE le macchine UNIX/Linux; b - vi consente di manipolare files enormi; c - vi e' eccezionalmente potente; d - vi permette di fare operazioni complesse in modo estremamente rapido ed efficiente; -- 0.2 COME imparare vi ? Gradualmente. E' un grave errore cercare di imparare tutto e subito prima di mettersi all'opera: la quantita' di cose che si possono fare con vi e' enorme e puo' essere scoraggiante ad un primo impatto, ma in realta' si puo' iniziare a lavorare con un numero molto limitato di comandi. Molto spesso un comando apparentemente misterioso di una sola lettera si ricorda meglio osservando che e' la prima lettera di una parola inglese piu' significativa. *** 1 PER INIZIARE -- 1.0 Primo passo: MODALITA' COMANDI e MODALITA' INSERIMENTO E' essenziale che tu ti renda conto presto che vi funziona con due modalita': la MODALITA' COMANDI e la MODALITA' INSERIMENTO: * in Modalita' Comandi puoi digitare i comandi per dire a vi cosa vuoi fare; * in Modalita' Inserimento puoi inserire testo nel file che stai editando; D- "Nei primi esercizi che ho fatto (uscire da vi, andare su e giu' per il file) davo comandi?" R- Si' D- "Ma perche' tutta questa confusione, Modalita' Comandi, Inserimento, boh?" R- Perche' nonostante le apparenze tutto cio' facilita le cose, specie se lavori in un ambiente 'solo caratteri'. D- "Come faccio a passare dalla Modalita' Comandi alla Modalita' Inserimento e viceversa?" R- Per passare dalla Modalita' Inserimento alla Modalita' Comandi e' sufficiente premere il tasto [ESC]. Per fare l'opposto e' sufficiente leggere il paragrafo 1.1 -- 1.1 I comandi di base NOTA 0: in generale, per digitare COMANDI devi essere in MODALITA' COMANDI (da cui il nome). Nel dubbio premi il tasto [ESC]. I comandi che seguono ti portano dalla Modalita' Comandi alla Modalita' Inserimento (quindi potrai inserire testo). iTesto (insert) inserisce la stringa "Testo" dalla posizione del cursore aTesto (append) aggiunge la stringa "Testo" oTesto (open) apre una nuova riga in basso e scrive Testo OTesto (open) apre una nuova riga in alto e scrive Testo NOTA 1: vi fa distinzioni tra lettere minuscole e maiuscole. NOTA 2: quando hai finito di scrivere il tuo Testo devi comunicarlo a vi, altrimenti rimarrai in eterno in modalita' inserimento. D- "E come faccio ad uscire dalla modalita' inserimento?" R- Premi il tasto [ESC] D- "Questo mi portera' alla modalita' comandi?" R- Esatto. Non ci sono altre modalita': o comandi, o inserimento. NOTA 3: I comandi preceduti da ":" vengono scritti nell'ultima riga in basso, e richiedono che tu prema il tasto [ENTER]. Gli altri non vengono scritti. Anche questi comandi sono di uso frequente (rimarrai in modalita' comandi): J (join) unisce la riga corrente con la successiva x cancella il carattere su cui e' il cursore. u (undo) annulla l'ultima modifica... . ...la fa di nuovo :w (write) salva il file corrente (quello che stai editando) :w unaltrofile salva il file nel nuovo file "unaltrofile" :e unaltrofile edita il file "unaltrofile" :q (quit) esce e basta; se non hai salvato delle modifiche ti chiede se vuoi farlo :q! (quit!) esce senza salvare le ultime modifiche :wq (write quit) salva ed esce :7 porta il cursore all'inizio della riga 7 G porta il cursore alla fine del file dd (delete) cancella tutta la riga corrente Esercizi a - vai alla riga 99, poi alla riga 199 b - vai alla fine di questo file usando il comando G (vedi cose bizzarre?) poi torna alla riga 199 c - (altri esercizi li trovi alla fine del paragrafo 1.3, ma e' meglio leggere prima 1.2) -- 1.2 Per muoversi D- "Come faccio a scrivere il testo dove voglio io e non dove vuole lui?" R- Muovendo il cursore all'interno del file. I tasti da usare, in modalita' COMANDI, sono: h sposta il cursore a sinistra... j ...in basso... k ...in alto... l ...a destra Sei invitato a fare degli esperimenti. Naturalmente se usi questi comandi in modalita' inserimento vedrai il tuo file riempirsi di lettere h, j, k, l... D- "Ma questi comandi non me li ricordero' mai!" R- Calma. Poiche' sento che stai per avere la tentazione di usare le quattro freccine sulla tastiera (magari funzionano, chi lo sa!) ti voglio dire perche' non e' una buona idea fidarsi delle freccine: non sempre funzionano, e questo puo' diventare imbarazzante. D- "Allora me li scrivo..." R- Un momento. Osserva che i tasti hjkl sono allineati sulla tastiera. Inoltre, la "j" ha indubbiamente una propaggine verso il BASSO, cosa che puo' aiutarti a ricordare la sua funzione; "k" si protende verso l'ALTO; infine la "h" e' la lettera piu' a SINISTRA del gruppo (guarda la tastiera, non me) e la "l" quella piu' a DESTRA. Per muovere il cursore velocemente ci sono anche altri comandi: w (da word) muove il cursore all'inizio della parola successiva b (backward) muove il cursore all'inizio della parola precedente e (end) muove il cursore alla fine della parola (successiva) Esercizi: a - collauda tutto: w, b, e, h, j, k, l -- 1.3 E ora all'opera! Ora, comincia a giocare un po' con vi! Tieni sempre presente in quale modalita' sei: nel dubbio, il tasto [ESC] ti riportera' alla modalita' comandi. Esercizi a - salva il contenuto di questo file nel nuovo file rusco.txt b - salva il contenuto di questo file anche nel nuovo file pattume.txt c - edita il file rusco.txt uscendo prima da questo file: dal prompt dei comandi usa vi rusco.txt ora (non avendo usato l'opzione -Readonly di sola lettura) hai pieni poteri sul file rusco.txt: fanne scempio con gli esercizi che seguono d - prova a creare nuove righe (in alto/in basso rispetto al cursore) e - aggiungi testo usando i comandi "a" ed "i": qual e' la differenza? f - cosa succede se, in modalita' INSERIMENTO, premi il tasto [ENTER]? g - salva, ogni tanto, il file rusco.txt h - muovi il cursore dove vuoi tu usando i tasti h, j, k, l: funzionano? (non avrai dimenticato che devi usarli SOLO in modalita' comandi? Nel caso, premi [ESC]) i - edita il file pattume.txt SENZA prima uscire da rusco.txt: usa il comando :e pattume.txt e rovinalo coi seguenti esperimenti j - unisci due righe (con che comando?) k - supponiamo che tu abbia unito le due righe sbagliate: annulla la modifica l - cosa succede se annulli l'annullamento di una modifica? m - cancella uno o piu' caratteri n - aggiungi due nuove righe di testo o - prova a far rifare a vi l'esercizio "m", usando il comando "." p - fai prove di cancellazione di righe usando il comando "dd" q - continua a giocare (su uno dei files rusco.txt o pattume.txt) finche' non ti senti ragionevolmente sicuro Bene, che ne dici ora di creare un nuovo file tutto tuo? Procurati un prompt dei comandi in un'altra finestra (se puoi, altrimenti esci prima da questo file) e digita: vi nomefile (benche' possibile, e' una pessima idea editare lo stesso file in due posti diversi: quindi nomefile dovrebbe essere diverso dal nome di QUESTO file) Osserva che NON HAI aperto il file con l'opzione "-Readonly" (Sola lettura). Se il file esisteva gia' (spero che, in questo caso, non te ne importi granche') ora lo puoi distruggere coi tuoi esperimenti. Se il file e' del tutto nuovo (scelta consigliata) noterai... D- "Cosa sono tutti questi segni all'inizio di ogni riga, che ho gia' visto da qualche parte?" R- ...appunto, sono delle 'tilde', e indicano la fine del tuo file. Le hai viste anche alla fine di questo file. Se il tuo file e' vuoto vedrai solo delle tilde, circa cosi': ~ ~ ~ ~ Esercizi a - ripeti, a piacere, qualcuno degli esercizi a-q poco sopra, in particolare: b - inserisci il testo che vuoi tu nel posto che vuoi tu c - a proposito: i comandi h, j, k, l funzionano anche dove ci sono solo le "~"? (Non intendo le 4 "~" che vedi poco sopra, ma quelle che indicano realmente la fine del file) -- 1.4 Ricerca di stringhe Per cercare (verso il basso) la stringa "per exemplum" digita (ora!) il comando /per exemplum Anche questo comando compare nell'ultima riga in basso. Se cosi' non e', semplicemente, NON sei in modalita' comandi (quindi premi [ESC] per andarci). per trovare l'occorrenza successiva digita il comando n (next) per la precedente digita N Le ricerche verso l'alto sono identiche salvo che si usa ?per exemplum e il significato di n ed N sono invertiti. Esercizi a - trova tutte le stringhe 'per exemplum' di questo file usando il comando '/' e premendo varie volte 'n' ed 'N' b - ripeti l'esercizio "a" usando i comandi '?', 'n' ed 'N' Noterai presto che digitare /PER EXEMPLUM oppure /per eXemplum non e' la stessa cosa di /per exemplum Questa caratteristica di vi, che discende dal fatto che i sistemi UNIX fanno distinzioni tra caratteri maiuscoli e minuscoli, a prima vista puo' sembrare irritante, ma in realta' puo' tornare molto utile. Prova ora a digitare /per e.emplum Osserva che vengono trovate sia "per exemplum" che "per eXemplum" (e per la verita' anche "per eYemplum"), ma non "PER EXEMPLUM". Il punto vale quindi (nelle ricerche) come un carattere non definito. D- "E se voglio cercare esattamente la stringa 'per e.emplum'?" R- Prova con /per e\.emplum In generale ci sono alcuni caratteri speciali che vengono interpretati in modo particolare. Per farli considerare caratteri normali basta farli precedere da \ Ad esempio: anche l'asterisco (*) e' un carattere speciale; per cercare allora l'inizio di ogni capitolo, contrassegnato da '***', dovrai digitare /\*\*\* D- "Cosa succede se, per pigrizia, digito solo il comando che segue?" /\*\* R- Prova. Come vedi la pigrizia viene punita. Ma poiche' anch'io sono pigro ti suggerisco di provare questo: /\*\* D- "Ma e' uguale!" R- Nossignore, e' stato aggiunto uno spazio dopo l'ultimo asterisco. Prova (per tornare qui cerca la stringa 'Nossignore'). Questo ci da' modo di dire che con vi puoi vedere i caratteri nascosti: se l'argomento ti interessa ora, cerca la stringa 'i set'. D- "Anche '\' e' un carattere speciale?" R- Si'. Prova a cercare la stringa 'per e\.emplum'. Prima di impazzire digita /per e\\\.emplum Anche '/' e' un carattere speciale: per cercare una '/' devi digitare /\/ Esercizi a - trova le stringhe '\*\*\*' e 'per e\\\.emplum') b - trova l'inizio di ogni paragrafo, contrassegnato dalla stringa '--', ma SENZA passare da questo esercizio. E' '-' carattere speciale?) c - cerca la stringa "--" dell'esercizio precedente SENZA passare da ogni paragrafo ne' da questo esercizio. E' l'apice (') carattere speciale? E le virgolette (")? d - cosa succede se effettuo le seguenti ricerche? (Prova!) /... .X...... /... .X /.....X l'ultima ricerca e' proprio diversa dalla penultima? e - cerca la stringa '../images' senza passare per './somedir/images' -- 1.5 L'uso di set Per vedere i caratteri nascosti prova (dalla modalita' comandi!) il comando :set list I $ che sono comparsi ti mostrano la fine di ogni riga e ti svelano gli eventuali spazi vuoti (come per esempio alla fine di questa riga). Per togliere di mezzo tutti questi $ digita :set nolist Per vedere/[non vedere] le righe numerate :set number :set nonumber Per vedere/[non vedere] scritto in basso a destra in quale modalita' sei: :set showmode :set noshowmode Ma poiche' vi non e' famoso per la prolissita' dei suoi comandi ci sono alternative (di uguale significato) piu' sintetiche: :set li :set noli :set nu :set nonu :set smd :set nosmd Esercizi a - Prova a vedere cosa succede digitando: :set nu li smd :set nu noli smd *** 2 INFORMAZIONI SUPPLEMENTARI -- 2.0 Altri comandi I comandi che seguono non sono realmente vitali: li imparerai poco per volta, ma e' bene sapere che esistono. ITesto (insert) inserisce la stringa "Testo" all'inizio della riga corrente ATesto (append) aggiunge la stringa "Testo" alla fine della riga corrente dw (delete word) cancella la parola corrente, a partire dalla posizione attuale del cursore (rimani in mod. comandi) cw (change word) cambia la parola corrente, a partire dalla posizione attuale del cursore (ti porta alla mod. inserimento) 5dw cancella 5 parole 5cw cambia 5 parole s (substitute) sostituisce il carattere su cui e' il cursore 5s sostituisce 5 caratteri a partire dal cursore x cancella il carattere su cui e' il cursore 5x cancella 5 caratteri a partire dal cursore dd (delete) cancella tutta la riga corrente 5dd cancella 5 righe, a partire da quella corrente :18,22d cancella le 5 righe dalla 18 alla 22 (comprese) D (Delete) cancella la parte restante della riga corrente a partire dalla posizione attuale del cursore cc (change) cambia tutta la riga corrente 5cc cambia 5 righe, a partire da quella corrente :18,22c cambia le 5 righe dalla 18 alla 22 (comprese) C (Change) cambia la parte restante della riga corrente ZZ salva (se c'e' qualche modifica da salvare) ed esce. yy (yanked) memorizza in un buffer la riga corrente... 5yy ...o 5 righe a partire da quella corrente NOTA: quando cancelli qualcosa, questo qualcosa finisce in un buffer, per eventuali usi come il seguente: p (print) scrive le righe o le parole contenute nel buffer 0 (zero) porta il cursore all'inizio della riga $ porta il cursore alla fine della riga :$ porta il cursore alla fine del file (equivale a G) ^ porta il cursore al primo carattere non blank della riga corrente 7| porta il cursore sul settimo carattere della riga corrente H (high) porta il cursore alla prima riga della pagina corrente L (low) porta il cursore all'ultima riga della pagina corrente M (middle) porta il cursore a meta' della pagina corrente [CTRL] u (up) va su di mezza pagina [CTRL] d (down) va giu' di mezza pagina [CTRL] y va su di una riga mantenendo il cursore dov'e' [CTRL] e va giu' di una riga mantenendo il cursore dov'e' [CTRL] g fornisce informazioni sul file corrente [CTRL] l torna a mostrare la pagina corrente (refresh) fx (find) trova il successivo carattere "x" nella riga corrente ; trova il successivo carattere "x" nella riga corrente , trova il precedente carattere "x" nella riga corrente Fx (find) trova il precedente carattere "x" nella riga corrente ; trova il precedente carattere "x" nella riga corrente , trova il successivo carattere "x" nella riga corrente Esercizi a - verifica se funzionano i comandi seguenti (per tornare qui cerca la stringa "Esercizi") 0, $, :$, ^, 3|, H, L, M, b - collauda i comandi [CTRL] u, [CTRL] d, [CTRL] y, [CTRL] e, [CTRL] g, [CTRL] l c - posiziona il cursore alla riga precedente e trova tutte le "T" usando i comandi f ed F d - sei incoraggiato, se non ad impararli ora, a verificare almeno che funzionano anche gli altri comandi che consentono modifiche al file (per questi esperimenti usa un altro file, del genere rusco.txt) -- 2.1 Sostituzione di stringhe Per sostituire una "stringa nuova" ad una "stringa vecchia" si possono usare diversi comandi: :s/stringa vecchia/stringa nuova se ci sono due stringhe "stringa vecchia" sulla riga corrente sostituisce solo la prima :s/stringa vecchia/stringa nuova/g sostituisce tutte le stringhe "stringa vecchia" nella riga corrente NOTA: Nei comandi che seguono l'opzione /g e' facoltativa: se si omette verranno sostituite solo le prime stringhe "stringa vecchia" di ogni riga :1,9s/stringa vecchia/stringa nuova/g sostituisce tutte le stringhe "stringa vecchia" nelle righe da 1 a 9 :7,$s/stringa vecchia/stringa nuova/g sostituisce tutte le stringhe "stringa vecchia" dalla riga 7 alla fine del file :%s/stringa vecchia/stringa nuova/g sostituisce tutte le stringhe "stringa vecchia" nel file -- 2.2 Scrittura di files Sai gia' che se stai editando il file "primofile" con vi, :w salva eventuali modifiche al file corrente "primofile" :w altrofile scrive il contenuto di "primofile" sul file "altrofile" Puoi fare anche altro: :3,9w altrofile scrive le righe dalla 3 alla 9 (comprese) del file corrente nel file "altrofile" Se poi "altrofile" esiste gia' :w! altrofile sovrascrive sul file "altrofile" :w>>altrofile aggiunge il file corrente alla fine di "altrofile" :3,9w>>altrofile aggiunge le righe dalla 3 alla 9 (comprese) del file corrente alla fine di "altrofile" :e altrofile edita il file "altrofile" -- 2.3 Lettura di altri files Se hai necessita' di aggiungere un file ad un altro in un punto ben preciso puoi usare il comando :r uncertofile aggiunge il file "uncertofile" al file corrente, a partire dalla riga successiva a quella del cursore (il file "uncertofile" continua ad esistere) Esercizi a - prova a vedere se e' vero: procurati un paio di files del tipo pattume.txt e fai la prova -- 2.4 Aprire diversi files contemporaneamente Con vi puoi editare diversi files nello stesso tempo, con vi primofile secondofile terzofile [...] vi ti fara' editare i files in successione: prima vedrai "primofile", poi, col comando :n (next) passerai al secondo e nello stesso modo al terzo. Per passare al file precedente invece che al successivo digita :N NOTA: e' facile da ricordare! E' molto simile alla ricerca di stringhe, dove pero' non c'era il ":" D- "Perche' dovrebbe interessarmi la possibilita' di editare diversi files?" R- Perche' puo' darsi che ti succeda di dover fare la stessa operazione su molti files diversi (ricerche, modifiche, sostituzioni di stringhe...) Usando questa potenzialita' di vi puoi fare tutto cio' molto velocemente. -- 2.5 Aprire un file in sola lettura Sai gia' che puoi usare l'opzione -Readonly (sola lettura). Cioe' vi -Readonly nomefile Questa e' la versione prolissa. Puoi anche usare la versione sintetica: vi -R nomefile Anche con l'opzione -R puoi aprire diversi files, con vi -R primofile secondofile terzofile [...] -- 2.6 Comandi di shell D- "Ma cos'e' una shell?" R - E' l'interprete dei comandi. Ovvero il portavoce delle tue esigenze presso il sistema operativo. Per dare al sistema operativo un comando qualsiasi, devi farlo precedere da ":!". Ad esempio, se stai usando un sistema UNIX e vuoi digitare il comando "ls" SENZA uscire da vi, digita (in modalita' comandi) :!ls (Ovviamente se non stai usando un sistema UNIX dovrai usare i comandi del TUO sistema operativo!) Esecizi: a - prova a dare tutti i comandi che vuoi (ma non cancellare questo file!) SENZA uscire da vi b - prova a vedere cosa succede a concatenare comandi (con "|"), ad esempio (su sistemi UNIX) :!ps -ef | grep vi c - se il tuo sistema accetta che vengano dati diversi comandi insieme prova a darli dall'interno di vi, ad esempio digitando (su sistemi UNIX) :!pwd; ls -l; ps -ef | grep vi d - ti sei sbagliato! Purtroppo ti e' caduto un dito sul tasto [ENTER] ed e' scomparso l'output del comando precedente! Ripeti! Suggerimento: usa :!! D- "Posso fare da vi tutto cio' che potrei fare al prompt dei comandi?" R- Si' -- 2.7 A me una shell! Per aprire una shell mentre stai editando un file con vi e' sufficiente (in modalita' comandi) digitare il comando :sh Per tornare a vi basta chiudere la shell (exit o CTRL+D). Come per magia riappare il file che stavi editando! Non aver paura: prova! D- "Cosa me ne faccio di una shell?" R- Puoi dare tutti i comandi propri del tuo sistema operativo. Ad esempio puoi editare il nuovo file "unaltrofile" con: vi unaltrofile Naturalmente ora puoi aprire un'altra shell in cui potrai editare un ulteriore file "terzofile" con: vi terzofile in cui potrai aprire un'altra shell, etc. etc., fino a che non diventi pazzo. Ma forse per adesso e' meglio non esagerare. -- 2.8 Le macro Hai mai provato, col tuo editor abituale, ad eliminare l'ultimo carattere di ogni riga? (magari in un programma di 4000 righe di codice...) Con vi cio' (e molto altro!) e' possibile farlo rapidamente usando le macro. Purtroppo l'uso delle macro va ben al di la' degli scopi di questo manuale: se provi l'irrefrenabile desiderio di saperne di piu', allora ti ho definitivamente convertito a vi e puoi approfondire le tue conoscenze da solo. ________________________________________________________________________________ La diffusione di questo manuale e' non solo consentita ma incoraggiata. Copyright 1999 - Massimo Pilolli maxpilolli@yahoo.com