Come usare Vim su un VPS Linux
Un tutorial pratico su Vim basato su attività reali di amministrazione server. Impara le modalità, la navigazione, la modifica, la ricerca e sostituzione, gli split, la configurazione di .vimrc e i flussi di lavoro per modificare file Nginx, SSH e Docker Compose tramite SSH.
Vim è l'editor di testo predefinito sulla maggior parte dei server Linux. Quando ti connetti via SSH a un VPS per modificare una configurazione Nginx, cambiare una porta SSH o aggiustare un file Docker Compose, Vim è ciò che trovi. Questo tutorial insegna Vim attraverso attività reali di amministrazione server invece di esempi astratti.
Imparerai come funzionano le modalità di Vim, come navigare e modificare file in modo efficiente, come cercare e sostituire testo, come lavorare con più file usando split e buffer, e come configurare un .vimrc che velocizza il lavoro sul server.
Prerequisiti: Un VPS Linux (Debian o Ubuntu) con accesso SSH. Familiarità di base con il terminale (eseguire comandi, navigare tra directory).
Come installo Vim su Ubuntu o Debian?
La maggior parte dei server Debian e Ubuntu viene fornita con vim-tiny, una versione ridotta priva di evidenziazione della sintassi, cronologia degli annullamenti e supporto dei plugin. Installa la versione completa per avere tutte le funzionalità trattate in questo tutorial.
sudo apt update && sudo apt install vim -y
Verifica l'installazione:
vim --version | head -1
Output previsto su Debian 12 (Bookworm):
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Nov 15 2023 17:28:07)
Su Ubuntu 24.04 LTS vedrai Vim 9.1. La versione esatta della patch varia in base alla distribuzione, ma tutte le funzionalità di questo tutorial funzionano con Vim 8.2 e successivi.
E Neovim? Neovim è un fork di Vim con un sistema di configurazione basato su Lua e supporto LSP integrato. Tutto in questo tutorial si applica a Neovim tranne il percorso del .vimrc (Neovim usa ~/.config/nvim/init.vim). Se preferisci Neovim, installalo con sudo apt install neovim.
Avvia il tutorial integrato
Vim include un tutorial interattivo che richiede circa 30 minuti. Eseguilo prima di continuare a leggere se non hai mai usato Vim:
vimtutor
Si apre un file di pratica dove impari facendo. Copre le basi del movimento e della modifica. Il resto di questo articolo approfondisce e aggiunge flussi di lavoro specifici per server che vimtutor non tratta.
Cosa sono le modalità di Vim e come funzionano?
Vim ha quattro modalità principali. La modalità Normal è quella predefinita. La usi per la navigazione e l'esecuzione di comandi. La modalità Inserimento serve a digitare testo, si entra con i. La modalità Visuale seleziona testo, si entra con v. La modalità Riga di comando esegue comandi come salva ed esci, si entra con :. Premi Esc per tornare alla modalità Normal da qualsiasi altra modalità.
Questo è diverso da editor come nano dove digiti immediatamente. In Vim, le pressioni dei tasti in modalità Normal sono comandi, non caratteri. Questo si chiama editing modale.
| Modalità | Accesso | Scopo | Ritorno alla modalità Normal |
|---|---|---|---|
| Normal | Esc (o aprire un file) |
Navigare, eliminare, copiare, incollare, eseguire comandi | Già in modalità Normal |
| Inserimento | i, a, o, I, A, O |
Digitare e modificare testo | Esc |
| Visuale | v (carattere), V (riga), Ctrl+v (blocco) |
Selezionare testo per operazioni | Esc |
| Riga di comando | : |
Eseguire comandi ex (salvare, uscire, cercare, sostituire) | Enter o Esc |
L'indicatore di modalità appare in basso a sinistra sullo schermo. Quando vedi -- INSERT --, sei in modalità Inserimento. Quando non viene mostrato nulla, sei in modalità Normal.
Se ti senti bloccato: premi Esc due o tre volte. Questo ti riporta sempre in modalità Normal indipendentemente dal tuo stato attuale.
Come navigo nei file con Vim?
La navigazione in Vim avviene in modalità Normal. I tasti di movimento base sono h (sinistra), j (giù), k (su) e l (destra). Le frecce funzionano ugualmente, ma hjkl mantiene le dita sulla riga base ed è più veloce una volta acquisita la memoria muscolare.
Movimento per carattere e riga
| Tasto | Azione |
|---|---|
h |
Spostarsi di un carattere a sinistra |
j |
Scendere di una riga |
k |
Salire di una riga |
l |
Spostarsi di un carattere a destra |
0 |
Andare a inizio riga |
$ |
Andare a fine riga |
^ |
Andare al primo carattere non vuoto |
Movimento per parola
| Tasto | Azione |
|---|---|
w |
Andare all'inizio della parola successiva |
b |
Tornare all'inizio della parola precedente |
e |
Andare alla fine della parola corrente |
W |
Andare alla PAROLA successiva (delimitata da spazi) |
B |
Tornare alla PAROLA precedente |
Movimento nel file
| Tasto | Azione |
|---|---|
gg |
Andare alla prima riga del file |
G |
Andare all'ultima riga del file |
42G o :42 |
Andare alla riga 42 |
Ctrl+d |
Scorrere di mezza pagina verso il basso |
Ctrl+u |
Scorrere di mezza pagina verso l'alto |
Ctrl+f |
Scorrere di una pagina intera verso il basso |
Ctrl+b |
Scorrere di una pagina intera verso l'alto |
% |
Andare alla parentesi corrispondente ((, {, [) |
Navigazione tramite ricerca
Premi / per cercare in avanti, digita il termine di ricerca e premi Enter. Premi n per andare al risultato successivo e N per andare al precedente. Premi ? per cercare all'indietro.
Esempio: stai modificando /etc/nginx/nginx.conf e devi trovare la direttiva worker_connections:
/worker_connections
Vim salta alla prima corrispondenza. Premi n per scorrere tutte le corrispondenze nel file.
Come modifico il testo in Vim?
La modifica in Vim segue uno schema: operatore + movimento. L'operatore indica cosa fare (eliminare, cambiare, copiare). Il movimento indica su quale testo agire (parola, riga, paragrafo). Questa componibilità è ciò che rende Vim veloce una volta interiorizzati alcuni elementi base.
Entrare in modalità Inserimento
| Tasto | Azione |
|---|---|
i |
Inserire prima del cursore |
a |
Aggiungere dopo il cursore |
I |
Inserire a inizio riga |
A |
Aggiungere a fine riga |
o |
Aprire una nuova riga sotto e passare in modalità Inserimento |
O |
Aprire una nuova riga sopra e passare in modalità Inserimento |
Eliminare, cambiare, copiare e incollare
| Comando | Azione |
|---|---|
x |
Eliminare il carattere sotto il cursore |
dd |
Eliminare l'intera riga |
dw |
Eliminare dal cursore all'inizio della parola successiva |
d$ o D |
Eliminare dal cursore a fine riga |
cc |
Cambiare l'intera riga (elimina e passa in modalità Inserimento) |
cw |
Cambiare la parola (elimina la parola e passa in modalità Inserimento) |
ci" |
Cambiare all'interno delle virgolette (elimina il testo tra " e passa in modalità Inserimento) |
yy |
Copiare (yank) l'intera riga |
yw |
Copiare la parola |
p |
Incollare (put) dopo il cursore |
P |
Incollare prima del cursore |
Annullare e ripristinare
| Tasto | Azione |
|---|---|
u |
Annullare l'ultima modifica |
Ctrl+r |
Ripristinare (annullare l'annullamento) |
. |
Ripetere l'ultima modifica |
Il comando . (punto) è una delle funzionalità più utili di Vim. Ripete quello che hai fatto per ultimo. Cambia una parola con cw, digita la sostituzione, premi Esc. Ora spostati su un'altra parola e premi . per effettuare la stessa modifica.
Esempi di modifica rilevanti per il server
Eliminare una direttiva da una configurazione Nginx:
Posiziona il cursore sulla riga access_log /var/log/nginx/access.log; e premi dd per eliminare l'intera riga.
Cambiare un numero di porta tra virgolette:
Posiziona il cursore ovunque all'interno di "8080" in un file Docker Compose e premi ci". Questo elimina 8080 e ti mette in modalità Inserimento. Digita 3000 e premi Esc.
Eliminare due parole da una direttiva:
Premi d2w per eliminare le due parole successive dalla posizione del cursore. I comandi Vim accettano un numero prima del movimento: 3dd elimina tre righe, 5j scende di cinque righe.
Come cerco e sostituisco testo in Vim?
Usa :s (substitute) per sostituire testo. La sintassi base è :s/vecchio/nuovo/flag. Questo comando agisce sulla riga corrente per impostazione predefinita. Usa :%s per applicarlo all'intero file.
Modelli di sostituzione
| Comando | Azione |
|---|---|
:s/foo/bar/ |
Sostituire il primo foo con bar sulla riga corrente |
:s/foo/bar/g |
Sostituire tutti i foo con bar sulla riga corrente |
:%s/foo/bar/g |
Sostituire tutti i foo con bar nell'intero file |
:%s/foo/bar/gc |
Sostituire tutti con conferma (s/n per ogni corrispondenza) |
:5,10s/foo/bar/g |
Sostituire tutti sulle righe dalla 5 alla 10 |
Esempi pratici
Cambiare la porta di ascolto Nginx da 80 a 443:
:%s/listen 80;/listen 443 ssl;/g
Commentare una riga in sshd_config:
Spostati sulla riga e premi I per inserire all'inizio, digita #, premi Esc.
Commentare più righe: Seleziona le righe con V (modalità visuale per righe), estendi la selezione verso il basso con j, poi digita :s/^/#/ e premi Enter. Questo antepone # a ogni riga selezionata.
Sostituire un tag di immagine Docker:
:%s/nginx:1.24/nginx:1.27/g
Basi delle regex nella sostituzione Vim
Vim usa una propria variante di regex. Alcuni pattern che userai spesso nelle configurazioni server:
| Pattern | Corrisponde a |
|---|---|
^ |
Inizio riga |
$ |
Fine riga |
. |
Qualsiasi singolo carattere |
\d |
Una cifra (0-9) |
.* |
Qualsiasi carattere (greedy) |
\s |
Spazio bianco |
Per trovare punti letterali (come negli indirizzi IP), usa l'escape: :%s/192\.168\.1\.1/10.0.0.1/g.
Come modifico più file in Vim con split e buffer?
Vim può aprire più file in una singola sessione usando buffer, finestre divise e schede. Questo è utile quando devi fare riferimenti incrociati tra file, come controllare nginx.conf mentre modifichi un server block specifico.
Buffer
Un buffer è un file caricato in memoria. Puoi avere molti buffer aperti e passare dall'uno all'altro.
| Comando | Azione |
|---|---|
:e /etc/nginx/sites-available/default |
Aprire file in un nuovo buffer |
:bn |
Passare al buffer successivo |
:bp |
Passare al buffer precedente |
:ls |
Elencare tutti i buffer aperti |
:b2 |
Passare al buffer numero 2 |
:bd |
Chiudere il buffer corrente |
Finestre divise
Gli split permettono di vedere due file affiancati nello stesso terminale.
| Comando | Azione |
|---|---|
:sp /percorso/del/file |
Split orizzontale (sopra/sotto) |
:vs /percorso/del/file |
Split verticale (sinistra/destra) |
Ctrl+w h/j/k/l |
Spostarsi tra gli split (sinistra/giù/su/destra) |
Ctrl+w = |
Rendere tutti gli split di dimensioni uguali |
Ctrl+w q |
Chiudere lo split corrente |
Esempio di flusso di lavoro: modificare un file Docker Compose consultando il file .env:
:e docker-compose.yml
:vs .env
Ora hai due pannelli. Usa Ctrl+w l e Ctrl+w h per passare da uno all'altro.
Schede
Le schede sono raccolte di finestre. La maggior parte degli utenti trova gli split sufficienti per il lavoro sul server, ma le schede sono disponibili:
| Comando | Azione |
|---|---|
:tabnew /percorso/del/file |
Aprire file in una nuova scheda |
gt |
Andare alla scheda successiva |
gT |
Andare alla scheda precedente |
:tabclose |
Chiudere la scheda corrente |
Come personalizzo Vim con un file .vimrc?
Il file .vimrc nella tua home directory controlla il comportamento di Vim. Senza di esso, Vim funziona in una modalità quasi compatibile con Vi che manca di molte funzionalità. Un buon .vimrc ottimizzato per il lavoro sul server rende la modifica dei file di configurazione più veloce.
Crea o modifica il tuo .vimrc:
vim ~/.vimrc
Aggiungi queste impostazioni. Ogni riga ha un commento esplicativo:
" Disable Vi compatibility mode (enable all Vim features)
set nocompatible
" Use UTF-8 encoding (required for special characters in listchars on minimal server images)
set encoding=utf-8
" Show line numbers (essential for config files with error messages referencing line numbers)
set number
" Show relative line numbers (makes jumping N lines easy: 5j, 12k)
set relativenumber
" Enable syntax highlighting
syntax on
" Use spaces instead of tabs (most config files expect spaces)
set expandtab
" Set tab width to 2 spaces (common for YAML, Nginx configs)
set tabstop=2
set shiftwidth=2
set softtabstop=2
" Highlight search results as you type
set incsearch
set hlsearch
" Case-insensitive search unless uppercase is used
set ignorecase
set smartcase
" Show matching brackets
set showmatch
" Always show the status line (shows filename and position)
set laststatus=2
" Enable mouse support (useful in modern terminals)
set mouse=a
" Show current mode in status line
set showmode
" Set pastetoggle to F2 (toggle paste mode for clean pasting over SSH)
set pastetoggle=<F2>
" Disable swap files (avoids .swp clutter on servers)
set noswapfile
" Enable filetype detection (loads correct indentation for yaml, json, etc.)
filetype plugin indent on
" Highlight the current line
set cursorline
" Show whitespace characters (catch trailing spaces and mixed indentation)
set list
set listchars=tab:»·,trail:·
Salva ed esci con :wq. Le impostazioni avranno effetto alla prossima apertura di Vim.
Per ricaricare il .vimrc senza riavviare Vim:
:source ~/.vimrc
Modalità incolla per le sessioni SSH
Quando incolli testo dalla tua clipboard locale in Vim via SSH, l'indentazione automatica può creare un effetto a cascata dove ogni riga si sposta sempre più a destra. Questo accade perché Vim tratta il testo incollato come input digitato e applica le regole di indentazione a ogni riga.
Attiva la modalità incolla prima di incollare:
- Premi
F2(se hai configuratopastetogglecome mostrato sopra) o digita:set paste - Entra in modalità Inserimento con
i - Incolla il testo (Ctrl+Shift+V o clic destro nel terminale)
- Premi di nuovo
F2o digita:set nopaste
I terminali moderni con Vim 8.2+ supportano il bracketed paste mode, che gestisce tutto automaticamente. Se usi un emulatore di terminale recente (kitty, Alacritty, WezTerm, GNOME Terminal recente), l'attivazione della modalità incolla potrebbe non essere necessaria.
Come aggiungo plugin con vim-plug?
vim-plug è un gestore di plugin leggero che installa i plugin in parallelo. Richiede il download di un singolo file e alcune righe nel tuo .vimrc.
Installare vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Verifica che il file esista:
ls -la ~/.vim/autoload/plug.vim
Dovresti vedere il file con il tuo utente come proprietario.
Configurare i plugin nel .vimrc
Aggiungi un blocco plugin all'inizio del tuo ~/.vimrc, prima delle impostazioni:
call plug#begin('~/.vim/plugged')
" File explorer sidebar
Plug 'preservim/nerdtree'
" Fuzzy file finder
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
" Git status indicators in the gutter
Plug 'airblade/vim-gitgutter'
call plug#end()
Salva il file, poi installa i plugin:
:source ~/.vimrc
:PlugInstall
vim-plug scarica ogni plugin in parallelo. Dopo l'installazione, puoi aprire NERDTree con :NERDTree, usare :Files per la ricerca fuzzy dei file e vedere i marcatori git diff nella barra laterale.
Mantieni la configurazione minimale sui server. I plugin aggiungono tempo di avvio. Su un VPS dove modifichi file di configurazione occasionalmente, tre-cinque plugin bastano. Riserva le configurazioni pesanti per la tua macchina di sviluppo locale.
Come modifico file di configurazione server con Vim via SSH?
Questa sezione tratta i flussi di lavoro che userai ripetutamente nella gestione di un VPS. Ogni esempio usa un file reale e mostra i passaggi esatti.
Usa sudoedit invece di sudo vim
Quando modifichi file di proprietà di root come /etc/nginx/nginx.conf o /etc/ssh/sshd_config, usa sudoedit invece di sudo vim.
sudoedit /etc/nginx/nginx.conf
sudoedit copia il file in una posizione temporanea, lo apre con il Vim del tuo utente (incluse le impostazioni .vimrc e i plugin), poi lo ricopia con i permessi di root quando salvi ed esci. È più sicuro di sudo vim per due motivi:
sudo vimesegue Vim come root. Qualsiasi comando Vim come:!bashavvia una shell root. Su server multi-utente questo è un rischio di escalation dei privilegi.sudoeditpreserva il tuo ambiente utente. Mantieni l'evidenziazione della sintassi, i numeri di riga e le scorciatoie da tastiera.
Modificare un server block Nginx
Apri la configurazione del sito predefinito:
sudoedit /etc/nginx/sites-available/default
Trova la direttiva server_name digitando /server_name e premendo Enter. Vim salta alla corrispondenza. Premi cw per cambiare la parola dopo la direttiva, digita il tuo dominio, premi Esc.
Dopo aver salvato, verifica la sintassi della configurazione Nginx:
sudo nginx -t
Output previsto:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Poi ricarica:
sudo systemctl reload nginx
Cambiare la porta SSH in sshd_config
sudoedit /etc/ssh/sshd_config
Cerca la direttiva della porta:
/^#\?Port
Questa regex corrisponde sia a Port che a #Port (commentato). Se la riga è commentata, premi 0 per andare a inizio riga, premi x per eliminare il #, poi premi f seguito da uno spazio per saltare allo spazio prima del numero di porta. Premi cw, digita il nuovo numero di porta (ad esempio 2222) e premi Esc.
Verifica la configurazione:
sudo sshd -t
Nessun output significa che la sintassi è valida. Riavvia il servizio:
sudo systemctl restart sshd
Prima di disconnetterti, apri una seconda sessione SSH sulla nuova porta per verificare che puoi ancora connetterti. Perdere l'accesso SSH cambiando la porta senza testare è un errore frequente.
Modificare un file Docker Compose
vim ~/myapp/docker-compose.yml
I file YAML sono sensibili all'indentazione. Le impostazioni .vimrc definite in precedenza (tab di 2 spazi, expandtab) gestiscono questo correttamente. Se vedi caratteri di tabulazione in un file YAML, convertili:
:%s/\t/ /g
Questo sostituisce tutti i tab con due spazi. Salva e valida il file:
docker compose config --quiet
Nessun output significa che il YAML è valido. In caso di errore di sintassi, Docker Compose stampa il numero di riga. Vai direttamente a quella riga in Vim con vim +42 docker-compose.yml (dove 42 è la riga dell'errore).
Modificare un file unit systemd
sudoedit /etc/systemd/system/myapp.service
Dopo aver salvato le modifiche a un file unit systemd, ricarica il daemon:
sudo systemctl daemon-reload
Poi riavvia il servizio e verifica:
sudo systemctl restart myapp
sudo systemctl status myapp
Controlla la riga Active: nell'output dello stato. Dovrebbe mostrare active (running). Se mostra failed, leggi i log:
journalctl -u myapp -n 20 --no-pager
Cheat sheet Vim
I dieci comandi di cui hai bisogno dal primo giorno:
| Comando | Azione |
|---|---|
i |
Entrare in modalità Inserimento |
Esc |
Tornare alla modalità Normal |
:wq |
Salvare e uscire |
:q! |
Uscire senza salvare |
dd |
Eliminare la riga |
u |
Annullare |
/text |
Cercare in avanti |
:%s/old/new/g |
Sostituire tutto nel file |
:sp file |
Dividere la finestra |
F2 |
Attivare/disattivare modalità incolla |
Per il riferimento completo con navigazione, modifica, modalità visuale, buffer, split, pattern regex e scorciatoie server, consulta il nostro Cheat sheet Vim.
Qualcosa non funziona?
Vim si è aperto e non posso digitare. Sei in modalità Normal. Premi i per entrare in modalità Inserimento.
Vedo -- INSERT -- ma i miei tasti fanno cose strane. Potresti aver premuto accidentalmente Ctrl+s, che blocca l'output del terminale. Premi Ctrl+q per sbloccare.
Il mio testo incollato ha un'indentazione a scaletta. Attiva la modalità incolla con F2 o :set paste prima di incollare. Ricorda di disattivarla dopo: di nuovo F2 o :set nopaste.
Vim mostra "E45: 'readonly' option is set." Il file è di sola lettura. Esci con :q e riaprilo con sudoedit /percorso/del/file.
Ho fatto un errore e ho salvato. Se il file è una configurazione di sistema, Vim potrebbe aver lasciato un backup. Cerca filename~ nella stessa directory. Puoi anche annullare dopo aver riaperto se hai configurato set undofile e set undodir=~/.vim/undodir nel tuo .vimrc (crea prima la directory con mkdir -p ~/.vim/undodir).
Avviso file swap: ".file.swp" esiste già. Una sessione Vim precedente è terminata in modo anomalo o è ancora aperta. Se nessun'altra sessione sta modificando il file, scegli (D)elete per eliminare il file swap. Se hai disabilitato i file swap nel tuo .vimrc (set noswapfile), questo non si verificherà.
Prossimi passi: Abbina Vim a un multiplexer di terminale perché le tue sessioni di editing sopravvivano alle disconnessioni. Consulta la nostra guida su tmux o su GNU Screen. Per gli esempi di configurazione Nginx in questo articolo, consulta la guida completa sull'amministrazione Nginx.
Copyright 2026 Virtua.Cloud. Tutti i diritti riservati. Questo contenuto è un'opera originale del team Virtua.Cloud. La riproduzione, ripubblicazione o redistribuzione senza autorizzazione scritta è vietata.
Pronto a provare?
Distribuisci il tuo server in pochi secondi. Linux, Windows o FreeBSD.
Vedi piani VPS