Vim gebruiken op een Linux VPS
Een praktische Vim-tutorial opgebouwd rond echte serverbeheer-taken. Leer modi, navigatie, bewerking, zoeken en vervangen, splits, .vimrc-configuratie en workflows voor het bewerken van Nginx-, SSH- en Docker Compose-bestanden via SSH.
Vim is de standaard teksteditor op de meeste Linux-servers. Wanneer je via SSH verbinding maakt met een VPS om een Nginx-configuratie te bewerken, een SSH-poort te wijzigen of een Docker Compose-bestand aan te passen, is Vim wat je aantreft. Deze tutorial leert Vim aan de hand van echte serverbeheertaken in plaats van abstracte voorbeelden.
Je leert hoe Vim-modi werken, hoe je efficiënt door bestanden navigeert en ze bewerkt, hoe je tekst zoekt en vervangt, hoe je met meerdere bestanden werkt via splits en buffers, en hoe je een .vimrc instelt die het werken op de server versnelt.
Vereisten: Een Linux VPS (Debian of Ubuntu) met SSH-toegang. Basiskennis van de terminal (commando's uitvoeren, door mappen navigeren).
Hoe installeer ik Vim op Ubuntu of Debian?
De meeste Debian- en Ubuntu-servers worden geleverd met vim-tiny, een uitgeklede versie zonder syntaxiskleuring, undo-geschiedenis en plugin-ondersteuning. Installeer de volledige versie om alle functies uit deze tutorial te kunnen gebruiken.
sudo apt update && sudo apt install vim -y
Verifieer de installatie:
vim --version | head -1
Verwachte uitvoer op Debian 12 (Bookworm):
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Nov 15 2023 17:28:07)
Op Ubuntu 24.04 LTS zie je Vim 9.1. De exacte patchversie verschilt per distributie, maar alle functies in deze tutorial werken met Vim 8.2 en nieuwer.
Hoe zit het met Neovim? Neovim is een fork van Vim met een Lua-gebaseerd configuratiesysteem en ingebouwde LSP-ondersteuning. Alles in deze tutorial geldt ook voor Neovim, behalve het .vimrc-pad (Neovim gebruikt ~/.config/nvim/init.vim). Als je Neovim prefereert, installeer het met sudo apt install neovim.
Start de ingebouwde tutorial
Vim wordt geleverd met een interactieve tutorial die ongeveer 30 minuten duurt. Voer deze uit voordat je verder leest als je nog nooit Vim hebt gebruikt:
vimtutor
Dit opent een oefenbestand waar je leert door te doen. Het behandelt de basis van beweging en bewerking. De rest van dit artikel gaat dieper en voegt serverspecifieke workflows toe die vimtutor niet behandelt.
Wat zijn Vim-modi en hoe werken ze?
Vim heeft vier hoofdmodi. De Normal-modus is de standaard. Je gebruikt deze voor navigatie en het uitvoeren van commando's. De Insert-modus is voor het typen van tekst, je opent deze met i. De Visual-modus selecteert tekst, je opent deze met v. De Command-line-modus voert commando's uit zoals opslaan en afsluiten, je opent deze met :. Druk op Esc om vanuit elke andere modus terug te keren naar de Normal-modus.
Dit verschilt van editors zoals nano waar je meteen kunt typen. In Vim zijn toetsaanslagen in de Normal-modus commando's, geen tekens. Dit heet modaal bewerken.
| Modus | Openen met | Doel | Terug naar Normal |
|---|---|---|---|
| Normal | Esc (of een bestand openen) |
Navigeren, verwijderen, kopiëren, plakken, commando's uitvoeren | Al in Normal-modus |
| Insert | i, a, o, I, A, O |
Tekst typen en bewerken | Esc |
| Visual | v (teken), V (regel), Ctrl+v (blok) |
Tekst selecteren voor bewerkingen | Esc |
| Command-line | : |
Ex-commando's uitvoeren (opslaan, afsluiten, zoeken, vervangen) | Enter of Esc |
De modusindicator verschijnt linksonder op het scherm. Als je -- INSERT -- ziet, zit je in de Insert-modus. Als er niets wordt weergegeven, zit je in de Normal-modus.
Als je vastzit: druk twee of drie keer op Esc. Dit brengt je altijd terug naar de Normal-modus, ongeacht je huidige status.
Hoe navigeer ik door bestanden in Vim?
Navigatie in Vim vindt plaats in de Normal-modus. De basisverplaatsingstoetsen zijn h (links), j (omlaag), k (omhoog) en l (rechts). Pijltjestoetsen werken ook, maar hjkl houdt je vingers op de thuisrij en is sneller zodra je spiergeheugen opbouwt.
Teken- en regelverplaatsing
| Toets | Actie |
|---|---|
h |
Eén teken naar links |
j |
Eén regel omlaag |
k |
Eén regel omhoog |
l |
Eén teken naar rechts |
0 |
Naar het begin van de regel |
$ |
Naar het einde van de regel |
^ |
Naar het eerste niet-lege teken |
Woordverplaatsing
| Toets | Actie |
|---|---|
w |
Naar het begin van het volgende woord |
b |
Terug naar het begin van het vorige woord |
e |
Naar het einde van het huidige woord |
W |
Naar het volgende WOORD (gescheiden door witruimte) |
B |
Terug naar het vorige WOORD |
Bestandsverplaatsing
| Toets | Actie |
|---|---|
gg |
Naar de eerste regel van het bestand |
G |
Naar de laatste regel van het bestand |
42G of :42 |
Naar regel 42 |
Ctrl+d |
Een halve pagina omlaag scrollen |
Ctrl+u |
Een halve pagina omhoog scrollen |
Ctrl+f |
Een hele pagina omlaag scrollen |
Ctrl+b |
Een hele pagina omhoog scrollen |
% |
Naar het bijbehorende haakje ((, {, [) |
Zoeknavigatie
Druk op / om vooruit te zoeken, typ je zoekterm en druk op Enter. Druk op n om naar het volgende resultaat te springen en N om naar het vorige te springen. Druk op ? om achteruit te zoeken.
Voorbeeld: je bewerkt /etc/nginx/nginx.conf en moet de worker_connections-directive vinden:
/worker_connections
Vim springt naar de eerste overeenkomst. Druk op n om door alle overeenkomsten in het bestand te bladeren.
Hoe bewerk ik tekst in Vim?
Bewerken in Vim volgt een patroon: operator + beweging. De operator geeft aan wat er moet gebeuren (verwijderen, wijzigen, kopiëren). De beweging geeft aan op welke tekst het van toepassing is (woord, regel, alinea). Deze combineerbaarheid maakt Vim snel zodra je een paar bouwstenen hebt geïnternaliseerd.
Insert-modus openen
| Toets | Actie |
|---|---|
i |
Invoegen vóór de cursor |
a |
Toevoegen ná de cursor |
I |
Invoegen aan het begin van de regel |
A |
Toevoegen aan het einde van de regel |
o |
Nieuwe regel eronder openen en Insert-modus starten |
O |
Nieuwe regel erboven openen en Insert-modus starten |
Verwijderen, wijzigen, kopiëren en plakken
| Commando | Actie |
|---|---|
x |
Teken onder de cursor verwijderen |
dd |
Hele regel verwijderen |
dw |
Van cursor tot begin van het volgende woord verwijderen |
d$ of D |
Van cursor tot einde van de regel verwijderen |
cc |
Hele regel wijzigen (verwijdert en start Insert-modus) |
cw |
Woord wijzigen (verwijdert woord en start Insert-modus) |
ci" |
Binnen aanhalingstekens wijzigen (verwijdert tekst tussen " en start Insert-modus) |
yy |
Hele regel kopiëren (yank) |
yw |
Woord kopiëren |
p |
Plakken (put) na de cursor |
P |
Plakken vóór de cursor |
Ongedaan maken en opnieuw doen
| Toets | Actie |
|---|---|
u |
Laatste wijziging ongedaan maken |
Ctrl+r |
Opnieuw doen (ongedaan maken ongedaan maken) |
. |
Laatste wijziging herhalen |
Het .-commando (punt) is een van de handigste functies van Vim. Het herhaalt wat je als laatste hebt gedaan. Wijzig een woord met cw, typ de vervanging, druk op Esc. Ga nu naar een ander woord en druk op . om dezelfde wijziging uit te voeren.
Serverrelevante bewerkingsvoorbeelden
Een directive uit een Nginx-configuratie verwijderen:
Plaats je cursor op de regel access_log /var/log/nginx/access.log; en druk op dd om de hele regel te verwijderen.
Een poortnummer tussen aanhalingstekens wijzigen:
Plaats je cursor ergens binnen "8080" in een Docker Compose-bestand en druk op ci". Dit verwijdert 8080 en zet je in de Insert-modus. Typ 3000 en druk op Esc.
Twee woorden uit een directive verwijderen:
Druk op d2w om de volgende twee woorden vanaf de cursorpositie te verwijderen. Vim-commando's accepteren een getal vóór de beweging: 3dd verwijdert drie regels, 5j gaat vijf regels omlaag.
Hoe zoek en vervang ik tekst in Vim?
Gebruik :s (substitute) om tekst te vervangen. De basissyntaxis is :s/oud/nieuw/vlaggen. Dit commando werkt standaard op de huidige regel. Gebruik :%s om het op het hele bestand toe te passen.
Substitutiepatronen
| Commando | Actie |
|---|---|
:s/foo/bar/ |
Eerste foo vervangen door bar op de huidige regel |
:s/foo/bar/g |
Alle foo vervangen door bar op de huidige regel |
:%s/foo/bar/g |
Alle foo vervangen door bar in het hele bestand |
:%s/foo/bar/gc |
Alles vervangen met bevestiging (j/n per overeenkomst) |
:5,10s/foo/bar/g |
Alles vervangen op regels 5 tot en met 10 |
Praktische voorbeelden
De Nginx-luisterpoort van 80 naar 443 wijzigen:
:%s/listen 80;/listen 443 ssl;/g
Een regel in sshd_config uitcommentariëren:
Ga naar de regel en druk op I om aan het begin in te voegen, typ #, druk op Esc.
Meerdere regels uitcommentariëren: Selecteer regels met V (visuele regelmodus), breid de selectie uit met j, typ dan :s/^/#/ en druk op Enter. Dit plaatst # aan het begin van elke geselecteerde regel.
Een Docker-image-tag vervangen:
:%s/nginx:1.24/nginx:1.27/g
Regex-basis in Vim-substitutie
Vim gebruikt een eigen regex-variant. Enkele patronen die je vaak zult gebruiken bij serverconfiguraties:
| Patroon | Komt overeen met |
|---|---|
^ |
Begin van de regel |
$ |
Einde van de regel |
. |
Elk willekeurig teken |
\d |
Een cijfer (0-9) |
.* |
Willekeurige tekens (greedy) |
\s |
Witruimte |
Om letterlijke punten te matchen (zoals in IP-adressen), escape ze: :%s/192\.168\.1\.1/10.0.0.1/g.
Hoe bewerk ik meerdere bestanden in Vim met splits en buffers?
Vim kan meerdere bestanden openen in een enkele sessie met behulp van buffers, gesplitste vensters en tabbladen. Dit is handig wanneer je bestanden moet kruisverwijzen, zoals nginx.conf raadplegen terwijl je een specifiek server block bewerkt.
Buffers
Een buffer is een bestand dat in het geheugen is geladen. Je kunt veel buffers open hebben en ertussen schakelen.
| Commando | Actie |
|---|---|
:e /etc/nginx/sites-available/default |
Bestand openen in een nieuwe buffer |
:bn |
Naar de volgende buffer |
:bp |
Naar de vorige buffer |
:ls |
Alle open buffers weergeven |
:b2 |
Naar buffer nummer 2 |
:bd |
Huidige buffer sluiten |
Gesplitste vensters
Splits laten je twee bestanden naast elkaar zien in dezelfde terminal.
| Commando | Actie |
|---|---|
:sp /pad/naar/bestand |
Horizontale split (boven/onder) |
:vs /pad/naar/bestand |
Verticale split (links/rechts) |
Ctrl+w h/j/k/l |
Tussen splits bewegen (links/omlaag/omhoog/rechts) |
Ctrl+w = |
Alle splits gelijk maken |
Ctrl+w q |
Huidige split sluiten |
Voorbeeld-workflow: een Docker Compose-bestand bewerken terwijl je het .env-bestand raadpleegt:
:e docker-compose.yml
:vs .env
Je hebt nu twee panelen. Gebruik Ctrl+w l en Ctrl+w h om ertussen te schakelen.
Tabbladen
Tabbladen zijn verzamelingen van vensters. De meeste gebruikers vinden splits voldoende voor serverwerk, maar tabbladen zijn beschikbaar:
| Commando | Actie |
|---|---|
:tabnew /pad/naar/bestand |
Bestand openen in een nieuw tabblad |
gt |
Naar het volgende tabblad |
gT |
Naar het vorige tabblad |
:tabclose |
Huidig tabblad sluiten |
Hoe pas ik Vim aan met een .vimrc-bestand?
Het .vimrc-bestand in je thuismap bepaalt het gedrag van Vim. Zonder dit bestand draait Vim in een bijna Vi-compatibele modus die veel functies mist. Een goed .vimrc-bestand afgestemd op serverwerk maakt het bewerken van configuratiebestanden sneller.
Maak of bewerk je .vimrc:
vim ~/.vimrc
Voeg deze instellingen toe. Elke regel heeft een verklarend commentaar:
" 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:·
Sla op en sluit af met :wq. De instellingen worden van kracht de volgende keer dat je Vim opent.
Om je .vimrc te herladen zonder Vim te herstarten:
:source ~/.vimrc
Plakmodus voor SSH-sessies
Wanneer je tekst van je lokale klembord in Vim plakt via SSH, kan auto-inspringing een cascade-effect veroorzaken waarbij elke regel verder naar rechts schuift. Dit gebeurt omdat Vim geplakte tekst als getypte invoer behandelt en inspringingsregels toepast op elke regel.
Schakel de plakmodus in voordat je plakt:
- Druk op
F2(als jepastetogglehebt ingesteld zoals hierboven) of typ:set paste - Ga naar de Insert-modus met
i - Plak je tekst (Ctrl+Shift+V of rechtsklik in je terminal)
- Druk opnieuw op
F2of typ:set nopaste
Moderne terminals met Vim 8.2+ ondersteunen bracketed paste mode, wat dit automatisch afhandelt. Als je een recente terminal-emulator gebruikt (kitty, Alacritty, WezTerm, recente GNOME Terminal), is het omschakelen van de plakmodus mogelijk niet nodig.
Hoe voeg ik plugins toe met vim-plug?
vim-plug is een lichtgewicht pluginbeheerder die plugins parallel installeert. Het vereist het downloaden van één bestand en een paar regels in je .vimrc.
vim-plug installeren
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Controleer of het bestand bestaat:
ls -la ~/.vim/autoload/plug.vim
Je zou het bestand moeten zien met jouw gebruiker als eigenaar.
Plugins configureren in .vimrc
Voeg een pluginblok toe bovenaan je ~/.vimrc, vóór de instellingen:
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()
Sla het bestand op en installeer de plugins:
:source ~/.vimrc
:PlugInstall
vim-plug downloadt elke plugin parallel. Na installatie kun je NERDTree openen met :NERDTree, :Files gebruiken voor fuzzy zoeken en git-diff-markers zien in de goot.
Houd het minimaal op servers. Plugins verhogen de opstarttijd. Op een VPS waar je af en toe configuratiebestanden bewerkt, zijn drie tot vijf plugins voldoende. Bewaar zwaardere setups voor je lokale ontwikkelmachine.
Hoe bewerk ik serverconfiguratie-bestanden met Vim via SSH?
Deze sectie behandelt workflows die je herhaaldelijk zult gebruiken bij het beheren van een VPS. Elk voorbeeld gebruikt een echt bestand en toont de exacte stappen.
Gebruik sudoedit in plaats van sudo vim
Wanneer je bestanden bewerkt die eigendom zijn van root zoals /etc/nginx/nginx.conf of /etc/ssh/sshd_config, gebruik dan sudoedit in plaats van sudo vim.
sudoedit /etc/nginx/nginx.conf
sudoedit kopieert het bestand naar een tijdelijke locatie, opent het met de Vim van je gebruiker (inclusief je .vimrc-instellingen en plugins), en kopieert het terug met root-rechten wanneer je opslaat en afsluit. Dit is veiliger dan sudo vim om twee redenen:
sudo vimdraait Vim als root. Elk Vim-commando zoals:!bashstart een root-shell. Op servers met meerdere gebruikers is dit een risico voor privilege-escalatie.sudoeditbehoudt je gebruikersomgeving. Je houdt je syntaxiskleuring, regelnummers en sneltoetsen.
Een Nginx server block bewerken
Open de standaard siteconfiguratie:
sudoedit /etc/nginx/sites-available/default
Vind de server_name-directive door /server_name te typen en Enter te drukken. Vim springt naar de overeenkomst. Druk op cw om het woord na de directive te wijzigen, typ je domein, druk op Esc.
Verifieer na het opslaan de Nginx-configuratiesyntaxis:
sudo nginx -t
Verwachte uitvoer:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Herlaad vervolgens:
sudo systemctl reload nginx
De SSH-poort wijzigen in sshd_config
sudoedit /etc/ssh/sshd_config
Zoek de poort-directive:
/^#\?Port
Deze regex matcht zowel Port als #Port (uitgecommentarieerd). Als de regel is uitgecommentarieerd, druk op 0 om naar het begin van de regel te gaan, druk op x om het # te verwijderen, druk dan op f gevolgd door een spatie om naar de spatie vóór het poortnummer te springen. Druk op cw, typ het nieuwe poortnummer (bijvoorbeeld 2222) en druk op Esc.
Verifieer de configuratie:
sudo sshd -t
Geen uitvoer betekent dat de syntax geldig is. Herstart de service:
sudo systemctl restart sshd
Voordat je de verbinding verbreekt, open een tweede SSH-sessie op de nieuwe poort om te verifiëren dat je nog steeds kunt verbinden. SSH-toegang verliezen door de poort te wijzigen zonder te testen is een veelgemaakte fout.
Een Docker Compose-bestand bewerken
vim ~/myapp/docker-compose.yml
YAML-bestanden zijn gevoelig voor inspringing. De eerder ingestelde .vimrc-instellingen (2 spaties, expandtab) handelen dit correct af. Als je tabtekens ziet in een YAML-bestand, converteer ze:
:%s/\t/ /g
Dit vervangt alle tabs door twee spaties. Sla op en valideer het bestand:
docker compose config --quiet
Geen uitvoer betekent dat de YAML geldig is. Bij een syntaxisfout geeft Docker Compose het regelnummer weer. Spring direct naar die regel in Vim met vim +42 docker-compose.yml (waarbij 42 de foutregel is).
Een systemd unit-bestand bewerken
sudoedit /etc/systemd/system/myapp.service
Na het opslaan van wijzigingen aan een systemd unit, herlaad de daemon:
sudo systemctl daemon-reload
Herstart vervolgens de service en verifieer:
sudo systemctl restart myapp
sudo systemctl status myapp
Controleer de Active:-regel in de statusuitvoer. Deze zou active (running) moeten tonen. Als er failed staat, bekijk de logs:
journalctl -u myapp -n 20 --no-pager
Vim-spiekbriefje
De tien commando's die je nodig hebt op dag één:
| Commando | Actie |
|---|---|
i |
Insert-modus starten |
Esc |
Terug naar Normal-modus |
:wq |
Opslaan en afsluiten |
:q! |
Afsluiten zonder opslaan |
dd |
Regel verwijderen |
u |
Ongedaan maken |
/text |
Vooruit zoeken |
:%s/old/new/g |
Alles vervangen in bestand |
:sp file |
Venster splitsen |
F2 |
Plakmodus omschakelen |
Voor de volledige referentie met navigatie, bewerking, visual-modus, buffers, splits, regex-patronen en server-workflow-snelkoppelingen, zie ons Vim-spiekbriefje.
Iets werkt niet?
Vim is geopend en ik kan niet typen. Je zit in de Normal-modus. Druk op i om naar de Insert-modus te gaan.
Ik zie -- INSERT -- maar mijn toetsaanslagen doen rare dingen. Je hebt misschien per ongeluk Ctrl+s ingedrukt, wat de terminaluitvoer bevriest. Druk op Ctrl+q om te ontdooien.
Mijn geplakte tekst heeft trapvormige inspringing. Schakel de plakmodus in met F2 of :set paste voordat je plakt. Vergeet niet om het daarna weer uit te schakelen: opnieuw F2 of :set nopaste.
Vim zegt "E45: 'readonly' option is set." Het bestand is alleen-lezen. Sluit af met :q en heropen met sudoedit /pad/naar/bestand.
Ik heb een fout gemaakt en opgeslagen. Als het bestand een systeemconfiguratie is, heeft Vim mogelijk een back-up achtergelaten. Zoek naar filename~ in dezelfde map. Je kunt ook ongedaan maken na heropenen als je set undofile en set undodir=~/.vim/undodir hebt ingesteld in je .vimrc (maak eerst de map aan met mkdir -p ~/.vim/undodir).
Swapbestand-waarschuwing: ".file.swp" bestaat al. Een eerdere Vim-sessie is gecrasht of is nog open. Als geen andere sessie het bestand bewerkt, kies (D)elete om het swapbestand te verwijderen. Als je swapbestanden hebt uitgeschakeld in je .vimrc (set noswapfile), zal dit niet voorkomen.
Volgende stappen: Combineer Vim met een terminal-multiplexer zodat je bewerkingssessies verbrekingen overleven. Zie onze handleiding over tmux of over GNU Screen. Voor de Nginx-configuratievoorbeelden in dit artikel, zie de volledige gids over Nginx-beheer.
Copyright 2026 Virtua.Cloud. Alle rechten voorbehouden. Deze inhoud is een origineel werk van het Virtua.Cloud-team. Reproductie, herpublicatie of herdistributie zonder schriftelijke toestemming is verboden.
Klaar om het zelf te proberen?
Deploy uw eigen server in seconden. Linux, Windows of FreeBSD.
Bekijk VPS-aanbod