vi(1p): Skillnad mellan sidversioner

Från Wiki.linux.se -Linux wikipedia på Svenska.
Hoppa till navigering Hoppa till sök
(Skapade sidan med '{{DISPLAYTITLE:vi(1p)}} == PROLOG == Denna manualsida är en del av POSIX Programmer's Manual. Linux-implementationen av detta gränssnitt kan skilja sig från POSIX-beskrivningen. Se motsvarande Linux-manualsida för detaljer om Linux-specifikt beteende. Det är också möjligt att gränssnittet inte är implementerat på Linux. == NAMN == '''vi''' – skärmorienterad, visuell textredigerare == SYNOPSIS == <pre> vi [-rR] [-c kommando] [-t taggsträng] [-w storlek...')
 
 
(2 mellanliggande sidversioner av samma användare visas inte)
Rad 3: Rad 3:
== PROLOG ==
== PROLOG ==


Denna manualsida är en del av POSIX Programmer's Manual. Linux-implementationen av detta gränssnitt kan skilja sig från POSIX-beskrivningen. Se motsvarande Linux-manualsida för detaljer om Linux-specifikt beteende. Det är också möjligt att gränssnittet inte är implementerat på Linux.
Denna sida bygger på POSIX-manualsidan '''vi(1p)'''.
 
POSIX-manualen beskriver det standardiserade gränssnittet för '''vi'''. En faktisk Linux-implementation kan skilja sig från POSIX-beskrivningen. Vissa system använder till exempel '''nvi''', '''vim''', '''busybox vi''' eller andra implementationer.


== NAMN ==
== NAMN ==


'''vi''' – skärmorienterad, visuell textredigerare
'''vi''' – skärmorienterad visuell textredigerare


== SYNOPSIS ==
== SYNOPSIS ==
Rad 17: Rad 19:
== BESKRIVNING ==
== BESKRIVNING ==


Verktyget '''vi''' är en skärmorienterad textredigerare.
'''vi''' är en skärmorienterad textredigerare. Den används för att redigera textfiler direkt i en terminal.


Denna POSIX-manual beskriver endast redigerarens '''open'''- och '''visual'''-lägen. Se även linjeredigeraren [[ex(1p)]] för ytterligare redigeringsmöjligheter som används i '''vi'''.
POSIX-definitionen av '''vi''' beskriver framför allt redigerarens visuella läge och öppna läge. '''vi''' är nära kopplad till linjeredigeraren '''ex'''. Många kommandon i '''vi''' är i själva verket '''ex'''-kommandon som körs genom att man skriver kolon följt av kommandot.


Användaren kan växla mellan '''vi''' och '''ex''' och köra '''ex'''-kommandon inifrån '''vi'''.
Exempel:


Denna manualsida använder termen ''redigeringsbuffert'' för att beskriva den text som för närvarande redigeras. Termen innebär inte någon särskild intern implementation. Alla redigeringsändringar utförs i redigeringsbufferten, och inga ändringar påverkar någon fil förrän ett redigerarkommando skriver filen.
<pre>
:w
:q
:wq
:set number
:%s/gammalt/nytt/g
</pre>
 
I '''vi''' finns texten som redigeras i en redigeringsbuffert. Ändringar påverkar inte filen på disken förrän användaren skriver bufferten till fil, till exempel med kommandot '''':w'''.
 
Terminalskärmen fungerar som ett fönster in i redigeringsbufferten. Markörens position visar aktuell plats i bufferten.


När '''vi''' används fungerar terminalskärmen som ett fönster in i redigeringsbufferten. Ändringar i bufferten ska återspeglas på skärmen. Markörens position på skärmen anger positionen i redigeringsbufferten.
== VIKTIGA LÄGEN ==


Vissa terminaler saknar alla funktioner som krävs för att stödja hela POSIX-definitionen av '''vi'''. När kommandon inte kan stödjas på sådana terminaler ska detta inte nödvändigtvis rapporteras som ett vanligt kommandofel. Implementationer kan antingen försöka utföra kommandot eller rapportera ett fel som beskriver terminalens begränsning.
=== Kommandoläge ===


== OPTIONER ==
När '''vi''' startar befinner sig redigeraren normalt i kommandoläge. I detta läge tolkas tangenttryckningar som kommandon.
 
Exempel:
 
<pre>
h    flytta markören åt vänster
j    flytta markören nedåt
k    flytta markören uppåt
l    flytta markören åt höger
x    ta bort tecknet under markören
dd  ta bort aktuell rad
:w  skriv filen
:q  avsluta
</pre>


'''vi''' följer POSIX.1-2017, Base Definitions, avsnitt 12.2, ''Utility Syntax Guidelines'', med undantaget att '''+''' kan tolkas som optionsavgränsare utöver '''-'''.
=== Inmatningsläge ===


'''-c''' ''kommando''
I inmatningsläge skrivs tecken in som text i filen.


: Se beskrivningen av optionen '''-c''' för [[ex(1p)]]. Används för att köra ett kommando vid start.
Vanliga kommandon för att gå till inmatningsläge:


'''-r'''
<pre>
i    infoga före markören
a    infoga efter markören
I    infoga vid radens början
A    infoga vid radens slut
o    öppna en ny rad under aktuell rad
O    öppna en ny rad över aktuell rad
</pre>


: Se beskrivningen av optionen '''-r''' för [[ex(1p)]]. Används vanligen för att återställa filer efter krasch.
För att lämna inmatningsläget används:


'''-R'''
<pre>
Esc
</pre>


: Se beskrivningen av optionen '''-R''' för [[ex(1p)]]. Startar normalt i skrivskyddat läge.
=== Ex-läge ===


'''-t''' ''taggsträng''
Ex-läget nås genom att skriva kolon i kommandoläge. Då kan man skriva ett '''ex'''-kommando.


: Se beskrivningen av optionen '''-t''' för [[ex(1p)]]. Öppnar vid en tagg.
Exempel:


'''-w''' ''storlek''
<pre>
:w
:q
:q!
:wq
:set number
:set nonumber
:%s/foo/bar/g
</pre>


: Se beskrivningen av optionen '''-w''' för [[ex(1p)]].
== OPTIONER ==


== OPERANDER ==
'''-c''' ''kommando''


Se avsnittet OPERANDER i manualen för [[ex(1p)]] för en beskrivning av de operander som stöds av '''vi'''.
: Kör det angivna kommandot efter att den första filen har lästs in.


Vanligtvis anger operanden en eller flera filer som ska öppnas:
Exempel:


<pre>
<pre>
vi fil.txt
vi -c 'set number' fil.txt
vi fil1.txt fil2.txt
</pre>
</pre>


== STANDARDINMATNING ==
'''-r'''


Om standardinmatningen inte är en terminalenhet är resultatet odefinierat.
: Återställ en fil efter en tidigare avbruten redigeringssession, om implementationen stöder sådan återställning.


Standardinmatningen består av en följd av kommandon och inmatad text, enligt den utökade beskrivningen.
Exempel:


Om läsning från standardinmatningen ger ett fel, eller om redigeraren upptäcker filslut från standardinmatningen, ska det motsvara en asynkron '''SIGHUP'''-händelse.
<pre>
vi -r fil.txt
</pre>


== INDATAFILER ==
'''-R'''


Se avsnittet INDATAFILER i manualen för [[ex(1p)]].
: Öppna filen i skrivskyddat läge. Detta motsvarar normalt att sätta redigerarens '''readonly'''-alternativ.


== MILJÖVARIABLER ==
Exempel:


Se avsnittet MILJÖVARIABLER i manualen för [[ex(1p)]] för miljövariabler som påverkar '''vi'''.
<pre>
vi -R fil.txt
</pre>


Vanliga miljövariabler som i praktiken ofta påverkar '''vi'''-liknande redigerare är bland annat:
'''-t''' ''taggsträng''


'''TERM'''
: Öppna redigeraren vid den plats som motsvarar taggen ''taggsträng''. Detta används tillsammans med taggfiler, ofta skapade av '''ctags'''.


: Anger terminaltyp.
Exempel:


'''HOME'''
<pre>
vi -t main
</pre>


: Används ofta för att hitta användarens konfigurationsfiler.
'''-w''' ''storlek''


'''EXINIT'''
: Anger fönsterstorlek eller relaterad skärminställning enligt implementationens och '''ex'''-manualens beskrivning.


: Kan användas av vissa implementationer för initialiseringskommandon.
== OPERANDER ==


'''SHELL'''
''fil''


: Anger skal som används när redigeraren kör externa kommandon.
: En eller flera filer som ska öppnas för redigering.


== ASYNKRONA HÄNDELSER ==
Exempel:


Se avsnittet ASYNKRONA HÄNDELSER i manualen för [[ex(1p)]].
<pre>
vi fil.txt
vi fil1.txt fil2.txt
</pre>


== STANDARDUTMATNING ==
Om flera filer anges kan man växla mellan dem med '''ex'''-kommandon som:


Om standardutmatningen inte är en terminalenhet är resultatet odefinierat.
<pre>
:n
:next
:prev
:rewind
</pre>


Standardutmatningen kan användas för att skriva prompter till användaren, informationsmeddelanden och rader från filen.
== STANDARDINMATNING ==


== STANDARDFEL ==
'''vi''' är en interaktiv terminalredigerare. Om standardinmatningen inte är en terminal är resultatet odefinierat enligt POSIX.


Om standardutmatningen inte är en terminalenhet är resultatet odefinierat.
== STANDARDUTMATNING OCH STANDARDFEL ==


Standardfel ska endast användas för diagnostiska meddelanden.
'''vi''' förutsätter normalt att både inmatning och utmatning sker via en terminal. Skärmen används för redigeringsfönstret, meddelanden, statusrader och kommandorad.


== UTFILER ==
Diagnostiska meddelanden skrivs normalt till terminalen.


Se avsnittet UTFILER i manualen för [[ex(1p)]].
== MILJÖVARIABLER ==


== UTÖKAD BESKRIVNING ==
Följande miljövariabler är särskilt viktiga för '''vi'''-liknande redigerare.


Om terminalen saknar de funktioner som krävs för att stödja någon del av POSIX-definitionen av '''vi''', ska implementationer börja i '''ex'''-läge eller '''open'''-läge.
'''TERM'''


Efter initiering ska '''vi''' normalt vara i kommandoläge. Textinmatningsläge kan nås med flera kommandon som används för att infoga eller ändra text.
: Anger terminaltyp. Redigeraren använder terminaltypen för att veta hur skärmen ska styras.


I textinmatningsläge används '''Esc''' för att återgå till kommandoläge.
'''HOME'''


== LÄGEN I VI ==
: Används ofta för att hitta användarens konfigurationsfiler.


=== Kommandoläge ===
'''SHELL'''


Detta är standardläget när '''vi''' startar. Tangenter tolkas som kommandon, till exempel för att flytta markören, ta bort text, söka, spara eller avsluta.
: Anger vilket skal som används när externa kommandon körs.


Exempel:
'''EXINIT'''


<pre>
: Kan användas av vissa implementationer för initialiseringskommandon.
h    flytta vänster
j    flytta ned
k    flytta upp
l    flytta höger
x    ta bort tecken
:w  spara
:q  avsluta
</pre>


=== Textinmatningsläge ===
== GRUNDLÄGGANDE ARBETSGÅNG ==


I detta läge skrivs tecken in i bufferten som vanlig text.
Öppna en fil:
 
Du går in i textinmatningsläge med kommandon som:


<pre>
<pre>
i    infoga före markören
vi fil.txt
a    infoga efter markören
o    öppna ny rad under aktuell rad
O    öppna ny rad över aktuell rad
</pre>
</pre>


Du lämnar textinmatningsläget med:
Gå till inmatningsläge:


<pre>
<pre>
Esc
i
</pre>
</pre>


=== Ex-läge ===
Skriv text.


Kommandon som börjar med kolon, ''':'', körs som '''ex'''-kommandon.
Gå tillbaka till kommandoläge:
 
Exempel:


<pre>
<pre>
:w
Esc
:q
:wq
:q!
:set number
:%s/gammalt/nytt/g
</pre>
</pre>


== SYMBOLER I KOMMANDOBESKRIVNINGAR ==
Spara filen:
 
'''buffer'''
 
: Se beskrivningen av ''buffer'' i manualen för [[ex(1p)]].
 
'''count'''
 
: Ett positivt heltal som kan användas som valfritt argument till många kommandon. Det anger oftast repetitionsantal eller storlek. Om inget anges används normalt 1.
 
Exempel:


<pre>
<pre>
3j
:w
5x
10dd
</pre>
</pre>


'''motion'''
Avsluta:
 
: Ett rörelsekommando som används som argument till kommandon som påverkar textområden, till exempel:


<pre>
<pre>
!
:q
<
>
c
d
y
</pre>
</pre>


Exempel:
Spara och avsluta:


<pre>
<pre>
dw    ta bort till nästa ord
:wq
d$    ta bort till radslut
y}    kopiera till nästa stycke
c0    ändra till radens början
</pre>
</pre>


== RÖRELSEKOMMANDON ==
Avsluta utan att spara:
 
Följande kommandon kan användas för markörrörelse och som rörelseargument till andra kommandon:


<pre>
<pre>
h j k l
:q!
0 $ ^
w W b B e E
( ) { }
[[ ]]
G
H M L
/ ?
n N
f F t T
; ,
| %
' `
+ -
Enter
Space
Backspace
</pre>
</pre>


== GRUNDLÄGGANDE MARKÖRRÖRELSER ==
== MARKÖRRÖRELSER ==
 
=== Enkla rörelser ===


'''h'''
'''h'''
Rad 259: Rad 256:


: Flytta ett tecken åt höger.
: Flytta ett tecken åt höger.
'''mellanslag'''
: Flytta ett tecken åt höger.
'''Backspace'''
: Flytta ett tecken åt vänster, om implementationen stöder detta.
=== Rörelser inom rad ===


'''0'''
'''0'''


: Flytta till radens första tecken.
: Flytta till radens början.


'''^'''
'''^'''
Rad 271: Rad 278:


: Flytta till radens slut.
: Flytta till radens slut.
'''|'''
: Flytta till en viss kolumn på raden. Om ett antal anges används detta som kolumnnummer.
Exempel:
<pre>
10|
</pre>
=== Rörelser mellan ord ===


'''w'''
'''w'''


: Flytta framåt till början av nästa ord.
: Flytta till början av nästa ord.


'''W'''
'''W'''


: Flytta framåt till nästa stort ord, där ord avgränsas av blanktecken.
: Flytta till början av nästa stort ord. Ett stort ord avgränsas normalt endast av blanktecken.


'''b'''
'''b'''


: Flytta bakåt till början av föregående ord.
: Flytta till början av föregående ord.


'''B'''
'''B'''


: Flytta bakåt till föregående stort ord.
: Flytta till början av föregående stort ord.


'''e'''
'''e'''


: Flytta till slutet av ordet.
: Flytta till slutet av aktuellt eller nästa ord.


'''E'''
'''E'''


: Flytta till slutet av stort ord.
: Flytta till slutet av aktuellt eller nästa stort ord.
 
== RAD- OCH FILRÖRELSER ==


'''G'''
'''G'''


: Flytta till en rad. Utan antal går kommandot till sista raden.
: Flytta till sista raden i filen. Om ett antal anges flyttas markören till den raden.


Exempel:
Exempel:


<pre>
<pre>
1G     gå till första raden
G
G      gå till sista raden
1G
25G     gå till rad 25
25G
</pre>
</pre>
'''+'''
: Flytta till första icke-blanka tecknet på nästa rad.
'''-'''
: Flytta till första icke-blanka tecknet på föregående rad.
'''Enter'''
: Flytta till första icke-blanka tecknet på nästa rad.


'''H'''
'''H'''


: Flytta till översta raden på skärmen.
: Flytta till översta raden i skärmfönstret.


'''M'''
'''M'''


: Flytta till mittenraden på skärmen.
: Flytta till mittenraden i skärmfönstret.


'''L'''
'''L'''


: Flytta till nedersta raden på skärmen.
: Flytta till nedersta raden i skärmfönstret.


'''%'''
== SKÄRMRULLNING ==


: Flytta till matchande parentes, hakparentes eller klammerparentes.
'''Ctrl-F'''


== SID- OCH SKÄRMRÖRELSER ==
: Rulla framåt en skärm.


'''Ctrl-B'''
'''Ctrl-B'''


: Sida bakåt.
: Rulla bakåt en skärm.
 
'''Ctrl-F'''
 
: Sida framåt.


'''Ctrl-D'''
'''Ctrl-D'''
Rad 344: Rad 373:
'''Ctrl-E'''
'''Ctrl-E'''


: Rulla framåt en rad.
: Rulla skärmen en rad nedåt.


'''Ctrl-Y'''
'''Ctrl-Y'''


: Rulla bakåt en rad.
: Rulla skärmen en rad uppåt.


'''Ctrl-L'''
'''Ctrl-L'''


: Rensa och rita om skärmen.
: Rita om skärmen.


'''Ctrl-R'''
'''Ctrl-R'''
Rad 360: Rad 389:
'''Ctrl-G'''
'''Ctrl-G'''


: Visa filinformation. Motsvarar i POSIX beskrivningen av '''ex file'''.
: Visa information om aktuell fil, radnummer och status.


== SÖKNING ==
== SÖKNING ==


'''/mönster'''
'''/''' ''mönster''


: Sök framåt efter ett reguljärt uttryck.
: Sök framåt efter ett mönster.


'''?mönster'''
'''?''' ''mönster''


: Sök bakåt efter ett reguljärt uttryck.
: Sök bakåt efter ett mönster.


'''n'''
'''n'''


: Upprepa senaste sökningen i samma riktning.
: Upprepa den senaste sökningen i samma riktning.


'''N'''
'''N'''


: Upprepa senaste sökningen i motsatt riktning.
: Upprepa den senaste sökningen i motsatt riktning.


Exempel:
Exempel:
Rad 389: Rad 418:
</pre>
</pre>


== TECKENSÖKNING PÅ RAD ==
== TECKENSÖKNING PÅ AKTUELL RAD ==


'''f''' ''tecken''
'''f''' ''tecken''


: Sök framåt till nästa förekomst av ''tecken'' på raden.
: Flytta framåt till nästa förekomst av tecknet på raden.


'''F''' ''tecken''
'''F''' ''tecken''


: Sök bakåt till föregående förekomst av ''tecken'' på raden.
: Flytta bakåt till föregående förekomst av tecknet på raden.


'''t''' ''tecken''
'''t''' ''tecken''


: Sök framåt till tecknet före nästa förekomst av ''tecken''.
: Flytta framåt till tecknet före nästa förekomst av det angivna tecknet.


'''T''' ''tecken''
'''T''' ''tecken''


: Sök bakåt till tecknet efter föregående förekomst av ''tecken''.
: Flytta bakåt till tecknet efter föregående förekomst av det angivna tecknet.


''';'''
''';'''
Rad 414: Rad 443:


: Upprepa senaste '''f''', '''F''', '''t''' eller '''T''' i motsatt riktning.
: Upprepa senaste '''f''', '''F''', '''t''' eller '''T''' i motsatt riktning.
== PARENTESMATCHNING ==
'''%'''
: Flytta till matchande parentes, hakparentes eller klammerparentes.
Exempel:
<pre>
( )
[ ]
{ }
</pre>


== INFOGA TEXT ==
== INFOGA TEXT ==
Rad 423: Rad 466:
'''I'''
'''I'''


: Infoga text vid början av raden, normalt före första icke-blanka tecken.
: Infoga text vid början av aktuell rad, normalt före första icke-blanka tecken.


'''a'''
'''a'''
Rad 431: Rad 474:
'''A'''
'''A'''


: Lägg till text i slutet av raden.
: Lägg till text vid radens slut.


'''o'''
'''o'''


: Öppna ny rad under aktuell rad och börja infoga text.
: Öppna en ny rad under aktuell rad och gå till inmatningsläge.


'''O'''
'''O'''


: Öppna ny rad ovanför aktuell rad och börja infoga text.
: Öppna en ny rad ovanför aktuell rad och till inmatningsläge.
 
'''Esc'''
 
: Avsluta textinmatningsläge och återgå till kommandoläge.


== ÄNDRA TEXT ==
== ERSÄTTA OCH ÄNDRA TEXT ==


'''r''' ''tecken''
'''r''' ''tecken''


: Ersätt tecknet under markören med ''tecken''.
: Ersätt tecknet under markören med det angivna tecknet.


'''R'''
'''R'''


: Gå in i ersättningsläge.
: Gå till ersättningsläge, där inskrivna tecken ersätter befintliga tecken.


'''s'''
'''s'''


: Ersätt aktuellt tecken med inmatad text.
: Ersätt aktuellt tecken med ny text.


'''S'''
'''S'''


: Ersätt hela aktuell rad med inmatad text.
: Ersätt hela aktuell rad med ny text.


'''c''' ''rörelse''
'''c''' ''rörelse''
Rad 475: Rad 514:
C      ändra till radslut
C      ändra till radslut
</pre>
</pre>
'''~'''
: Växla skiftläge på aktuellt tecken eller textområde enligt implementationens beteende.


== TA BORT TEXT ==
== TA BORT TEXT ==
Rad 494: Rad 529:
: Ta bort textområdet som anges av rörelsen.
: Ta bort textområdet som anges av rörelsen.


Exempel:
Vanliga former:


<pre>
<pre>
Rad 501: Rad 536:
d0    ta bort till radbörjan
d0    ta bort till radbörjan
dd    ta bort aktuell rad
dd    ta bort aktuell rad
D      ta bort till radslut
</pre>
Med antal:
<pre>
3dd    ta bort tre rader
3dd    ta bort tre rader
D      ta bort till radslut
5x    ta bort fem tecken
</pre>
</pre>


== KOPIERA OCH KLISTRA IN ==
== KOPIERA TEXT ==


'''y''' ''rörelse''
'''y''' ''rörelse''
Rad 511: Rad 552:
: Kopiera textområdet som anges av rörelsen.
: Kopiera textområdet som anges av rörelsen.


Exempel:
Vanliga former:


<pre>
<pre>
Rad 517: Rad 558:
y$    kopiera till radslut
y$    kopiera till radslut
yy    kopiera aktuell rad
yy    kopiera aktuell rad
Y      kopiera aktuell rad
</pre>
Med antal:
<pre>
3yy    kopiera tre rader
3yy    kopiera tre rader
Y      kopiera rad
</pre>
</pre>
== KLISTRA IN TEXT ==


'''p'''
'''p'''


: Klistra in efter markören eller efter aktuell rad, beroende på buffertens typ.
: Klistra in efter markören eller efter aktuell rad, beroende på vilken typ av text som kopierats eller tagits bort.


'''P'''
'''P'''
Rad 533: Rad 581:
'''u'''
'''u'''


: Ångra senaste ändringen.
: Ångra senaste ändring.


'''U'''
'''U'''


: Ångra ändringar på aktuell rad, enligt klassiskt vi-beteende.
: Ångra ändringar på aktuell rad enligt klassiskt '''vi'''-beteende.


'''.'''
'''.'''
Rad 547: Rad 595:
: Upprepa senaste substitutionskommando.
: Upprepa senaste substitutionskommando.


== INDENTERING OCH FILTER ==
== INDENTERING ==


'''<''' ''rörelse''
'''<''' ''rörelse''
Rad 557: Rad 605:
: Skjut textområdet åt höger.
: Skjut textområdet åt höger.


'''!''' ''rörelse kommando''
Vanliga former:
 
<pre>
>>    skjut aktuell rad åt höger
<<    skjut aktuell rad åt vänster
>G    skjut från aktuell rad till filens slut åt höger
</pre>
 
== FILTRERA TEXT GENOM KOMMANDO ==
 
'''!''' ''rörelse'' ''kommando''


: Filtrera textområdet genom ett skalkommando och ersätt texten med kommandots utmatning.
: Skicka textområdet till ett externt kommando och ersätt området med kommandots utmatning.


Exempel:
Exempel:
Rad 568: Rad 626:
</pre>
</pre>


== MÄRKEN OCH HOPP ==
== MÄRKEN ==


'''m''' ''tecken''
'''m''' ''tecken''


: Sätt ett märke med namnet ''tecken'' på aktuell position.
: Sätt ett märke på aktuell position.


''''''' ''tecken''
'''\'''' ''tecken''


: Hoppa till början av raden där märket finns.
: Hoppa till raden där märket finns.


'''`''' ''tecken''
'''`''' ''tecken''
Rad 590: Rad 648:
</pre>
</pre>


== TAGGAR ==
== BUFFERTAR ==
 
Många '''vi'''-kommandon kan använda namngivna buffertar. En buffert anges ofta med dubbelcitat följt av buffertnamn.
 
Exempel:
 
<pre>
"ayy
"ap
</pre>
 
Detta kopierar en rad till buffert '''a''' och klistrar sedan in från buffert '''a'''.
 
== KOMMANDON MED ANTAL ==
 
Många kommandon kan föregås av ett antal.
 
Exempel:
 
<pre>
5j      flytta fem rader nedåt
3w      flytta tre ord framåt
10x    ta bort tio tecken
4dd    ta bort fyra rader
2yy    kopiera två rader
</pre>
 
== RÖRELSE SOM ARGUMENT ==
 
Flera kommandon använder ett rörelsekommando som argument. Det gäller bland annat:
 
<pre>
c
d
y
!
<
>
</pre>
 
Exempel:
 
<pre>
dw      ta bort till nästa ord
cw      ändra till nästa ord
y$      kopiera till radslut
d}      ta bort till nästa stycke
!Gsort  sortera från aktuell rad till filens slut
</pre>
 
== MENINGAR, STYCKEN OCH SEKTIONER ==
 
'''('''
 
: Flytta till början av föregående mening.
 
''')'''
 
: Flytta till början av nästa mening.
 
'''{'''
 
: Flytta till början av föregående stycke.
 
'''}'''
 
: Flytta till början av nästa stycke.
 
'''[['''
 
: Flytta till föregående sektionsgräns.
 
''']]'''


'''Ctrl-]'''
: Flytta till nästa sektionsgräns.


: Sök efter taggen under markören. Detta motsvarar ett '''ex tag'''-kommando med ordet under markören som argument.
== EX-KOMMANDON I VI ==


== SPARA OCH AVSLUTA ==
Kolon används för att köra '''ex'''-kommandon.


''':w'''
'''':w'''


: Spara filen.
: Skriv bufferten till fil.


''':w filnamn'''
'''':w''' ''fil''


: Spara till angiven fil.
: Skriv bufferten till angiven fil.


''':q'''
'''':q'''


: Avsluta.
: Avsluta om inga osparade ändringar finns.


''':q!'''
'''':q!'''


: Avsluta utan att spara ändringar.
: Avsluta utan att spara.


''':wq'''
'''':wq'''


: Spara och avsluta.
: Spara och avsluta.


'''ZZ'''
'''':x'''


: Spara och avsluta om ändringar finns.
: Spara och avsluta.


''':x'''
'''':e''' ''fil''


: Spara och avsluta, i många implementationer endast om filen ändrats.
: Redigera en annan fil.


== RADKOMMANDON OCH EX-KOMMANDON ==
'''':e!'''


Kommandon som börjar med kolon körs som '''ex'''-kommandon.
: Läs om aktuell fil från disk och kasta osparade ändringar.


Exempel:
'''':r''' ''fil''
 
: Läs in en fil efter aktuell rad.
 
'''':set''' ''alternativ''
 
: Sätt ett redigeringsalternativ.
 
'''':set all'''
 
: Visa alla alternativ.
 
'''':set number'''
 
: Visa radnummer.
 
'''':set nonumber'''


<pre>
: Dölj radnummer.
:set number
:set nonumber
:1
:$
:25
:%s/gammalt/nytt/g
:read fil.txt
:write
:quit
</pre>


== SUBSTITUTION ==
== SUBSTITUTION ==


Ett vanligt '''ex'''-kommando i '''vi''' är substitution:
Substitution görs med '''ex'''-kommandot '''s'''.
 
Byt första förekomsten på aktuell rad:


<pre>
<pre>
Rad 652: Rad 790:
</pre>
</pre>


Byt första förekomsten på aktuell rad.
Byt alla förekomster på aktuell rad:


<pre>
<pre>
Rad 658: Rad 796:
</pre>
</pre>


Byt alla förekomster på aktuell rad.
Byt alla förekomster i hela filen:


<pre>
<pre>
Rad 664: Rad 802:
</pre>
</pre>


Byt alla förekomster i hela filen.
Fråga före varje byte:


<pre>
<pre>
Rad 670: Rad 808:
</pre>
</pre>


Byt alla förekomster i hela filen, men fråga före varje ändring.
Byt i ett radintervall:


== BUFFERT, ORD OCH STORA ORD ==
<pre>
:10,20s/gammalt/nytt/g
</pre>


I POSIX-lokalen känner '''vi''' igen både ''ord'' och ''stora ord''.
== TAGGAR ==


Ett ''ord'' är normalt en maximal följd av bokstäver, siffror och understreck, eller en maximal följd av andra icke-blanka skiljetecken.
'''Ctrl-]'''


Ett ''stort ord'' är en maximal följd av icke-blanka tecken som avgränsas av blanktecken.
: Hoppa till taggen under markören.


Detta påverkar rörelsekommandon som:
''':tag''' ''namn''
 
: Hoppa till angiven tagg.
 
Taggar används vanligen tillsammans med en taggfil som skapats med '''ctags'''.
 
== SPARA OCH AVSLUTA ==
 
Spara:
 
<pre>
:w
</pre>
 
Spara till annat filnamn:
 
<pre>
:w nyfil.txt
</pre>
 
Avsluta:
 
<pre>
:q
</pre>
 
Avsluta utan att spara:


<pre>
<pre>
w W b B e E
:q!
</pre>
</pre>


== MENINGAR, STYCKEN OCH SEKTIONER ==
Spara och avsluta:
 
<pre>
:wq
</pre>


'''vi''' definierar gränser för meningar, stycken och sektioner. Dessa används av rörelsekommandon som:
Klassiskt kortkommando för spara och avsluta:


<pre>
<pre>
( )
ZZ
{ }
[[ ]]
</pre>
</pre>


'''('''
== SKAL-KOMMANDON ==
 
''':!''' ''kommando''
 
: Kör ett skalkommando.


: Flytta bakåt till början av föregående mening.
Exempel:


''')'''
<pre>
:!ls
:!date
</pre>


: Flytta framåt till början av nästa mening.
''':sh'''


'''{'''
: Starta ett skal. Återgå till redigeraren genom att avsluta skalet.


: Flytta bakåt till början av föregående stycke.
== REDIGERINGSALTERNATIV ==


'''}'''
Vanliga alternativ i '''vi''' eller '''ex''':


: Flytta framåt till början av nästa stycke.
'''number'''


'''[['''
: Visa radnummer.


: Flytta bakåt till föregående sektionsgräns.
'''nonumber'''


''']]'''
: Dölj radnummer.


: Flytta framåt till nästa sektionsgräns.
'''readonly'''


== FELHANTERING ==
: Ange att filen är skrivskyddad.


Om ett fel inträffar vid tolkning eller körning av ett '''vi'''-kommando ska terminalen varnas. Kommandots körning stoppas, och markören ska inte modifieras vidare.
'''ignorecase'''


Om felet uppstod under expansion av en mappning ska tecken från expansionen normalt kastas bort.
: Gör sökning okänslig för versaler och gemener.


Om felet uppstod under körning av en buffert ska inga ytterligare kommandon från bufferten köras.
'''noignorecase'''


== EXEMPEL ==
: Gör sökning känslig för versaler och gemener.


Öppna en fil:
'''autoindent'''


<pre>
: Behåll indrag vid ny rad.
vi fil.txt
</pre>


Öppna flera filer:
'''noautoindent'''


<pre>
: Stäng av automatisk indragning.
vi fil1.txt fil2.txt
</pre>


Starta och kör ett kommando direkt:
Exempel:


<pre>
<pre>
vi -c 'set number' fil.txt
:set number
:set nonumber
:set ignorecase
:set noignorecase
:set autoindent
:set noautoindent
</pre>
</pre>


Öppna filen och hoppa till en tagg:
== FEL OCH DIAGNOSTIK ==


<pre>
Om ett kommando inte kan utföras ska '''vi''' normalt ge en signal till användaren, ofta genom ett ljud, en visuell signal eller ett felmeddelande på kommandoraden.
vi -t main
</pre>


Återställ en fil efter krasch, om implementationen stöder det:
Exempel på fel:


<pre>
* försök att avsluta utan att spara ändringar
vi -r fil.txt
* försök att skriva till en fil utan behörighet
</pre>
* okänd kommandoform
* sökmönster som inte hittas
* rörelse förbi filens början eller slut


Öppna skrivskyddat:
== AVSLUTNINGSSTATUS ==


<pre>
POSIX anger normalt att verktyg returnerar 0 när de slutförts utan fel och ett värde större än 0 när ett fel inträffat. För interaktiva redigerare kan exakt beteende bero på implementationen.
vi -R fil.txt
</pre>


== PRAKTISK SNABBREFERENS ==
== PRAKTISK SNABBREFERENS ==
Rad 771: Rad 945:
! Kommando !! Betydelse
! Kommando !! Betydelse
|-
|-
| '''i''' || Infoga före markören
| '''i''' || Börja infoga text före markören
|-
|-
| '''a''' || Infoga efter markören
| '''a''' || Börja infoga text efter markören
|-
|-
| '''Esc''' || Återgå till kommandoläge
| '''Esc''' || Återgå till kommandoläge
|-
|-
| '''h j k l''' || Flytta vänster, ned, upp, höger
| '''h''' || Flytta vänster
|-
| '''j''' || Flytta ned
|-
| '''k''' || Flytta upp
|-
| '''l''' || Flytta höger
|-
|-
| '''0''' || Gå till radens början
| '''0''' || Gå till radens början
Rad 794: Rad 974:
|-
|-
| '''p''' || Klistra in efter
| '''p''' || Klistra in efter
|-
| '''P''' || Klistra in före
|-
|-
| '''u''' || Ångra
| '''u''' || Ångra
Rad 803: Rad 985:
| '''?text''' || Sök bakåt
| '''?text''' || Sök bakåt
|-
|-
| '''n''' || Nästa sökträff
| '''n''' || Upprepa sökning
|-
| '''N''' || Upprepa sökning åt andra hållet
|-
|-
| ''':w''' || Spara
| ''':w''' || Spara
Rad 812: Rad 996:
|-
|-
| ''':wq''' || Spara och avsluta
| ''':wq''' || Spara och avsluta
|-
| '''ZZ''' || Spara och avsluta
|}
|}


== AVSLUTNINGSSTATUS ==
== EXEMPEL ==
 
Öppna en fil:
 
<pre>
vi fil.txt
</pre>
 
Öppna en fil skrivskyddat:
 
<pre>
vi -R fil.txt
</pre>
 
Starta med radnummer aktiverade:
 
<pre>
vi -c 'set number' fil.txt
</pre>
 
Öppna vid taggen '''main''':
 
<pre>
vi -t main
</pre>
 
Sök efter ordet '''main''':
 
<pre>
/main
</pre>
 
Byt alla förekomster av '''foo''' till '''bar''':
 
<pre>
:%s/foo/bar/g
</pre>


POSIX-manualens avslutningsstatus för '''vi''' hänvisar till beteendet i '''ex''' och implementationens hantering av fel.
Ta bort fem rader:


I praktiken returneras normalt 0 vid lyckad körning och ett värde större än 0 vid fel.
<pre>
5dd
</pre>


== KONSEKVENSER AV FEL ==
Kopiera tre rader och klistra in dem:


Se motsvarande avsnitt för [[ex(1p)]] och POSIX-beskrivningen.
<pre>
3yy
p
</pre>


== ANVÄNDNING I PROGRAM ==
== ANVÄNDNING I SKRIPT ==


'''vi''' är i första hand en interaktiv redigerare och lämpar sig normalt inte som filter i skript.
'''vi''' är avsedd för interaktiv redigering. För automatiserad textbearbetning används normalt andra verktyg.


För skriptmässig textbearbetning används normalt verktyg som:
Exempel på bättre verktyg i skript:


* [[sed(1)]]
* [[sed(1)]]
Rad 835: Rad 1 062:
* [[ex(1p)]]
* [[ex(1p)]]


== BAKGRUND OCH MOTIVERING ==
== SKILLNAD MELLAN VI OCH MODERNA IMPLEMENTATIONER ==


'''vi''' bygger historiskt på '''ex''' och den äldre UNIX-redigerartraditionen. POSIX beskriver de delar som krävs för portabelt beteende i '''open'''- och '''visual'''-lägena.
POSIX beskriver en standardiserad kärna av '''vi'''.


Många moderna implementationer, till exempel Vim, nvi och BusyBox vi, erbjuder fler funktioner än POSIX kräver.
Moderna implementationer kan ha många extra funktioner, till exempel:


== FRAMTIDA RIKTNINGAR ==
* syntaxfärgning
* flera ångranivåer
* fönster och flikar
* utökade reguljära uttryck
* plugins
* Unicode-funktioner
* musintegration


Inga särskilda framtida riktningar anges i den här sammanfattade MediaWiki-versionen.
Sådana funktioner är inte nödvändigtvis portabla enligt POSIX.


== SE ÄVEN ==
== SE ÄVEN ==
Rad 851: Rad 1 084:
* [[sed(1)]]
* [[sed(1)]]
* [[awk(1)]]
* [[awk(1)]]
* [[ctags(1)]]
* [[stty(1)]]
* [[stty(1)]]
* [[ctags(1)]]
POSIX.1-2017, Base Definitions:
* Avsnitt 12.2, ''Utility Syntax Guidelines''


== COPYRIGHT ==
== COPYRIGHT ==


Delar av denna text är återgivna och reproducerade i elektronisk form från IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition, Copyright (C) 2018 by Institute of Electrical and Electronics Engineers, Inc och The Open Group.
Delar av originaltexten i POSIX-manualen är återgivna och reproducerade i elektronisk form från IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition.
 
Om det finns någon avvikelse mellan denna version och den ursprungliga standarden från IEEE och The Open Group är den ursprungliga standarden den avgörande referensen. Den ursprungliga standarden kan hämtas online på:


http://www.opengroup.org/unix/online.html
Om det finns någon avvikelse mellan denna bearbetade svenska version och den ursprungliga standarden från IEEE och The Open Group är den ursprungliga standarden den avgörande referensen.


Typografiska fel eller formateringsfel på denna manualsida har troligen uppstått vid konvertering av källfilerna till manualsidesformat. Sådana fel kan rapporteras enligt informationen på:
Den ursprungliga standarden kan hämtas online från The Open Group.
 
https://www.kernel.org/doc/man-pages/reporting_bugs.html


== KORT SAMMANFATTNING ==
== KORT SAMMANFATTNING ==


'''vi''' är en klassisk skärmorienterad textredigerare.
'''vi''' är en klassisk terminalbaserad textredigerare.


Starta:
Öppna fil:


<pre>
<pre>
Rad 880: Rad 1 105:
</pre>
</pre>


Skriv text:
Infoga text:


<pre>
<pre>
i
i
text...
</pre>
 
Lämna inmatningsläge:
 
<pre>
Esc
Esc
</pre>
</pre>
Rad 912: Rad 1 141:
</pre>
</pre>


De viktigaste lägena är:
Det viktigaste att komma ihåg är att '''vi''' har olika lägen. Om något inte fungerar som väntat, tryck '''Esc''' för att återgå till kommandoläge.
 
* kommandoläge
* textinmatningsläge
* ex-läge
 
De viktigaste tangenterna att komma ihåg är:
 
<pre>
i    börja infoga text
Esc tillbaka till kommandoläge
:w  spara
:q  avsluta
:q!  avsluta utan att spara
</pre>


== ANMÄRKNING OM DENNA ÖVERSÄTTNING ==
= Sidslut =


Manualsidan '''vi(1p)''' är mycket omfattande och innehåller en mycket lång formell POSIX-definition av alla öppna och visuella kommandon, rörelser, textregioner, buffertar, reguljära uttryck, kommandolägen och felvillkor.
Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/vi.1p.html
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
<BR><BR>Tack till [https://datorhjalp.se/web/datorhjalp-hemma// Datorhjälp hemma] som har  sponsrat [https://www.linux.se Linux.se] med webbhotell.


Denna MediaWiki-fil innehåller en svensk översättning och praktisk bearbetning av huvuddelarna, inledningen, optionerna, centrala POSIX-begrepp och de viktigaste kommandona. Den är avsedd som en användbar svensk wikiartikel snarare än en ord-för-ord-kopia av hela den mycket långa POSIX-specifikationen.
[[Kategori:Linuxmanual grupp 1]]
[[Kategori:Linuxmanual]]

Nuvarande version från 1 juni 2026 kl. 06.16


PROLOG

Denna sida bygger på POSIX-manualsidan vi(1p).

POSIX-manualen beskriver det standardiserade gränssnittet för vi. En faktisk Linux-implementation kan skilja sig från POSIX-beskrivningen. Vissa system använder till exempel nvi, vim, busybox vi eller andra implementationer.

NAMN

vi – skärmorienterad visuell textredigerare

SYNOPSIS

vi [-rR] [-c kommando] [-t taggsträng] [-w storlek] [fil...]

BESKRIVNING

vi är en skärmorienterad textredigerare. Den används för att redigera textfiler direkt i en terminal.

POSIX-definitionen av vi beskriver framför allt redigerarens visuella läge och öppna läge. vi är nära kopplad till linjeredigeraren ex. Många kommandon i vi är i själva verket ex-kommandon som körs genom att man skriver kolon följt av kommandot.

Exempel:

:w
:q
:wq
:set number
:%s/gammalt/nytt/g

I vi finns texten som redigeras i en redigeringsbuffert. Ändringar påverkar inte filen på disken förrän användaren skriver bufferten till fil, till exempel med kommandot ':w.

Terminalskärmen fungerar som ett fönster in i redigeringsbufferten. Markörens position visar aktuell plats i bufferten.

VIKTIGA LÄGEN

Kommandoläge

När vi startar befinner sig redigeraren normalt i kommandoläge. I detta läge tolkas tangenttryckningar som kommandon.

Exempel:

h    flytta markören åt vänster
j    flytta markören nedåt
k    flytta markören uppåt
l    flytta markören åt höger
x    ta bort tecknet under markören
dd   ta bort aktuell rad
:w   skriv filen
:q   avsluta

Inmatningsläge

I inmatningsläge skrivs tecken in som text i filen.

Vanliga kommandon för att gå till inmatningsläge:

i    infoga före markören
a    infoga efter markören
I    infoga vid radens början
A    infoga vid radens slut
o    öppna en ny rad under aktuell rad
O    öppna en ny rad över aktuell rad

För att lämna inmatningsläget används:

Esc

Ex-läge

Ex-läget nås genom att skriva kolon i kommandoläge. Då kan man skriva ett ex-kommando.

Exempel:

:w
:q
:q!
:wq
:set number
:set nonumber
:%s/foo/bar/g

OPTIONER

-c kommando

Kör det angivna kommandot efter att den första filen har lästs in.

Exempel:

vi -c 'set number' fil.txt

-r

Återställ en fil efter en tidigare avbruten redigeringssession, om implementationen stöder sådan återställning.

Exempel:

vi -r fil.txt

-R

Öppna filen i skrivskyddat läge. Detta motsvarar normalt att sätta redigerarens readonly-alternativ.

Exempel:

vi -R fil.txt

-t taggsträng

Öppna redigeraren vid den plats som motsvarar taggen taggsträng. Detta används tillsammans med taggfiler, ofta skapade av ctags.

Exempel:

vi -t main

-w storlek

Anger fönsterstorlek eller relaterad skärminställning enligt implementationens och ex-manualens beskrivning.

OPERANDER

fil

En eller flera filer som ska öppnas för redigering.

Exempel:

vi fil.txt
vi fil1.txt fil2.txt

Om flera filer anges kan man växla mellan dem med ex-kommandon som:

:n
:next
:prev
:rewind

STANDARDINMATNING

vi är en interaktiv terminalredigerare. Om standardinmatningen inte är en terminal är resultatet odefinierat enligt POSIX.

STANDARDUTMATNING OCH STANDARDFEL

vi förutsätter normalt att både inmatning och utmatning sker via en terminal. Skärmen används för redigeringsfönstret, meddelanden, statusrader och kommandorad.

Diagnostiska meddelanden skrivs normalt till terminalen.

MILJÖVARIABLER

Följande miljövariabler är särskilt viktiga för vi-liknande redigerare.

TERM

Anger terminaltyp. Redigeraren använder terminaltypen för att veta hur skärmen ska styras.

HOME

Används ofta för att hitta användarens konfigurationsfiler.

SHELL

Anger vilket skal som används när externa kommandon körs.

EXINIT

Kan användas av vissa implementationer för initialiseringskommandon.

GRUNDLÄGGANDE ARBETSGÅNG

Öppna en fil:

vi fil.txt

Gå till inmatningsläge:

i

Skriv text.

Gå tillbaka till kommandoläge:

Esc

Spara filen:

:w

Avsluta:

:q

Spara och avsluta:

:wq

Avsluta utan att spara:

:q!

MARKÖRRÖRELSER

Enkla rörelser

h

Flytta ett tecken åt vänster.

j

Flytta en rad nedåt.

k

Flytta en rad uppåt.

l

Flytta ett tecken åt höger.

mellanslag

Flytta ett tecken åt höger.

Backspace

Flytta ett tecken åt vänster, om implementationen stöder detta.

Rörelser inom rad

0

Flytta till radens början.

^

Flytta till första icke-blanka tecknet på raden.

$

Flytta till radens slut.

|

Flytta till en viss kolumn på raden. Om ett antal anges används detta som kolumnnummer.

Exempel:

10|

Rörelser mellan ord

w

Flytta till början av nästa ord.

W

Flytta till början av nästa stort ord. Ett stort ord avgränsas normalt endast av blanktecken.

b

Flytta till början av föregående ord.

B

Flytta till början av föregående stort ord.

e

Flytta till slutet av aktuellt eller nästa ord.

E

Flytta till slutet av aktuellt eller nästa stort ord.

RAD- OCH FILRÖRELSER

G

Flytta till sista raden i filen. Om ett antal anges flyttas markören till den raden.

Exempel:

G
1G
25G

+

Flytta till första icke-blanka tecknet på nästa rad.

-

Flytta till första icke-blanka tecknet på föregående rad.

Enter

Flytta till första icke-blanka tecknet på nästa rad.

H

Flytta till översta raden i skärmfönstret.

M

Flytta till mittenraden i skärmfönstret.

L

Flytta till nedersta raden i skärmfönstret.

SKÄRMRULLNING

Ctrl-F

Rulla framåt en skärm.

Ctrl-B

Rulla bakåt en skärm.

Ctrl-D

Rulla nedåt, normalt en halv skärm.

Ctrl-U

Rulla uppåt, normalt en halv skärm.

Ctrl-E

Rulla skärmen en rad nedåt.

Ctrl-Y

Rulla skärmen en rad uppåt.

Ctrl-L

Rita om skärmen.

Ctrl-R

Rita om skärmen.

Ctrl-G

Visa information om aktuell fil, radnummer och status.

SÖKNING

/ mönster

Sök framåt efter ett mönster.

? mönster

Sök bakåt efter ett mönster.

n

Upprepa den senaste sökningen i samma riktning.

N

Upprepa den senaste sökningen i motsatt riktning.

Exempel:

/main
?include
n
N

TECKENSÖKNING PÅ AKTUELL RAD

f tecken

Flytta framåt till nästa förekomst av tecknet på raden.

F tecken

Flytta bakåt till föregående förekomst av tecknet på raden.

t tecken

Flytta framåt till tecknet före nästa förekomst av det angivna tecknet.

T tecken

Flytta bakåt till tecknet efter föregående förekomst av det angivna tecknet.

;

Upprepa senaste f, F, t eller T i samma riktning.

,

Upprepa senaste f, F, t eller T i motsatt riktning.

PARENTESMATCHNING

%

Flytta till matchande parentes, hakparentes eller klammerparentes.

Exempel:

( )
[ ]
{ }

INFOGA TEXT

i

Infoga text före markören.

I

Infoga text vid början av aktuell rad, normalt före första icke-blanka tecken.

a

Lägg till text efter markören.

A

Lägg till text vid radens slut.

o

Öppna en ny rad under aktuell rad och gå till inmatningsläge.

O

Öppna en ny rad ovanför aktuell rad och gå till inmatningsläge.

ERSÄTTA OCH ÄNDRA TEXT

r tecken

Ersätt tecknet under markören med det angivna tecknet.

R

Gå till ersättningsläge, där inskrivna tecken ersätter befintliga tecken.

s

Ersätt aktuellt tecken med ny text.

S

Ersätt hela aktuell rad med ny text.

c rörelse

Ändra textområdet som anges av rörelsen.

Exempel:

cw     ändra ord
c$     ändra till radslut
cc     ändra hela raden
C      ändra till radslut

TA BORT TEXT

x

Ta bort tecknet under markören.

X

Ta bort tecknet före markören.

d rörelse

Ta bort textområdet som anges av rörelsen.

Vanliga former:

dw     ta bort ord
d$     ta bort till radslut
d0     ta bort till radbörjan
dd     ta bort aktuell rad
D      ta bort till radslut

Med antal:

3dd    ta bort tre rader
5x     ta bort fem tecken

KOPIERA TEXT

y rörelse

Kopiera textområdet som anges av rörelsen.

Vanliga former:

yw     kopiera ord
y$     kopiera till radslut
yy     kopiera aktuell rad
Y      kopiera aktuell rad

Med antal:

3yy    kopiera tre rader

KLISTRA IN TEXT

p

Klistra in efter markören eller efter aktuell rad, beroende på vilken typ av text som kopierats eller tagits bort.

P

Klistra in före markören eller före aktuell rad.

ÅNGRA OCH UPPREPA

u

Ångra senaste ändring.

U

Ångra ändringar på aktuell rad enligt klassiskt vi-beteende.

.

Upprepa senaste ändringskommando.

&

Upprepa senaste substitutionskommando.

INDENTERING

< rörelse

Skjut textområdet åt vänster.

>' rörelse

Skjut textområdet åt höger.

Vanliga former:

>>     skjut aktuell rad åt höger
<<     skjut aktuell rad åt vänster
>G     skjut från aktuell rad till filens slut åt höger

FILTRERA TEXT GENOM KOMMANDO

! rörelse kommando

Skicka textområdet till ett externt kommando och ersätt området med kommandots utmatning.

Exempel:

!!sort
!}fmt

MÄRKEN

m tecken

Sätt ett märke på aktuell position.

\' tecken

Hoppa till raden där märket finns.

` tecken

Hoppa till exakt position för märket.

Exempel:

ma
'a
`a

BUFFERTAR

Många vi-kommandon kan använda namngivna buffertar. En buffert anges ofta med dubbelcitat följt av buffertnamn.

Exempel:

"ayy
"ap

Detta kopierar en rad till buffert a och klistrar sedan in från buffert a.

KOMMANDON MED ANTAL

Många kommandon kan föregås av ett antal.

Exempel:

5j      flytta fem rader nedåt
3w      flytta tre ord framåt
10x     ta bort tio tecken
4dd     ta bort fyra rader
2yy     kopiera två rader

RÖRELSE SOM ARGUMENT

Flera kommandon använder ett rörelsekommando som argument. Det gäller bland annat:

c
d
y
!
<
>

Exempel:

dw      ta bort till nästa ord
cw      ändra till nästa ord
y$      kopiera till radslut
d}      ta bort till nästa stycke
!Gsort  sortera från aktuell rad till filens slut

MENINGAR, STYCKEN OCH SEKTIONER

(

Flytta till början av föregående mening.

)

Flytta till början av nästa mening.

{

Flytta till början av föregående stycke.

}

Flytta till början av nästa stycke.

[[

Flytta till föregående sektionsgräns.

]]

Flytta till nästa sektionsgräns.

EX-KOMMANDON I VI

Kolon används för att köra ex-kommandon.

':w

Skriv bufferten till fil.

':w fil

Skriv bufferten till angiven fil.

':q

Avsluta om inga osparade ändringar finns.

':q!

Avsluta utan att spara.

':wq

Spara och avsluta.

':x

Spara och avsluta.

':e fil

Redigera en annan fil.

':e!

Läs om aktuell fil från disk och kasta osparade ändringar.

':r fil

Läs in en fil efter aktuell rad.

':set alternativ

Sätt ett redigeringsalternativ.

':set all

Visa alla alternativ.

':set number

Visa radnummer.

':set nonumber

Dölj radnummer.

SUBSTITUTION

Substitution görs med ex-kommandot s.

Byt första förekomsten på aktuell rad:

:s/gammalt/nytt/

Byt alla förekomster på aktuell rad:

:s/gammalt/nytt/g

Byt alla förekomster i hela filen:

:%s/gammalt/nytt/g

Fråga före varje byte:

:%s/gammalt/nytt/gc

Byt i ett radintervall:

:10,20s/gammalt/nytt/g

TAGGAR

Ctrl-]

Hoppa till taggen under markören.

:tag namn

Hoppa till angiven tagg.

Taggar används vanligen tillsammans med en taggfil som skapats med ctags.

SPARA OCH AVSLUTA

Spara:

:w

Spara till annat filnamn:

:w nyfil.txt

Avsluta:

:q

Avsluta utan att spara:

:q!

Spara och avsluta:

:wq

Klassiskt kortkommando för spara och avsluta:

ZZ

SKAL-KOMMANDON

:! kommando

Kör ett skalkommando.

Exempel:

:!ls
:!date

:sh

Starta ett skal. Återgå till redigeraren genom att avsluta skalet.

REDIGERINGSALTERNATIV

Vanliga alternativ i vi eller ex:

number

Visa radnummer.

nonumber

Dölj radnummer.

readonly

Ange att filen är skrivskyddad.

ignorecase

Gör sökning okänslig för versaler och gemener.

noignorecase

Gör sökning känslig för versaler och gemener.

autoindent

Behåll indrag vid ny rad.

noautoindent

Stäng av automatisk indragning.

Exempel:

:set number
:set nonumber
:set ignorecase
:set noignorecase
:set autoindent
:set noautoindent

FEL OCH DIAGNOSTIK

Om ett kommando inte kan utföras ska vi normalt ge en signal till användaren, ofta genom ett ljud, en visuell signal eller ett felmeddelande på kommandoraden.

Exempel på fel:

  • försök att avsluta utan att spara ändringar
  • försök att skriva till en fil utan behörighet
  • okänd kommandoform
  • sökmönster som inte hittas
  • rörelse förbi filens början eller slut

AVSLUTNINGSSTATUS

POSIX anger normalt att verktyg returnerar 0 när de slutförts utan fel och ett värde större än 0 när ett fel inträffat. För interaktiva redigerare kan exakt beteende bero på implementationen.

PRAKTISK SNABBREFERENS

Kommando Betydelse
i Börja infoga text före markören
a Börja infoga text efter markören
Esc Återgå till kommandoläge
h Flytta vänster
j Flytta ned
k Flytta upp
l Flytta höger
0 Gå till radens början
$ Gå till radens slut
w Nästa ord
b Föregående ord
x Ta bort tecken
dd Ta bort rad
yy Kopiera rad
p Klistra in efter
P Klistra in före
u Ångra
. Upprepa senaste ändring
/text Sök framåt
?text Sök bakåt
n Upprepa sökning
N Upprepa sökning åt andra hållet
:w Spara
:q Avsluta
:q! Avsluta utan att spara
:wq Spara och avsluta
ZZ Spara och avsluta

EXEMPEL

Öppna en fil:

vi fil.txt

Öppna en fil skrivskyddat:

vi -R fil.txt

Starta med radnummer aktiverade:

vi -c 'set number' fil.txt

Öppna vid taggen main:

vi -t main

Sök efter ordet main:

/main

Byt alla förekomster av foo till bar:

:%s/foo/bar/g

Ta bort fem rader:

5dd

Kopiera tre rader och klistra in dem:

3yy
p

ANVÄNDNING I SKRIPT

vi är avsedd för interaktiv redigering. För automatiserad textbearbetning används normalt andra verktyg.

Exempel på bättre verktyg i skript:

SKILLNAD MELLAN VI OCH MODERNA IMPLEMENTATIONER

POSIX beskriver en standardiserad kärna av vi.

Moderna implementationer kan ha många extra funktioner, till exempel:

  • syntaxfärgning
  • flera ångranivåer
  • fönster och flikar
  • utökade reguljära uttryck
  • plugins
  • Unicode-funktioner
  • musintegration

Sådana funktioner är inte nödvändigtvis portabla enligt POSIX.

SE ÄVEN

COPYRIGHT

Delar av originaltexten i POSIX-manualen är återgivna och reproducerade i elektronisk form från IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition.

Om det finns någon avvikelse mellan denna bearbetade svenska version och den ursprungliga standarden från IEEE och The Open Group är den ursprungliga standarden den avgörande referensen.

Den ursprungliga standarden kan hämtas online från The Open Group.

KORT SAMMANFATTNING

vi är en klassisk terminalbaserad textredigerare.

Öppna fil:

vi fil.txt

Infoga text:

i

Lämna inmatningsläge:

Esc

Spara:

:w

Avsluta:

:q

Spara och avsluta:

:wq

Avsluta utan att spara:

:q!

Det viktigaste att komma ihåg är att vi har olika lägen. Om något inte fungerar som väntat, tryck Esc för att återgå till kommandoläge.

Sidslut

Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/vi.1p.html Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp hemma som har sponsrat Linux.se med webbhotell.