vi(1p)
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.