Vim gebruiken om tekstbestanden te bewerken

Op deze pagina:

In Linux kan je eenvoudige intuïtieve teksteditors gebruiken om tekstbestanden te bewerken, of als je zin hebt in een uitdaging, Vim gebruiken.

Vim heeft 6 modes: Insert, Normal, Visual, Select, Command line en Ex mode. Je gebruikt meestal deze twee:

Command mode: Bij het starten van Vim kom je terecht in de command mode, hier kan je door het venster heen lopen en tekst wissen en tekst kopiëren.

Insert mode: Hier kan je tekst invoeren, dit kan niet in command mode.

Je bent in insert mode als er links onder in het venster -- INVOEGEN -- staat.

Toetsen overzicht

escape button

i
Naar insert mode
Esc
Naar command mode
x of Del
Wis een karakter
X
Wis vorige karakter (backspace)
u
Ongedaan maken (undo)
Ctrl + r
Ongedaan actie ongedaan maken (redo)
y y
Regel kopiëren
d d
Regel wissen
p
Plakken
/<zoek_term>
Zoeken en dan door de gevonden items gaan met n en N
[ [ of g g
Ga naar het begin van het bestand
] ] of G
Ga naar het einde van het bestand
: % s /foo/bar/ g c i
Zoek ('foo') en vervang (door 'bar') met bevestiging

Opslaan en afsluiten

Esc + : w
Bestand opslaan
Esc + : w a
Alle open bestanden opslaan
Esc + : w q of Esc + Z Z
Bestand opslaan en Vim afsluiten
Esc + : q !
Vim sluiten zonder iets op te slaan

vim afsluiten

Naar insert mode gaan

Als je in command mode zit, dan zijn er meerdere toetsen die je naar insert mode brengen:

i
Nieuwe tekst komt voor de cursor
a
Nieuwe tekst komt na de cursor
I
Nieuwe tekst komt aan het begin van de regel
A
Nieuwe tekst komt aan het einde van de regel
o
Nieuwe regel na de huidige regel
O
Nieuwe regel voor de huidige regel

Terug naar command mode gaan

Via de Esc toets ga je terug naar de command mode.

De tekst -- INVOEGEN -- verdwijnt dan onderaan het venster.

De cursor verplaatsen

Je muis werkt niet in Vim, dus alles moet met het toetsenbord. De pijltoetsen werken wel, zowel in insert mode als in command mode.

H
Naar de eerste regel in het venster.
L
Naar de laatste regel in het venster.
M
Naar de middelste regel van het venster.
[ [ of g g
Naar de eerste regel van het bestand.
] ] of G
Naar de laatste regel van het bestand.
<getal n> G
Naar regelnummer n.
{
Naar het begin van de paragraaf.
}
Naar het einde van de paragraaf.
w
Naar het volgende woord.

Cijfers werken als vermenigvuldigers voor commando's. Om 6 woorden vooruit te gaan gebruik je bijvoorbeeld 6w. Om tekst 3 keer in het bestand op te nemen, maar slechts 1 keer in te typen, gebruik je 3i om naar insert mode te gaan en dan je tekst in te typen. Na op Esc gedrukt te hebben, zie je je ingetypte tekst dan 3 keer staan, achter elkaar.

Regelnummers tonen

Om regelnummers te krijgen in Vim ga je naar command mode en type je:


:set number

Je kan set number ook opnemen in je .vimrc om de regelnummers altijd te tonen zonder dat je dit steeds handmatig aan moet zetten.

Tekst knippen en wissen

Knippen en wissen zijn hetzelfde in Vim, als je tekst wist, dan wordt deze in een buffer geplaatst van waar je deze later weer kan plakken.

In Vim zijn een aantal toetscombinaties om tekst te knippen en te wissen. De normale Delete en Backspace toetsen werken ook.

x
Gelijk aan de Delete toets.
X
Gelijk aan de Backspace toets.
d w
Knip/wis woord tot en met de spatie na het woord.
d d
Knip/wis de huidige regel.
d $
Knip/wis tot aan het einde van de huidige regel.
d G
Knip/wis tot aan het einde van het bestand.

Teksten kopiëren en plakken

Kopiëren kan in Vim met de volgende toetscombinaties in command mode:

y w
Kopiëer woord plus de spatie erachter.
y y
Kopiëer huidige regel.
y $
Kopiëer tot en met het einde van de regel.
y G
Kopiëer tot en met het einde van het bestand.

Plakken kan met de volgende toetsen in command mode:

p
Plak de inhoud van de Vim-buffer voor de huidige cursorpositie.
P
Plak de inhoud van de Vim-buffer na de huidige cursorpositie.

Plakken van tekst die niet in de Vim-buffer staat, maar die ergens anders gekopiëerd is, kan met de standaard Linux terminal toetscombinaties als je in insert mode bent in Vim:

Ctrl+Shift+C
Om te kopiëren.
Ctrl+Shift+V
Om te plakken.

Inspringen en terugspringen

Als je in Normal mode op de v drukt, dan kom je in Visual mode. In Visual mode kun je regels selecteren door de cursor te verplaatsen. Als je regels hebt geselecteerd, dan kun je met > deze geselecteerde regels laten inspringen. Met < kun je regels laten terugspringen.

Tekst zoeken in Vim

Het zoeken van tekst kan in command mode met de forward slash toets '/'. Daarna typ je in wat je zoekt, gevolgt door Enter. Met de n toets ga je naar de volgende vindplaats van de tekst die je zoekt en met de N toets ga je naar de vorige. Het zoeken van teksten is hoofdlettergevoelig. Om de hoofdlettergevoeligheid te negeren tijdens het zoeken kan je de optie \c gebruiken:


/\cZoekTekst

Tekst vervangen in Vim

Het commando om tekst te zoeken en vervangen is :s (de s is van het Engelse woord substitute). Hier kunnen reguliere expressies (RegEx) bij worden gebruikt.Voorbeeld, 'zoektekst' in een bestand vervangen door 'vervangtekst':


:%s/zoektekst/vervangtekst/gci

De g optie aan het einde zorgt ervoor dat de vervanging voor alle exemplaren van zoektekst in het bestand plaatsvindt, zonder de g optie wordt alleen de eerste vondst vervangen.Als je het % teken weglaat, vindt de vervanging alleen plaats in de huidige regel in plaats van het hele bestand.Het zoeken en vervangen is hoofdlettergevoelig, om de hoofdlettergevoeligheid te negeren wordt in dit voorbeeld de i optie gebruikt.Om niet meteen alles automatisch te vervangen, maar eerst alles te laten bevestigen, wordt in dit voorbeeld de c (van confirm) optie gebruikt.Deze c (van confirm) optie geeft steeds de volgende vraag:


vervang door vervangtekst (y/n/a/q/l/^E/^Y)?

De mogelijkheden hier zijn:

y
Ja, deze vervangen.
n
Nee, deze niet vervangen en doorgaan naar de volgende.
a
Vervang alle gevonden exemplaren.
q
Stop zonder iets te vervangen.
l
Vervang dit exemplaar en stop dan.
^ E
Scroll omhoog.
^ Y
Scroll omlaag.

Regels verwijderen op basis van de inhoud

De algemene vorm voor het verwijderen van regels die een bepaalde inhoud hebben:


:g/patroon/d

De globale opdracht (g) geeft de delete opdracht (d) het patroon op basis waarvan de regels moeten worden verwijderd.Je kunt ook regels verwijderen die juist niet aan het partroon voldoen door er een uitroepteken voor te plaatsen:


:g!/patroon/d

Het patroon mag een letterlijke overeenkomst zijn, of een reguliere expressie.Voorbeelden:

:g/foo/d
Verwijder alle regels die "foo" bevatten, ook de regels die "foo" als gedeelte van een woord bevatten.
:g!/foo/d
Verwijder alle regels die geen "foo" bevatten.
:g/^#/d
Verwijder alle regels die met # beginnen (commentaar verwijderen uit een script).
:g/^$/d
Verwijder alle lege regels.
:g/^\s*$/d
Verwijder alle lege regels inclusief de regels die enkel spaties bevatten.

Vim beëindigen

Om het programma te verlaten moet je eerst naar de command mode (Esc-toets). Dan zijn er de volgende mogelijkheden:

: w
Aanpassingen opslaan, maar het programma niet sluiten.
: w q
Opslaan en sluiten.
: q !
Geforceerd sluiten (er word niets opgeslagen).
: q
Sluiten, indien er nog niet opgeslagen aanpassingen zijn, volgt er een waarschuwing:

E37: niets opgeslagen sinds laatste wijziging (voeg ! toe om te forceren)
Toets ENTER of typ een opdracht om verder te gaan

Bestanden vergelijken in Vim

In Vim kan je 2 bestanden naast elkaar in vensters openen en de verschillen tussen de bestanden in afwijkende kleuren laten aangeven.


# Methode 1:
vimdiff bestand1.txt bestand2.txt

# Methode 2:
vim -d bestand1.txt bestand2.txt

De toetscombinaties die hierbij van pas komen:

Ctrl w w
Naar het andere venster gaan
: q
Huidig venster sluiten
: q a
Beide vensters sluiten
: q a !
Beide vensters geforceerd sluiten

Voorbeeld van uitvoer:

vimdiff

Een versleuteld tekstbestand maken met Vim

Als je Vim start met de x parameter, dan maak je een versleuteld bestand aan.Voorbeeld:


vim -x mijngeheimetekst.txt

Je zal dan gevraagd worden om een sleutel om de tekst mee te versleutelen. Deze moet je twee keer ingeven.

Na het geven van een sleutel kan je de versleutelmethode opgeven met:


:setlocal cm=blowfish2

Standaard gebruikt Vim namelijk een zwakke versleuteling, blowfish2 is de sterkste versleuteling die Vim te bieden heeft. Deze versleuteling is slechts voldoende om toevallige snuffelaars te ontmoedigen.

Dan kan je tekst gaan invoeren met:


:i

Als je klaar bent kan je afsluiten met de Esc toets gevolgd door :wq om het bestand op te slaan en te sluiten. Je hebt nu een versleuteld bestand, als je die probeert te lezen met een ander programma, dan zul je alleen maar willekeurige tekens zien.

Als je de tekst weer met Vim opent (je hoeft nu geen parameter -x mee te geven), met:


vim mijngeheimetekst.txt

dan wordt je gevraagd om de sleutel en daarna zie je je oorspronkelijke tekst weer.

Als je makkelijk wil kunnen zien welke tekstbestanden versleuteld zijn, kan je ze een andere of extra extensie meegeven, bij voorbeeld:


vim -x mijntekst.txt.geheim

De sleutel aanpassen kan door het bestand in vim te openen en :X in te geven. Je wordt dan om een nieuwe sleutel gevraagd. Je moet deze twee keer ingeven.Druk daarna op Enter en type :wq om het bestand met de nieuwe sleutel op te slaan en Vim te sluiten.

De sleutel verwijderen kan ook door het bestand in Vim te openen en :X in te geven, je wordt dan gevraagd om de nieuwe sleutel op te geven, in plaats daarvan druk je twee keer op Enter zonder iets in te geven. Dan geef je :wq in om het bestand onversleuteld op te slaan en Vim te sluiten.

Je kan ook de sleutel leegmaken via:


:set key=

Als je deze melding krijgt: Warning: Using a weak encryption method; see :help 'cm'

dan heb je geen versleutelmethode opgegeven en gebruikt Vim de zwakke standaard versleutelmethode zip van Pkzip.

Je kunt ervoor zorgen dat je niet steeds een versleutelmethode voor elk bestand moet opgeven door “set cm=blowfish2” toe te voegen aan ~/.vimrc cm staat voor cryptmethod en de versleutelmethode voor een eerder opgeslagen en nu geopend bestand kan je opvragen met:


:setlocal cm?

Als je een bestand aan het bewerken bent, dan staat het onversleuteld in het geheugen en er wordt ook onversleuteld in viminfo geschreven. Om te voorkomen dat viminfo wordt gebruikt kan je dit ingeven:


:set viminfo=

Als je altijd versleutelde bestanden gebruikt, kan je de volgende regels opnemen in ~/.vimrc om dit met de (beperkte) mogelijkheden van vim zo veilig mogelijk te doen:


set cm=blowfish2
set viminfo=
set nobackup
set nowritebackup

Als je een echt goede versleuteling wil, dan is er een andere methode: vesleuteling met GPG, maar ook deze methode heeft een zwakheid: je tekst wordt onversleuteld naar tijdelijke bestanden weggeschreven tijdens dit proces. Een beschrijving hiervan is te vinden op deze wiki.

 

Verwante artikelen