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
vi [-rR] [-c kommando] [-t taggsträng] [-w storlek] [fil...]
BESKRIVNING
Verktyget vi är en skärmorienterad textredigerare.
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.
Användaren kan växla mellan vi och ex och köra ex-kommandon inifrån vi.
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.
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.
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.
OPTIONER
vi följer POSIX.1-2017, Base Definitions, avsnitt 12.2, Utility Syntax Guidelines, med undantaget att + kan tolkas som optionsavgränsare utöver -.
-c kommando
- Se beskrivningen av optionen -c för ex(1p). Används för att köra ett kommando vid start.
-r
- Se beskrivningen av optionen -r för ex(1p). Används vanligen för att återställa filer efter krasch.
-R
- Se beskrivningen av optionen -R för ex(1p). Startar normalt i skrivskyddat läge.
-t taggsträng
- Se beskrivningen av optionen -t för ex(1p). Öppnar vid en tagg.
-w storlek
- Se beskrivningen av optionen -w för ex(1p).
OPERANDER
Se avsnittet OPERANDER i manualen för ex(1p) för en beskrivning av de operander som stöds av vi.
Vanligtvis anger operanden en eller flera filer som ska öppnas:
vi fil.txt vi fil1.txt fil2.txt
STANDARDINMATNING
Om standardinmatningen inte är en terminalenhet är resultatet odefinierat.
Standardinmatningen består av en följd av kommandon och inmatad text, enligt den utökade beskrivningen.
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.
INDATAFILER
Se avsnittet INDATAFILER i manualen för ex(1p).
MILJÖVARIABLER
Se avsnittet MILJÖVARIABLER i manualen för ex(1p) för miljövariabler som påverkar vi.
Vanliga miljövariabler som i praktiken ofta påverkar vi-liknande redigerare är bland annat:
TERM
- Anger terminaltyp.
HOME
- Används ofta för att hitta användarens konfigurationsfiler.
EXINIT
- Kan användas av vissa implementationer för initialiseringskommandon.
SHELL
- Anger skal som används när redigeraren kör externa kommandon.
ASYNKRONA HÄNDELSER
Se avsnittet ASYNKRONA HÄNDELSER i manualen för ex(1p).
STANDARDUTMATNING
Om standardutmatningen inte är en terminalenhet är resultatet odefinierat.
Standardutmatningen kan användas för att skriva prompter till användaren, informationsmeddelanden och rader från filen.
STANDARDFEL
Om standardutmatningen inte är en terminalenhet är resultatet odefinierat.
Standardfel ska endast användas för diagnostiska meddelanden.
UTFILER
Se avsnittet UTFILER i manualen för ex(1p).
UTÖKAD BESKRIVNING
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.
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.
I textinmatningsläge används Esc för att återgå till kommandoläge.
LÄGEN I VI
Kommandoläge
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.
Exempel:
h flytta vänster j flytta ned k flytta upp l flytta höger x ta bort tecken :w spara :q avsluta
Textinmatningsläge
I detta läge skrivs tecken in i bufferten som vanlig text.
Du går in i textinmatningsläge med kommandon som:
i infoga före markören a infoga efter markören o öppna ny rad under aktuell rad O öppna ny rad över aktuell rad
Du lämnar textinmatningsläget med:
Esc
Ex-läge
Kommandon som börjar med kolon, :, körs som ex'-kommandon.
Exempel:
:w :q :wq :q! :set number :%s/gammalt/nytt/g
SYMBOLER I KOMMANDOBESKRIVNINGAR
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:
3j 5x 10dd
motion
- Ett rörelsekommando som används som argument till kommandon som påverkar textområden, till exempel:
! < > c d y
Exempel:
dw ta bort till nästa ord d$ ta bort till radslut y} kopiera till nästa stycke c0 ändra till radens början
RÖRELSEKOMMANDON
Följande kommandon kan användas för markörrörelse och som rörelseargument till andra kommandon:
h j k l
0 $ ^
w W b B e E
( ) { }
[[ ]]
G
H M L
/ ?
n N
f F t T
; ,
| %
' `
+ -
Enter
Space
Backspace
GRUNDLÄGGANDE MARKÖRRÖ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.
0
- Flytta till radens första tecken.
^
- Flytta till första icke-blanka tecknet på raden.
$
- Flytta till radens slut.
w
- Flytta framåt till början av nästa ord.
W
- Flytta framåt till nästa stort ord, där ord avgränsas av blanktecken.
b
- Flytta bakåt till början av föregående ord.
B
- Flytta bakåt till föregående stort ord.
e
- Flytta till slutet av ordet.
E
- Flytta till slutet av stort ord.
G
- Flytta till en rad. Utan antal går kommandot till sista raden.
Exempel:
1G gå till första raden G gå till sista raden 25G gå till rad 25
H
- Flytta till översta raden på skärmen.
M
- Flytta till mittenraden på skärmen.
L
- Flytta till nedersta raden på skärmen.
%
- Flytta till matchande parentes, hakparentes eller klammerparentes.
SID- OCH SKÄRMRÖRELSER
Ctrl-B
- Sida bakåt.
Ctrl-F
- Sida framåt.
Ctrl-D
- Rulla nedåt, normalt en halv skärm.
Ctrl-U
- Rulla uppåt, normalt en halv skärm.
Ctrl-E
- Rulla framåt en rad.
Ctrl-Y
- Rulla bakåt en rad.
Ctrl-L
- Rensa och rita om skärmen.
Ctrl-R
- Rita om skärmen.
Ctrl-G
- Visa filinformation. Motsvarar i POSIX beskrivningen av ex file.
SÖKNING
/mönster
- Sök framåt efter ett reguljärt uttryck.
?mönster
- Sök bakåt efter ett reguljärt uttryck.
n
- Upprepa senaste sökningen i samma riktning.
N
- Upprepa senaste sökningen i motsatt riktning.
Exempel:
/main ?include n N
TECKENSÖKNING PÅ RAD
f tecken
- Sök framåt till nästa förekomst av tecken på raden.
F tecken
- Sök bakåt till föregående förekomst av tecken på raden.
t tecken
- Sök framåt till tecknet före nästa förekomst av tecken.
T tecken
- Sök bakåt till tecknet efter föregående förekomst av tecken.
;
- Upprepa senaste f, F, t eller T i samma riktning.
,
- Upprepa senaste f, F, t eller T i motsatt riktning.
INFOGA TEXT
i
- Infoga text före markören.
I
- Infoga text vid början av raden, normalt före första icke-blanka tecken.
a
- Lägg till text efter markören.
A
- Lägg till text i slutet av raden.
o
- Öppna ny rad under aktuell rad och börja infoga text.
O
- Öppna ny rad ovanför aktuell rad och börja infoga text.
Esc
- Avsluta textinmatningsläge och återgå till kommandoläge.
ÄNDRA TEXT
r tecken
- Ersätt tecknet under markören med tecken.
R
- Gå in i ersättningsläge.
s
- Ersätt aktuellt tecken med inmatad text.
S
- Ersätt hela aktuell rad med inmatad 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
~
- Växla skiftläge på aktuellt tecken eller textområde enligt implementationens beteende.
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.
Exempel:
dw ta bort ord d$ ta bort till radslut d0 ta bort till radbörjan dd ta bort aktuell rad 3dd ta bort tre rader D ta bort till radslut
KOPIERA OCH KLISTRA IN
y rörelse
- Kopiera textområdet som anges av rörelsen.
Exempel:
yw kopiera ord y$ kopiera till radslut yy kopiera aktuell rad 3yy kopiera tre rader Y kopiera rad
p
- Klistra in efter markören eller efter aktuell rad, beroende på buffertens typ.
P
- Klistra in före markören eller före aktuell rad.
ÅNGRA OCH UPPREPA
u
- Ångra senaste ändringen.
U
- Ångra ändringar på aktuell rad, enligt klassiskt vi-beteende.
.
- Upprepa senaste ändringskommando.
&
- Upprepa senaste substitutionskommando.
INDENTERING OCH FILTER
< rörelse
- Skjut textområdet åt vänster.
>' rörelse
- Skjut textområdet åt höger.
! rörelse kommando
- Filtrera textområdet genom ett skalkommando och ersätt texten med kommandots utmatning.
Exempel:
!!sort !}fmt
MÄRKEN OCH HOPP
m tecken
- Sätt ett märke med namnet tecken på aktuell position.
'' tecken
- Hoppa till början av raden där märket finns.
` tecken
- Hoppa till exakt position för märket.
Exempel:
ma 'a `a
TAGGAR
Ctrl-]
- Sök efter taggen under markören. Detta motsvarar ett ex tag-kommando med ordet under markören som argument.
SPARA OCH AVSLUTA
:w
- Spara filen.
:w filnamn
- Spara till angiven fil.
:q
- Avsluta.
:q!
- Avsluta utan att spara ändringar.
:wq
- Spara och avsluta.
ZZ
- Spara och avsluta om ändringar finns.
:x
- Spara och avsluta, i många implementationer endast om filen ändrats.
RADKOMMANDON OCH EX-KOMMANDON
Kommandon som börjar med kolon körs som ex-kommandon.
Exempel:
:set number :set nonumber :1 :$ :25 :%s/gammalt/nytt/g :read fil.txt :write :quit
SUBSTITUTION
Ett vanligt ex-kommando i vi är substitution:
:s/gammalt/nytt/
Byt första förekomsten på aktuell rad.
:s/gammalt/nytt/g
Byt alla förekomster på aktuell rad.
:%s/gammalt/nytt/g
Byt alla förekomster i hela filen.
:%s/gammalt/nytt/gc
Byt alla förekomster i hela filen, men fråga före varje ändring.
BUFFERT, ORD OCH STORA ORD
I POSIX-lokalen känner vi igen både ord och stora ord.
Ett ord är normalt en maximal följd av bokstäver, siffror och understreck, eller en maximal följd av andra icke-blanka skiljetecken.
Ett stort ord är en maximal följd av icke-blanka tecken som avgränsas av blanktecken.
Detta påverkar rörelsekommandon som:
w W b B e E
MENINGAR, STYCKEN OCH SEKTIONER
vi definierar gränser för meningar, stycken och sektioner. Dessa används av rörelsekommandon som:
( )
{ }
[[ ]]
(
- Flytta bakåt till början av föregående mening.
)
- Flytta framåt till början av nästa mening.
{
- Flytta bakåt till början av föregående stycke.
}
- Flytta framåt till början av nästa stycke.
[[
- Flytta bakåt till föregående sektionsgräns.
]]
- Flytta framåt till nästa sektionsgräns.
FELHANTERING
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.
Om felet uppstod under expansion av en mappning ska tecken från expansionen normalt kastas bort.
Om felet uppstod under körning av en buffert ska inga ytterligare kommandon från bufferten köras.
EXEMPEL
Öppna en fil:
vi fil.txt
Öppna flera filer:
vi fil1.txt fil2.txt
Starta och kör ett kommando direkt:
vi -c 'set number' fil.txt
Öppna filen och hoppa till en tagg:
vi -t main
Återställ en fil efter krasch, om implementationen stöder det:
vi -r fil.txt
Öppna skrivskyddat:
vi -R fil.txt
PRAKTISK SNABBREFERENS
| Kommando | Betydelse |
|---|---|
| i | Infoga före markören |
| a | Infoga efter markören |
| Esc | Återgå till kommandoläge |
| h j k l | Flytta vänster, ned, upp, 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 |
| u | Ångra |
| . | Upprepa senaste ändring |
| /text | Sök framåt |
| ?text | Sök bakåt |
| n | Nästa sökträff |
| :w | Spara |
| :q | Avsluta |
| :q! | Avsluta utan att spara |
| :wq | Spara och avsluta |
AVSLUTNINGSSTATUS
POSIX-manualens avslutningsstatus för vi hänvisar till beteendet i ex och implementationens hantering av fel.
I praktiken returneras normalt 0 vid lyckad körning och ett värde större än 0 vid fel.
KONSEKVENSER AV FEL
Se motsvarande avsnitt för ex(1p) och POSIX-beskrivningen.
ANVÄNDNING I PROGRAM
vi är i första hand en interaktiv redigerare och lämpar sig normalt inte som filter i skript.
För skriptmässig textbearbetning används normalt verktyg som:
BAKGRUND OCH MOTIVERING
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.
Många moderna implementationer, till exempel Vim, nvi och BusyBox vi, erbjuder fler funktioner än POSIX kräver.
FRAMTIDA RIKTNINGAR
Inga särskilda framtida riktningar anges i den här sammanfattade MediaWiki-versionen.
SE ÄVEN
POSIX.1-2017, Base Definitions:
- Avsnitt 12.2, Utility Syntax Guidelines
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.
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
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å:
https://www.kernel.org/doc/man-pages/reporting_bugs.html
KORT SAMMANFATTNING
vi är en klassisk skärmorienterad textredigerare.
Starta:
vi fil.txt
Skriv text:
i text... Esc
Spara:
:w
Avsluta:
:q
Spara och avsluta:
:wq
Avsluta utan att spara:
:q!
De viktigaste lägena är:
- kommandoläge
- textinmatningsläge
- ex-läge
De viktigaste tangenterna att komma ihåg är:
i börja infoga text Esc tillbaka till kommandoläge :w spara :q avsluta :q! avsluta utan att spara
ANMÄRKNING OM DENNA ÖVERSÄTTNING
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.
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.