Referenser:
Vim (Vi IMproved) är en av de vanligast förekommande textredigerarna på *nix-system. Om du inte vet vad ett *nix-system är så är du redan ute på hal is, läs på lite här exempelvis och återkom sedan. Lämpliga sökord är unix
och linux
. Obs! Vim är inte en ordbehandlare, den är en textredigerare och ett programmeringsverktyg.
Anledningen till varför jag bestämde mig för att lära mig Vi (och så småningom Vim) var för att jag installerade en Linux-distribution som endast hade Vi som redigerare i grundinstallationen. Plötsligt befann jag mig i situationen att jag inte kunde redigera de rätta inställningsfilerna för att få igång nätverket och tanka ner en annan redigerare från nätet, eftersom jag inte visste hur man använde Vi. Lite moment 22 med andra ord.
Vim är kraftfullt med många bra-att-ha-funktioner, och den kanske största anledningen till varför jag föredrar den framför exempelvis Emacs är att kommandona i Vim är logiska för mig, till skillnad från Emacs.
Det kanske mest förvirrande med Vim i början är omställningen till att arbeta i olika "lägen". Om man är bekant med ämnet människa-dator-interaktion (MDI) så är det detta man försöker undvika när man konstruerar system med "modeless interaction", något man blankt struntat i när det gäller Vim.
I Vi/Vim finns tre lägen:
kommandoläge |
Redigeringsläget eller ursprungsläget som man alltid kommer tillbaka till genom att trycka ESC .
|
i
|
inmatningsläget (från engelska "insert") då Vi/Vim fungerar som en vanlig textredigerare. |
v
|
visuellt läge (från engelska "visual"). Används för att markera text som man sedan kan ta bort, kopiera m.m. Shift-V för radvis markering.
|
Det är i Vims redigeringsläge som man kommer åt den mer kraftfulla funktionaliteten. Detta gör man genom att ange kommandon, vilka i sin tur går att dela upp i olika typer.
Dessa är kommandon som påverkar filen man redigerar, Vim eller liknande. Med några få undantag påverkar dessa inte själva texten man redigerar. Gemensamt för dessa är att de alla påbörjas med ett ':'
(kolon).
:q
|
Avslutar Vim (från engelska quit). Kan ta argument såsom '!' (utropstecken).
|
:w
|
Sparar filen man arbetar med (från engelska write). Kan ta argument såsom ett filnamn: :w minfil.p . Obs! Inte samma sak som 'spara som'.
|
:wq
|
Skriver till fil och avslutar. |
:help
|
Öppnar Vims inbyggda hjälptexter (omfattande!), avslutas lämpligtvis med :q .
|
Dessa kommandon används för att påverka själva texten. De behöver inte föregås av ett ':'
(kolon). De kan ofta följas av ett argument av något slag. Dessa argument kan dessutom vara sammansatta i vissa fall.
d<arg>
|
Radera (från engelska delete). |
d<piltangent>
|
Radera ett steg i piltangentens riktning; sidled = ett tecken, höjdled = en rad. |
dw
|
Radera till slutet av nuvarande ord (w från engelska word).
|
dd
|
Radera hela raden. |
y<arg>
|
Kopiera (från engelska yank, dvs. 'ryck'). |
y<piltangent>
|
Rycker (kopierar) ett steg i piltangentens riktning; sidled = ett tecken, höjdled = en rad. |
yw
|
Rycker (kopierar) till slutet av nuvarande ord (w från engelska word).
|
yy
|
Rycker (kopierar) hela raden. |
u
|
Ångrar det man just gjorde (från engelska undo). Kan utföras flera gånger för att ångra X antal saker man just har utfört. |
p
|
Klistrar in (från engelska put) det man just kopierade eller raderade (y och d ) på platsen efter markören. Om man har kopierat en hel rad(er) klistras den in på nästkommande rad.
|
Här följer en del av de saker jag ofta använder mig av.
Sökning samt ersätning av ord, uttryck m.m. liknar mycket det som används i t.ex. perl för s.k. regex (regular expressions).
Sök & ersätt | |
---|---|
/<ord-uttryck>/
|
Sök/matcha ord/uttryck (jmf. perl) |
:s/<ord-uttryck>/<ord2-uttryck>/<växel>
|
Radvis sök-ersätt ord/uttryck (jmf. perl) |
:%s///
|
sök-ersätt i hela dokumentet |
&
|
Upprepa senaste ersättningen. |
Sökuttrycken kan man dessutom modifiera med s k växlar enligt mallen :s/<args>/<args2>/<växel>
Växlar | |
---|---|
g
|
Sök och ersätt hela raden, normalt ersätts endast första förekomsten. |
c
|
Bekräfta vid varje sökning. |
i
|
Ignorera skiftkänslighet vid sökning/ersättning (från engelska case insensitive). |
I sökuttryck räknas dessutom vissa tecken som specialtecken för att skapa mer avancerade sökuttryck. Om man då vill ersätta just dessa tecken måste man ange att de inte ska vara speciella (och vice versa i vissa fall) m h a "\
"-tecknet vilket har föranlett det som kallas leaning toothpick syndrome när det rör sig om riktigt avancerade sökuttryck. Här kan man läsa mer om regex (visserligen för Perl men skillnaden är inte så stor).
Exempel på enkla sökuttryck: | |
---|---|
:s/</\</g
|
Ersätter alla < på en hel rad med < som är html-kodningen för det tecknet.
|
I Vim kan man samtidigt redigera flera filer i olika fönster samt växla mellan olika filer (buffertar).
Buffertar | |
---|---|
:e filnamn
|
Öppnar ny buffert med filen filnamn |
:e #N
|
Växlar till buffert med nr N. |
Fönsterhantering | |
---|---|
Ctrl-W <piltangent> | Växla fönster |
Ctrl-W s | Dela horisontelt (från engelska split). |
Ctrl-W v | Dela vertikalt (split vertical) |
:help windows-intro
|
Öppnar hjälpavsnittet om fönster i Vim. |
Gott & blandat | |
---|---|
=G
|
Autoindenterar allting från markören framåt/neråt. |
=H
|
Autoindenterar allting från markören bakåt/uppåt. |
I Vim finns ett otal olika miljövariabler som kan sättas. Om man vill att dessa ska bestå kan man skriva in dem i en inställningsfil som på *nix-system oftast heter .vimrc
. Den ligger oftast rotkatalogen för ens användarkonto.
Här är min .vimrc-fil:
# #-tecken anger en kommentar # för syntaxfärgning av html, c, c++, java etc. syntax on # sätter tabbavstånd till 8 (=default) set tabstop=8 # sätter mjuka tabbstoppar redan vid 4 för kod- # indenteringens skull set softtabstop=4 # som ovanstående ungefär set shiftwidth=4 # för att möjliggöra autoindentering filetype plugin indent on
För att åstadkomma syntaxfärgning direkt i programmet som i ovanstående skriver man helt enkelt :syntax on
, dock blir detta inte persistent bortom nuvarande session.