1159 lines
54 KiB
HTML
1159 lines
54 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="it">
|
||
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=Firefox">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<link rel=" stylesheet" href="./style.css" type="text/css" media="screen">
|
||
<link rel="icon" type="image/x-icon" href="./Icon/favicon.svg">
|
||
<!--Favicon-->
|
||
<title>Breve guida a VIM</title>
|
||
</head>
|
||
|
||
<body>
|
||
<div>
|
||
|
||
<!--NAVBAR + LOGO-->
|
||
<div class="spacer"></div>
|
||
|
||
<div class="title">
|
||
<h2>#BeOpen</h2>
|
||
<p>Respect your Freedom</p>
|
||
<div class="dropdown" style="float:right;">
|
||
<button class="dropbtn">Menù</button>
|
||
<div class="dropdown-content">
|
||
<a href="./index.html">cd ~</a>
|
||
<a href="./index.html#manifesto">Manifesto</a>
|
||
<a href="./articoli.html">Articoli</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!--MENÙ-->
|
||
|
||
<nav class="menu">
|
||
<ul>
|
||
<li><a href="./index.html">cd ~</a></li>
|
||
<li><a href="./index.html#manifesto">Manifesto</a></li>
|
||
<li><a href="./articoli.html">Articoli</a></li>
|
||
</ul>
|
||
</nav>
|
||
|
||
|
||
<div class="container_img">
|
||
<img src="./Img/Guida_vim/vim.jpg" alt="Vim text editor" class="max_img" />
|
||
</div>
|
||
|
||
<!--ARTICOLO PRINCIPALE-->
|
||
|
||
<h1 class="titolo_apertura">#Breve guida a VIM</h1>
|
||
|
||
<div class="articol">
|
||
<div class="piccihud">
|
||
<p>
|
||
<img src="./Icon/user.svg" alt="">PicciHud
|
||
<img src="./Icon/calendar.svg" alt="">13-05-2022
|
||
</p>
|
||
</div>
|
||
<p>Non importa se sei un amministratore di sistema o uno sviluppatore di software, se usi il terminale in
|
||
una distribuzione GNU/Linux, potrà capitare che dovrai utilizzare un editor da riga di comando.</p>
|
||
<p>Sono disponibili diversi <em>editor di testo da riga di comando</em> e sei libero di usarne uno
|
||
qualsiasi. Vim è
|
||
uno degli editor più potenti popolari, installato su qualsiasi distribuzione GNU/Linux. Questo è il
|
||
motivo per cui
|
||
imparare le basi di Vim ti aiuterà molto.</p>
|
||
<p>Ora, questa non è una guida completa per renderti un esperto di Vim. È una guida destinata a fornirti gli
|
||
strumenti minimi necessari per sopravvivere in Vim.</p>
|
||
<p>Se non fosse pre-installato nella propria distribuzione GNU/Linux, basta aprire un terminale e, a
|
||
seconda, digitare il comando specifico per la distro o derivata:</p>
|
||
|
||
<div class="container_img">
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th>Fedora</th>
|
||
<th>Debian</th>
|
||
<th>Arch</th>
|
||
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme"><span class="highlightme">sudo dnf -y install vim</span></td>
|
||
<td><span class="highlightme"><span class="highlightme">sudo apt -y install vim</span></td>
|
||
<td><span class="highlightme"><span class="highlightme">sudo pacman -S vim</span></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<p><em>Vim</em>, o Vi IMproved, è un editor di testo libero e multipiattaforma, nato per fornire una
|
||
versione migliorata di Vi.</p>
|
||
<p>La sua prima versione è stata scritta nel 1991 da Bram Moolenaar. Attualmente è molto diffuso tra
|
||
programmatori ed utenti di sistemi operativi unix-like.</p>
|
||
<p>Da Vi mantiene la caratteristica di essere <em>modale</em>, ovvero di avere modalità diverse nelle quali
|
||
i normali caratteri della tastiera hanno significato di inserimento testo o di comandi. In questo modo,
|
||
è
|
||
possibile usarlo senza far uso del mouse, permettendo una velocità maggiore di scrittura, a prezzo di
|
||
maggiore difficoltà di apprendimento da parte di nuovi utenti. La tastiera non è così solo uno strumento
|
||
per
|
||
digitare testo, ma anche uno strumento per impartire comandi.</p>
|
||
<p>Vim ha quindi tre modalità:</p>
|
||
|
||
<p>- <em>Command mode</em>: quando si avvia Vim, ci si trova in modalità di comando (detta anche
|
||
<em>normal mode</em>). In questa
|
||
modalità è possibile spostarsi sullo schermo, eliminare e copiare del testo, ma non possibile scrivere
|
||
testo;
|
||
</p>
|
||
<p>- <em>Insert mode</em>: per inserire del testo in un file, esiste una modalità di inserimento dedicata,
|
||
chiamata appunto insert mode;</p>
|
||
<p>- <em>Visual mode</em>: permette di utilizzare i tasti freccia per selezionare il testo su più righe
|
||
(invece di lavorare direttamente su parole e righe in base alla posizione del cursore, come nella insert
|
||
mode).</p>
|
||
|
||
<p>Uno dei vantaggi di avere una modalità comando distinta dall'inserimento del testo vero e proprio
|
||
risiede nel fatto che più operazioni di modifica possono essere fatte mediante una sola riga della
|
||
tastiera senza dover premere contemporaneamente i tasti Alt, Ctrl o altri modificatori, cosa che riduce
|
||
il numero
|
||
di tasti da premere.</p>
|
||
|
||
<div class="spacer"></div>
|
||
|
||
<h2>Avviare Vim da terminale</h2>
|
||
<p>Aprire un terminale e digitare il seguente comando:</p>
|
||
<p><span class="highlightme">vim</span></p>
|
||
<p>È possibile aprire direttamente un file tramite Vim:</p>
|
||
<p><span class="highlightme">vim {file}</span></p>
|
||
|
||
<div class="spacer"></div>
|
||
|
||
<h2>Manuale di Vim</h2>
|
||
|
||
<p>Vim è un editor ricco di funzionalità, quindi ricordarle tutte è molto difficile, almeno inizialmente.
|
||
Ma non c'è motivo di preoccuparsi: si può sempre chiedere aiuto. Fortunatamente questo aiuto è fornito
|
||
da Vim stesso.</p>
|
||
|
||
<p>Il manuale di aiuto viene fornito con l'editor stesso ed è davvero completo. Per accedere alla guida,
|
||
eseguire il comando seguente:</p>
|
||
|
||
<p><span class="highlightme">:help</span></p>
|
||
|
||
<div class="spacer"></div>
|
||
|
||
<h2>Comandi base</h2>
|
||
<p>Vediamo ora alcuni comandi di base per spostarsi tra le varie modalità dell'editor.</p>
|
||
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme"><span class="highlightme">I</span></td>
|
||
<td>Entrare nella Insert mode</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme"><span class="highlightme">ESC</span></td>
|
||
<td>Uscire da qualsiasi modalità</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme"><span class="highlightme">v</span></td>
|
||
<td>Entrare nella Visual mode</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:</span></td>
|
||
<td>Entrare nella Command mode</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Entrare nella modalità inserimento</h2>
|
||
<p>Ci sono diversi modi per entrare in modalità inserimento. Elenchiamo quelli principali.</p>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">I</span></td>
|
||
<td>Modalità inserimento, porta il cursore ad inizio riga</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">a</span></td>
|
||
<td>Modalità inserimento dopo l'ultima lettera, pronto per scrivere</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">A</span></td>
|
||
<td>Modalità inserimento, porta il cursore alla fine della riga</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">o</span></td>
|
||
<td>Modalità inserimento, crea una nuova riga dopo la riga corrente</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">O</span></td>
|
||
<td>Modalità inserimento, crea una nuova riga prima della riga corrente</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Muoversi nella normal mode</h2>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">h</span></td>
|
||
<td>Spostare il cursore verso sinistra</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">j</span></td>
|
||
<td>Spostare il cursore verso il basso</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">k</span></td>
|
||
<td>Spostare il cursore verso l'alto</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">l</span></td>
|
||
<td>Spostare il cursore verso destra</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">SHIFT+G</span></td>
|
||
<td>Sposta il cursore alla fine del file</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">]]</span></td>
|
||
<td>Sposta il cursore alla fine del file</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">gg</span></td>
|
||
<td>Sposta il cursore all'inizio del file</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">[[</span></td>
|
||
<td>Sposta il cursore all'inizio del file</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">w</span></td>
|
||
<td>Sposta il cursore alla parola successiva</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">b (before)</span></td>
|
||
<td>Sposta il cursore alla parola precedente</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">e</span></td>
|
||
<td>(end) Sposta il cursore al termine della parola successiva</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">$</span></td>
|
||
<td>Sposta il cursore a fine riga</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">0</span></td>
|
||
<td>Sposta il cursore a inizio riga</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">^</span></td>
|
||
<td>Sposta il cursore a inizio riga, senza contare eventuali spazi</span>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">(</span></td>
|
||
<td>Sposta il cursore all'inizio della frase</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">)</span></td>
|
||
<td>Sposta il cursore alla fine della frase</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">{</span></td>
|
||
<td>Sposta il cursore all'inizio del paragrafo</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">}</span></td>
|
||
<td>Sposta il cursore alla fine del paragrafo</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">H</span></td>
|
||
<td>Sposta il cursore alla prima riga del viewport</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">M</span></td>
|
||
<td>Sposta il cursore alla metà del viewport</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">L</span></td>
|
||
<td>Sposta il cursore alla fine del viewport</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">nG</span></td>
|
||
<td>Sposta il cursore alla n-esima riga</span></td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">nw</span></td>
|
||
<td>Sposta il cursore alla n-esima parola successiva</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">e</span></td>
|
||
<td>Sposta il cursore al termine di una parola</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">b</span></td>
|
||
<td>Sposta il cursore all’inizio della parola</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:nriga</span></td>
|
||
<td>Sposta il cursore alla riga indicata</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">^o</span></td>
|
||
<td>Sposta il cursore alla posizione precedente</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">^i</span></td>
|
||
<td>Sposta il cursore alla posizione successiva (rispetto alla precedente)</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Salvataggio e uscita</h2>
|
||
<p>Ecco la lista dei comandi base per salvare il documento ed uscire da Vim.</p>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">:w</span></td>
|
||
<td>Salva il file</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:q!</span></td>
|
||
<td>Esce da Vim, ma senza salvare il file</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:wq</span></td>
|
||
<td>Salva il file ed esce da Vim</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Ricerca di testo</h2>
|
||
<p>Durante la scrittura, ricercare del testo è fondamentale. In Vim può essere fatto molto semplicemente.
|
||
</p>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">/{parola}</span></td>
|
||
<td>Spostare il cursore alla prima occorrenza della parola</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">?{parola}</span></td>
|
||
<td>Spostare il cursore all'ultima occorrenza della parola</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">f{lettera}</span></td>
|
||
<td>Spostare il cursore sulla lettera ricercata nella riga</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">t{lettera}</td>
|
||
<td>Spostare il cursore prima della lettera ricercata</span></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>Se fosse presente più di una corrispondenza, è possibile passare alla parola successiva premendo il tasto
|
||
<span class="highlightme">n</span> oppure alla precedente premendo il tasto <span class="highlightme">N</span>.
|
||
</p>
|
||
<p>Suggerimento: l'opzione <spa class="highlightme">\c</spa> esegue una ricerca senza distinzione tra
|
||
maiuscole e minuscole.</p>
|
||
<p>Esempio: <span class="highlightme">/\cLa_mia_ricerca</span></p>
|
||
|
||
<div class="spacer"></div>
|
||
<h2>Cerca e sostituisci</h2>
|
||
Molte volte, dopo aver ricercato del testo, è utile sostituire le occorrenze corrispondenti.
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">:%s/foo/bar/g</span></td>
|
||
<td>Sostituisce tutte le ricorrenze di 'foo' con 'bar'. L'opzione 'g' alla fine è responsabile
|
||
della sostituzione di tutte le corrispondenze trovate. In caso contrario, verrebbe
|
||
sostituita solo
|
||
la prima corrispondenza</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:s/foo/bar/g</span></td>
|
||
<td>Eseguirà esattamente la stessa funzione di cui sopra, ma solo nella riga corrente
|
||
anziché nell'intero file</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:%s/foo/bar/gci</span></td>
|
||
<td>Per impostazione predefinita, la ricerca fa distinzione tra maiuscole e minuscole. Per
|
||
non fare distinzione, si può usare il flag 'i' insieme a 'g'. Con l'opzione 'c' viene
|
||
richiesta la conferma, al fine di evitare sostituzioni indesiderate</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>Con l'opzione <em>conferma</em>, verranno presentate la seguenti opzioni:</p>
|
||
|
||
<p><span class="trattino">- </span>y: SÌ, sostituisci questa corrispondenza;</p>
|
||
<p><span class="trattino">- </span>n: NO, non sostituire questa corrispondenza e passa a quella successiva;
|
||
</p>
|
||
<p><span class="trattino">- </span>a: Sostituisci TUTTE le corrispondenze;</p>
|
||
<p><span class="trattino">- </span>q: ESCI senza sostituire alcuna corrispondenza;</p>
|
||
<p><span class="trattino">- </span>l: Sostituisci questa corrispondenza ed esci, come se fosse l'ULTIMA
|
||
corrispondenza;</p>
|
||
<p><span class="trattino">- </span>^E: Scorri lo schermo verso l'alto;</p>
|
||
<p><span class="trattino">- </span>^Y: Scorri lo schermo verso il basso;</p>
|
||
|
||
<div class="spacer"></div>
|
||
<h2>Cancellazione</h2>
|
||
<p>In Vim, buona pratica è non cancellare il testo in modalità inserimento, come si farebbe con qualsiasi
|
||
editor, ma operare in Normal mode, sempre per aumentare la velocità di esecuzione.</p>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">u</span></td>
|
||
<td>Annulla la modifica</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">^r</span></td>
|
||
<td>Ripristino della modifica</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">x</span></td>
|
||
<td>Cancella il carattere singolo su cui si trova il cursore</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">X</span></td>
|
||
<td>Elimina il carattere prima della posizione corrente del cursore, come il tasto backspace
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">d</span></td>
|
||
<td>Cancella la parte di testo evidenziata</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">dw</span></td>
|
||
<td>Delete word, dalla posizione del cursore</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">daw</span></td>
|
||
<td>Delete a word. Cancella un'intera parola, indipendentemente dalla posizione del cursore
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">diw</span></td>
|
||
<td>Delete inner word. Cancella un'intera parola</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">cw</span></td>
|
||
<td>Change word (in automatico, cancella la parola ed entra in Insert mode)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">di"</span></td>
|
||
<td>Delete inner (dentro) "" o qualsiasi delimitatore venga specificato</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">ci"</span></td>
|
||
<td>Change inner "". Elimina il contenuto ed entra in Insert mode</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">dd</span></td>
|
||
<td>Cancella un'intera riga</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">D</span></td>
|
||
<td>Cancella un'intera riga dalla posizione del cursore</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">dit</span></td>
|
||
<td>Delete inner tag (come i tag html)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">cit</span></td>
|
||
<td>Change inner tag (ed entra in Insert Mode)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">das</span></td>
|
||
<td>Delete a sentence (cancella una frase intera)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">dap</span></td>
|
||
<td>Cancella un paragrafo intero</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">d0</span></td>
|
||
<td>Cancella dalla posizione corrente del cursore a inizio riga</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">d$</span></td>
|
||
<td>Cancella dalla posizione corrente del cursore a fine riga</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">dG</span></td>
|
||
<td>Cancella dalla posizione corrente del cursore fino alla fine del file</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">d/parola</span></td>
|
||
<td>Cancella dalla posizione del cursore alla parola</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Copia/incolla</h2>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">yy</span></td>
|
||
<td>Copia un'intera riga</td>
|
||
<tr>
|
||
<td><span class="highlightme">yw</span></td>
|
||
<td>Copia una parola</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">y$</span></td>
|
||
<td>Copia dalla posizione corrente del cursore fino alla fine della riga</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">yG</span></td>
|
||
<td>Copia dalla posizione corrente del cursore fino alla fine del file</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">p</span></td>
|
||
<td>Paste. Incolla il contenuto del buffer dopo la posizione del cursore (il contenuto
|
||
cancellato resta in memoria e può essere incollato)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">P</span></td>
|
||
<td>Incolla il contenuto del buffer dopo la posizione del cursore</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">r</span></td>
|
||
<td>Replace. Sostituisce una singola lettera, tornando immediatamente in Normal mode</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Trasformazione in maiuscolo (o minuscolo)</h2>
|
||
<p>Semplice e immediato è trasformare il testo in maiuscolo o minuscolo.</p>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">guw</span></td>
|
||
<td>Parola in minuscolo</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">gUw</span></td>
|
||
<td>Parola in maiuscolo</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">gUU</span></td>
|
||
<td>Tutta la riga in maiuscolo</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">guu</span></td>
|
||
<td>Tutta la riga in minuscolo</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Selezionare il testo in Visual mode</h2>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">v</span></td>
|
||
<td>Seleziona carattere per carattere</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">V</span></td>
|
||
<td>Seleziona un'intera riga</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">SHIFT+J</span></td>
|
||
<td>Unisce più righe selezionate</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Creazione di macro</h2>
|
||
In Vim è possibile registrare una sequenza di comandi e poi eseguirli in automatico!
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">q{lettera}</span></td>
|
||
<td>Ha inizio la registrazione della macro. Es.: <span class="highlightme">qa</span> - tutti i
|
||
comandi digitati successivamente saranno
|
||
registrati. Nell'esempio seguente, "a" è il nome della macro. In questo passaggio è
|
||
possibile eseguire qualsiasi azione di Vim.
|
||
Si possono vedere queste azioni eseguendo il comando: <span class="highlightme">:registers</span></td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">q</span></td>
|
||
<td>Termine della macro</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">@{lettera}</span></td>
|
||
<td>Viene eseguita la macro</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Criptare file txt</h2>
|
||
Non è solo possibile salvare un file, bensì pure criptarlo, per una maggior sicurezza.
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">vim -x file.txt</span></td>
|
||
<td>Da terminale, crea un file, specificando una password di cifratura</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:X</span></td>
|
||
<td>Cambiare la password. Se il campo viene lasciato vuoto, anche nella conferma, la
|
||
password viene cancellata e il file non è più cifrato</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:set cm=blowfish2</span></td>
|
||
<td>Livello di cifratura massima disponibile</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">set cm=blowfish2</span></td>
|
||
<td>Per rendere il massimo livello di cifratura come parametro di default, creare o
|
||
modificare il file.vimrc, all'interno della home directory, con la precedente istruzione
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Altri comandi utili</h2>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">no</span></td>
|
||
<td>Crea n righe contemporaneamente</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">CTRL+a</span></td>
|
||
<td>Aumenta di un'unità il primo numero di una riga (3^a -> aumenta di 3 unità il numero)
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">.</span></td>
|
||
<td>Ripete l'ultima azione eseguita (o comando)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:set number</span></td>
|
||
<td>Indicazione numero riga</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:set nonumber/number!</span></td>
|
||
<td>Numero riga non visibile</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">numero+comando</span></td>
|
||
<td>Il comando viene ripetuto n volte</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">>></span></td>
|
||
<td>Tabulazione a destra</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme"><<</span></td>
|
||
<td>Tabulazione a sinistra</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Eseguire comandi shell da Vim</h2>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">:!command</span></td>
|
||
<td>Esegue un singolo comando. Ad esempio: <span class="highlightme">:!pwd</span></td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:shell</span></td>
|
||
<td>Il comando darà accesso al terminale, dove si potranno eseguire più comandi. Digitare il
|
||
comando <span class="highlightme">exit</span> per tornare alla sessione di Vim</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
|
||
Il comando sopra ti darà accesso al terminale, dove puoi eseguire più comandi. Una volta che hai finito,
|
||
digita il comando exit che tornerà alla sessione di Vim.
|
||
|
||
<div class="spacer"></div>
|
||
|
||
<h2>Controllo ortografico in Vim</h2>
|
||
<p>La prima cosa da sapere è come attivare il controllo ortografico o <em>spellcheck</em>.</p>
|
||
<p>In command line, digitare:</p>
|
||
<p><span class="highlightme">:set spell spelllang=it</span></p>
|
||
<p>È possibile attivare più lingue contemporaneamente:</p>
|
||
<p><span class="highlightme">:set spell spelllang=it,en_US</span></p>
|
||
<p>In tal modo il sistema di correzione rileverà gli errori nella lingua italiana ed anche in quella
|
||
inglese (americana), non evidenziando come errate le parole in inglese.</p>
|
||
|
||
<div class="spacer"></div>
|
||
<h3>Attivare e disattivare il controllo ortografico</h3>
|
||
<p>Il controllo ortografico è comodo, ma a volte è piacevole poterlo disattivare ed attivare velocemente.
|
||
</p>
|
||
<p><span class="highligthme">:set spell</span></p>
|
||
<p>per attivare il controllo ortografico</p>
|
||
<p><span class="hightligthme">:set no spell</span></p>
|
||
<p>per disattivalo.</p>
|
||
<p>Nota a margine: in molti casi il modo per attivare o disattivare un comando in Vim è quello di
|
||
anteporre al comando stesso il termine chiave <span class="highlightme">no</span>.</p>
|
||
|
||
<div class="spacer"></div>
|
||
<h3>Correggere il testo in <em>Normal Mode</em></h3>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">[s</span></td>
|
||
<td>Sposta il cursore alla prima parola errata a sinistra</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">s]</span></td>
|
||
<td>Sposta il cursore alla prima parola errata a destra</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>Per parola errata Vim considera sia gli errori di scrittura (una parola che non viene trovata nel
|
||
vocabolario italiano di Vim) sia errori sintattici (che Vim visualizza in blu), come ad esempio una
|
||
parola che,
|
||
all’inizio di un nuovo periodo, non inizia con la maiuscola.</p>
|
||
<p>La variante di questo comando più specifica, permette di passare solo tra le parole sbagliate (quelle
|
||
che non vengono trovate nel vocabolario di Vim) è <span class="highlightme">[S</span> e <span class="highlightme">]S</span>.</p>
|
||
<p>Per correggere la parola errata basta digitare:</p>
|
||
<p><span class="highlightme">z=</span></p>
|
||
<p>Comparirà ora una schermata con le possibili parole corrette; a tali parole sarà anteposto un numero.
|
||
Sarà quindi sufficiente digitare il numero della parola corretta,
|
||
premere invio e Vim procederà a sostituirla.</p>
|
||
|
||
<div class="container_img">
|
||
<img src="./Img/Guida_vim/menu_errore_vim.png" alt="Vim text editor" style="margin:0 0 -30px 0;" />
|
||
</div>
|
||
|
||
<h3>Aggiungere parole al vocabolario di Vim</h3>
|
||
<p>Può capitare, e spesso capita, che una determinata parola, casomai specialistica della nostra materia,
|
||
venga visualizzata da Vim come errore perché non presente
|
||
nel vocabolario.</p>
|
||
<p>Nessun problema, possiamo inserire una parola nel nostro vocabolario, posizionandoci su di essa e
|
||
digitando
|
||
<span class="highlightme">zg</span>zg
|
||
</p>
|
||
<p>Se volete inserire velocemente una parola nel vocabolario:</p>
|
||
<p><span class="highlightme">:spe {parola da aggiungere}</span></p>
|
||
<p>Se volete che una parola risulti come non corretta basterà digitare:
|
||
<span class="highlightme">zw</span> (w sta per wrong, sbagliato).
|
||
</p>
|
||
<p>Se volete inserire velocemente una parola come errata:</p>
|
||
<p><span class="highlightme">:spellw {parola da aggiungere}</span></p>
|
||
|
||
<div class="spacer"></div>
|
||
<h3>Correggere il testo in <em>Insert mode</em></h3>
|
||
<p>Sulla parola errata digitare:</p>
|
||
<p><span class="highlightme">^X</span> quindi <span class="highlightme">s</span></p>
|
||
<p>Si aprirà un menù a finestra con le possibili parole corrette. Per scegliere dal menù a tendina usate la
|
||
combinazione di tasti <span class="highlightme">CTRL+N</span> (next) oppure <span class="highlightme">CTRL+P</span> (previous).</p>
|
||
|
||
<div class="container_img">
|
||
<img src="./Img/Guida_vim/menu_contestuale_correzione_errori.png" alt="Vim text editor" style="margin:0 0 -30px 0;" />
|
||
</div>
|
||
|
||
<h3>Auto-completamento</h3>
|
||
<p>Digitando <span class="highlightme">CTRL+X</span>, in insert mode, si accede a molto di più del sistema
|
||
di
|
||
correzione degli errori. È possibile procedere all'auto-completamento delle parole che si stanno
|
||
digitando.</p>
|
||
<p>Dopo aver digitato CTRL+X, invece di s è possibile digitare:</p>
|
||
|
||
<p><span class="trattino">- </span><span class="highlightme">CTRL+L</span>, per il completamento dell’intera
|
||
linea (completa con frasi simili
|
||
a quelle scritte precedentemente; utile se si è un programmatore);</p>
|
||
<p><span class="trattino">- </span><span class="highlightme">CTRL+N</span>, per il completamento con parole
|
||
del documento (utile soprattutto
|
||
per nomi o parole complesse che si usano abbondantemente nel file);</p>
|
||
<p><span class="trattino">- </span><span class="highlightme">CTRL+K</span>, per il completamento con parole
|
||
del dizionario.</p>
|
||
|
||
<div class="spacer"></div>
|
||
|
||
<h2>Lavorare con più cose contemporaneamente</h2>
|
||
<p>Vim è un editor molto potente. Supporta molte funzionalità avanzate per lavorare con più file, buffer e
|
||
finestre. In questa sezione, discuteremo i seguenti elementi:</p>
|
||
<p><span class="trattino">- </span>più file;</p>
|
||
<p><span class="trattino">- </span>buffer multipli;</p>
|
||
<p><span class="trattino">- </span>schede multiple;</p>
|
||
<p><span class="trattino">- </span>finestre multiple</p>
|
||
|
||
<div class="spacer"></div>
|
||
<h3>Lavorare su più file></h3>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">:e</span></td>
|
||
<td>Carica un nuovo file nel buffer per la modifica</span></td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:e tab</span></td>
|
||
<td>Elenca i file per la modifica dalla directory corrente</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h3>Buffer multipli</h3>
|
||
<p>Il <em>buffer</em> è la memoria temporanea usata da Vim per contenere il testo letto da un file. Una
|
||
volta terminata la modifica e salvato il file, allora il contenuto del buffer viene
|
||
trasferito nel file appropriato.</p>
|
||
<p>È possibile utilizzare i buffer per lavorare con più file.</p>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">:badd {file}</file></span></td>
|
||
<td>Aggiunge il file in un nuovo buffer</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:bN</span></td>
|
||
<td>Passa all'ennesimo buffer. Ad esempio, per passare al terzo buffer: b3</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:bnext</span></td>
|
||
<td>Passa al buffer successivo</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:bprevious</span></td>
|
||
<td>Passa al buffer precedente</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:buffers</span></td>
|
||
<td>Elenca tutti i buffer</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:blast</span></td>
|
||
<td>Passa all'ultimo buffer</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h3>Schede multiple</h3>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">:tabnew</file></span></td>
|
||
<td>Apre una nuova scheda</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:tabnew {file}</span></td>
|
||
<td>Apre un file in una nuova scheda</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:tabclose</span></td>
|
||
<td>Chiudi la scheda attuale</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:tabnext</span></td>
|
||
<td>Passa alla scheda successiva</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:tabprevious</span></td>
|
||
<td>Passa alla scheda precedente</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:tabfirst</span></td>
|
||
<td>Passa alla prima scheda</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:tablast</span></td>
|
||
<td>Passa all'ultima scheda</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h3>Finestre multiple</h3>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">:new</file></span></td>
|
||
<td>Apre una nuova finestra</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:new {file}</span></td>
|
||
<td>Apre un file in una nuova finestra</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:vnew</span></td>
|
||
<td>Apre una nuova finestra verticalmente</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<div class="spacer"></div>
|
||
|
||
<div class="container_img">
|
||
<img src="./Img/Guida_vim/finestre multiple_vim.jpg" alt="Finestre multiple">
|
||
</div>
|
||
|
||
<div class="spacer"></div>
|
||
|
||
<h3>Modifica delle dimensioni di una finestra</h3>
|
||
<p>A volte può tornar utile cambiare la dimensione di una finestra.</p>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">:resize {new size}</new>
|
||
</file></span></td>
|
||
<td>Modifica le dimensioni della finestra attualmente attiva. Ad esempio: <span class="highlightme">:resize 30</new>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">:vertical resize {new size}</span></td>
|
||
<td>Modifica le dimensioni della finestra verticale</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">Ctrl+w</span> poi <span class="highlightme">+</span></td>
|
||
<td>Aumenta le dimensioni della finestra</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">Ctrl+w</span> poi <span class="highlightme">-</span></td>
|
||
<td>Diminuisce la dimensione della finestra</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">Ctrl+w</span> poi <span class="highlightme">=</span></td>
|
||
<td>Imposta una dimensione uguale a tutte le finestre</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">Ctrl+w</span> poi <span class="highlightme">o</span></td>
|
||
<td>Chiude tutte le finestre, eccetto quella attiva</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h3>Muoversi tra le finestre attive</h3>
|
||
<table class="styled-table">
|
||
<thead>
|
||
<tr>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><span class="highlightme">Ctrl+w</span> poi <span class="highlightme">h</span></td>
|
||
<td>Sposta il focus sulla finestra a sinistra</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">Ctrl+w</span> poi <span class="highlightme">l</span></td>
|
||
<td>Sposta il focus sulla finestra a destra</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">Ctrl+w</span> poi <span class="highlightme">k</span></td>
|
||
<td>Sposta il focus sulla finestra in alto</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="highlightme">Ctrl+w</span> poi <span class="highlightme">j</span></td>
|
||
<td>Sposta il focus sulla finestra in basso</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>Identazione automatica</h2>
|
||
<p>Un altra caratteristica di Vim, che molto aiuta nella scrittura del codice, è l'autoidentazione di un
|
||
intero file.
|
||
È possibile abilitare l'identazione automatica con il comando:</p>
|
||
<span class="highlightme">:set autoindent</span>
|
||
<p>Oppure scrivere tutto il codice per poi identarlo tutto in una volta con il comando:</p>
|
||
<span class="highlightme">gg=G</span>
|
||
|
||
<p>Un modo ulteriore per identare un testo in <em>visual mode</em> è il comando:</p>
|
||
<span class="highlightme">=</span>
|
||
<p>Il comando:</p>
|
||
<span class="highlightme">gq</span>
|
||
si occupa di identare automaticamente i commenti.
|
||
|
||
<div class="divider"></div>
|
||
<p>Un articolo a parte sarà dedicato ai <em>plugin</em> e alla loro installazione, alla
|
||
<em>personalizzazione</em> di Vim, sia tramite temi che modificando il file <span class="highlightme">.vimrc</span>.</p>
|
||
</div>
|
||
|
||
<div class="container_img">
|
||
<img src="./Img/Guida_vim/vim_meme.png" alt="Vim meme" class="max_img" />
|
||
</div>
|
||
|
||
<!--FOOTER-->
|
||
<div class="spacer"></div>
|
||
<div class="footer">
|
||
<h2>#Note</h2>
|
||
<p>-<a href="https://www.vim.org/" target="_blank">Sito ufficiale Vim</a></p>
|
||
<p>-<a href="https://wiki.froth.zone/wiki/Vi_(software)?lang=it" target="_blank">Vi - Wikipedia</a></p>
|
||
<p>-<a href="https://wiki.archlinux.org/title/Vim">Vim - ArchWiki [ENG]</a></p>
|
||
<p>-<a href="https://wiki.froth.zone/wiki/Vim_(editor_di_testo)?lang=it" target="_blank">Vim - Wikipedia</a>
|
||
</p>
|
||
<p>-<a href="https://linuxhandbook.com/basic-vim-commands/" target="_blank">Comandi base di Vim</a></p>
|
||
<p>-<a href="https://linuxhandbook.com/vim-modes/" target="_blank">Modalità di Vim</a></p>
|
||
<p>-<a href="https://www.avvocati-e-mac.it" target="_blank">Guide su Vim in italiano</a></p>
|
||
<p>-<a href="https://learntutorials.net/it/vim" target="_blank">Tutorial avanzato I [ITA]</a></p>
|
||
<p>-<a href="https://tutorial.edu.lat/pub/vim">Tutorial avanzato II [ITA]</a></p>
|
||
|
||
<div class="spacer"></div>
|
||
<h2>#Video</h2>
|
||
<p>-<a href="https://invidious.snopyta.org/watch?v=JLAi_siifRY" target="_blank">I principali comandi di Vim
|
||
[ITA]</a></p>
|
||
<p>-<a href="https://invidious.snopyta.org/playlist?list=PLGiPYQa6t79pXJ9M_ciVhpo4Qkw0vq_7N" target="_blank">Vim e approfondimenti [ITA]</a></p>
|
||
</div>
|
||
|
||
<!--PRIVACY POLICY-->
|
||
|
||
<div class="privacy">
|
||
<p>##Questo sito non fa uso di cookie e non registra dati personali degli utenti.</p>
|
||
<p>Tutti gli articoli sono senza affiliazioni e senza pubblicità.</p>
|
||
</div>
|
||
|
||
<!--CONTATTI E LICENZA-->
|
||
|
||
<div class="container_contacts">
|
||
<p><b>##Contatti</b></p>
|
||
<div class="contacts">
|
||
<div>
|
||
<a href="https://t.me/davidempic" target="_blank"><img src="./Icon/Contacts/telegram.svg" alt="telegram"> Telegram</a>
|
||
</div>
|
||
<div>
|
||
<a href="mailto:davidemp.oc12p@simplelogin.co" target="_blank"><img src="./Icon/Contacts/tutanota.svg" alt="mail">Mail</a>
|
||
</div>
|
||
<div>
|
||
<a href="https://mastodon.uno/@PicciHud" target="_blank"><img src="./Icon/Contacts/mastodon.svg" alt="mastodon">Mastodon</a>
|
||
</div>
|
||
<div>
|
||
<a href="https://matrix.to/#/@davidemp:one.ems.host" target="_blank"><img src="./Icon/Contacts/matrix.svg" alt="matrix">Matrix</a>
|
||
</div>
|
||
</div>
|
||
<div class="license">
|
||
<a href="https://creativecommons.org/licenses/by-sa/4.0/deed.it" target="_blank" title="Condividi allo stesso modo">
|
||
Questo sito utilizza solo strumenti FLOSS<br>
|
||
2022 - Quest'opera è distribuita con Licenza CC BY-SA 4.0
|
||
</a>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="make">
|
||
<p>Realizzato con</p>
|
||
<img src="./Icon/heart.svg" alt="cuore">
|
||
<p>da PicciHud</p>
|
||
</div>
|
||
</div>
|
||
|
||
</body>
|
||
|
||
</html> |