beopen-code/guida_vim.html

1187 lines
55 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<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">sudo dnf -y install vim</span></td>
<td><span class="highlightme">sudo apt -y install vim</span></td>
<td><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>
<div class="spacer"></div>
<p>Vim ha quindi tre modalità:</p>
<p>- <em>Command mode</em>: quando si avvia Vim, ci si trova in modalità di comando. 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>
<div class="container_img">
<img src="./Img/Guida_vim/insertmode.png" alt="Vim text editor" />
</div>
<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>
<div class="container_img">
<img src="./Img/Guida_vim/visualmode.png" alt="Vim text editor" />
</div>
<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>Per visualizzare tutti i file presenti in una cartella, digitare:</p>
<p><span class="highlightme">vim .</span></p>
<div class="container_img">
<img src="./Img/Guida_vim/cartella.png" alt="Finestre multiple">
</div>
<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">I</span></td>
<td>Entrare nella Insert mode</td>
</tr>
<tr>
<td><span class="highlightme">ESC</span></td>
<td>Uscire da qualsiasi modalità</td>
</tr>
<tr>
<td><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</span></td>
<td>(before) 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 </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</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 allinizio 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}</span></td>
<td>Spostare il cursore prima della lettera ricercata</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 <span class="highlightme">\c</span> 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>
<tr>
<td><span class="highlightme">:7,$s/foo/bar/g</span></td>
<td>Sostituisce tutte le ricorrenze di foo con bar, dalla settima riga
alla fine del file</td>
</tr>
<tr>
<td><span class="highlightme">:7,30s/foo/bar/g</span></td>
<td>Sostituisce tutte le ricorrenze di foo con bar, dalla settima riga
alla trentesima</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&quot;</span></td>
<td>Delete inner (dentro) &quot;&quot; o qualsiasi delimitatore venga specificato</td>
</tr>
<tr>
<td><span class="highlightme">ci&quot;</span></td>
<td>Change inner &quot;&quot;. 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</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</span></td>
<td>Numero riga non visibile</td>
</tr>
<tr>
<td><span class="highlightme">n+comando</span></td>
<td>Il comando viene ripetuto n volte</td>
</tr>
<tr>
<td><span class="highlightme">&gt;&gt;</span></td>
<td>Tabulazione a destra</td>
</tr>
<tr>
<td><span class="highlightme">&lt;&lt;</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,
allinizio 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" />
</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>
</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" />
</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 dellintera
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</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}</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</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</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="container_img">
<img src="./Img/Guida_vim/finestre_multiple.png" alt="Finestre multiple">
</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}</span></td>
<td>Modifica le dimensioni della finestra attualmente attiva. Ad esempio: <span class="highlightme">:resize 30</span>
</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">Vari 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>
<a href="https://gitea.it/PicciHud" target="_blank"><img src="./Icon/Contacts/gitea.svg" alt="gitea">Gitea</a>
</div>
<div>
<a href="https://peertube.uno/a/p1cc1hub/video-channels" target="_blank"><img src="./Icon/Contacts/peertube.svg" alt="peertube" style="-webkit-filter: invert(.75);">PeerTube</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>