Skaper | Bill Joy |
---|---|
Første versjon | 1976 |
Siste versjon | 050325 (25. mars 2005) |
Innskudd | ex-vi.cvs.sourceforge.net/ex-vi/ex-vi |
Skrevet i | VS |
Operativsystem | Unix-type |
Type |
Modal teksteditor ( d ) UNIX-verktøy ( d ) |
Tillatelse | BSD-lisens |
Nettsted | ex-vi.sourceforge.net |
vi er en fullskjerms tekstredigerer skrevet av Bill Joy i 1976 på en tidlig versjon av BSD Unix- distribusjonen .
Den er automatisk tilstede på flertallet av dagens Unix- systemer , ofte som en klon av den originale vi- programvaren .
Navnet vi kommer fra en kortest mulig (dvs. entydig) forkortelse av den visuelle kommandoen til teksteditoren eks , fordi denne kommandoen bytter eksredaktøren fra linje for linje- modus til fullskjermmodus : det er derfor i utgangspunktet bare et visuelt grensesnitt (i English, Visual Interface ) av editor ex (i seg selv en utvidelse av online editor ed ). ex er alltid tilgjengelig i vi ved å trykke på : i kommandomodus. I praksis startes et enkelt program når vi påkaller vi eller ex : dets oppførsel bestemmes av navnet det ble kalt til.
Navnet vi tilsvarer begge initialene og navnet på installasjonsfilen, det blir vanligvis uttalt ved å si de to bokstavene på engelsk, det vil si "vi-aille" , [vi: aɪ] , snarere enn som en fullverdig ord [vi] . Analogien av dette navnet med det romerske tallet VI (seks) er tilfeldig.
vi er en modal editor, det vil si betydningen av knapper og taster endres avhengig av hvilken modus den er i.
I innsettingsmodus settes den skrevne teksten inn i dokumentet. Ved å trykke på Esc- tasten fra innsettingsmodus, bytter du til kommandomodus , der tastene tilsvarer markørbevegelser eller redigeringsfunksjoner. For eksempel flytter j markøren ned en linje, x sletter tegnet under markøren (posisjonen "under markøren" kan betegne høyre side av markøren hvis sistnevnte er plassert mellom tegnene, over understrekingstegnet eller under det rektangulære avhengig av hvordan terminalen representerer markøren).
Taster tastet i kommandomodus settes ikke inn i teksten, noe som er en vanlig årsak til forvirring for brukere som ikke er nye for vi.
I kommandomodus kan mange operasjoner utføres serielt med enkelt tastetrykk uten å måtte holde inne Alt- eller Ctrl- tastene . Jo mer forseggjorte operasjoner består av mer primære operasjoner. For eksempel sletter d3w tre ord ( d for sletting og w for ord ), c2fa endrer ( endrer ) teksten til den finner ( finner ) den andre ( 2 ) a . Erfarne arbeidere, det gjør det mulig å jobbe veldig effektivt, det tillater også brukeren til å holde hendene på tastaturet hele tiden.
Tidlige versjoner av vi ga ingen indikasjoner på hvilken modus de var i. Det var vanlig at brukere automatisk trykket på Esc- tasten for å sikre at redaktøren var i kommandomodus (vi piper hvis den allerede er i denne modusen). Mer moderne versjoner av vi indikerer modus i en statuslinje eller grafisk (for eksempel formen eller fargen på markøren). Grafiske implementeringer av vi (f.eks. GVim ) støtter også bruk av mus og menyer for å få tilgang til redigeringsfunksjoner.
vi ble de facto standardredaktør for unix og var favorittredaktøren til mange hackere frem til ankomsten av Emacs i 1984 . Merk at Emacs er mer enn bare en tekstredigerer og likevel ofte konkurrerer med vi. Til dags dato (2011) kan vi eller en av klonene finnes i nesten alle Unix-installasjoner. Den enkle UNIX-spesifikasjonen (nærmere bestemt “IEEE Standard 1003.2, del 2: skall og verktøy”) inkluderer vi. Derfor inkluderer ethvert system som er i samsvar med denne spesifikasjonen vi.
vi er fortsatt mye brukt av brukere av forskjellige Unix-varianter. Den starter raskere enn tunge versjoner av Emacs "editor" og bruker mindre minne. Som et resultat bruker selv Emacs-fans det som redaktør for e-post eller for små redigeringer.
Når du lager en gjenopprettingsdiskett ( redningsdisk , for systemer der harddisken ikke lenger fungerer som den skal), blir vi ofte valgt som redaktør på grunn av dens kompakthet (plassen er svært begrenset på diskettene) og det faktum at flertallet av mennesker utføre bergingsoperasjoner er i stand til å bruke den.
vi og Emacs er de flerårige krigerne i redaktørens krig .
Det finnes mange vi-baserte tekstredigerere. Kloner er gratis eller ikke- gratis implementeringer av vi, det vil si at de teoretisk følger standard POSIX vi-kommandosett. Imidlertid støtter de fleste av disse klonene også flere funksjoner. Derivater er programmer, tekstredigerere eller ikke, som har beholdt driftsprinsippet til vi (helt eller delvis) for egen drift.
En mer komplett liste finner du i de eksterne lenkene nedenfor .
Brukere som er nye for vi, blir ofte møtt med vanskeligheter, for det første på grunn av snarveiene som brukes til hver av kommandoene, og for det andre fordi effekten av disse snarveiene endres avhengig av hvilken modus vi er i.
En effektiv måte å komme i gang med vi på er å følge en veiledning fra omslag til omtale som forklarer de enklere kommandoene. De fleste systemer som gir en implementering av vi inneholder også en veiledning for vi.
Ved å forstå arbeidsprinsippet med noen få forklaringer og enkle eksempler, kan flertallet av brukere oppnå sine mål med vi. Imidlertid anses flyt med vi generelt å ta lengre tid å komme enn med de andre redaktørene det ofte sammenlignes med. Forsvarere av vi hevder at denne innledende vanskeligheten mer enn oppveies av effektiviteten til redaktøren når du er komfortabel.
Nybegynnere blir ofte forvirret av kommandoene i vi. Disse blir ofte redusert til en enkelt bokstav, og veldig vanskelige å huske ved første øyekast, spesielt ettersom redaktøren presenterer forskjellige perspektiver (lesing, innsetting, åpen modus osv.) Som ikke skiller seg tydelig ut og overgangen mellom disse modusene ofte går ubemerket hen. .
De fleste av kommandoene i vi er valgt for å:
Når vi starter med vi, er det viktig å forstå at vi har flere driftsmåter. De to hovedmodusene er kommandomodus (der vi starter) og innsettingsmodus . Ordre i ( i nsertion) eller har ( en dding) styremodus tillater å bytte til innsettingsmodus, mens nøkkelen Esc for å gå ut av innsettingsmodus og tilbake til kommandomodus.
vi har også en annen driftsmodus, som gir muligheten til å definere makrokommandoer ved å integrere et ekte programmeringsspråk for å automatisere tekstredigeringsoppgaver.
Det er også mulig å ringe vi med argumenter slik at det automatisk utfører kommandoer når du åpner en fil. For eksempel kommandolinjen:
vi -c "1,%s/Deux/Trois/g|:wq" FICHIERkjører vi, som åpner filen "FILE", deretter erstatter alle "Twos" med "Threes" i filen, og til slutt lagrer filen og avslutter.
vi lar deg definere makrokommandoer og forkortelser.
Makroer lar deg erstatte ett tastetrykk med et annet, som lar deg definere nye kommandoer. For eksempel,
:map v 10ddoppretter kommandomodus v- kommando, som fjerner blokker på 10 linjer.
Forkortelser unngår å skrive en ganske lang bokstavsekvens. For eksempel :
:ab GNU gnu is not unixskaper forkortelsen GNU , som i innsettingsmodus erstattes av gnu er ikke unix så snart det er skrevet nok tegn til å løse enhver tvetydighet (forkortelser utvides vanligvis når et mellomrom settes inn for å indikere slutten av ordet).
Oppførselen til vi og dens kommandoer kan justeres med det vi kaller "opsjoner". Kommandoen : set brukes til å vise og endre dem. Noen alternativer er boolske, det vil si at de bare kan ta to verdier: sant eller usant , eller mer nøyaktig aktivert og deaktivert . For eksempel :
:set numbersom kan forkortes med
:set nueller
:se nuviser nummeret på hver linje.
:set nonumber :set nonuer likeverdige og tillater at dette alternativet deaktiveres.
Blant de boolske alternativene kan vi finne (ikke uttømmende liste):
Bestilt | Effekt |
---|---|
: sett ignorecase | ignorere saken når du søker etter strenger |
: innleset | forbyr endring av den åpne filen |
: angi autoindent | Innrykker automatisk kode når du redigerer |
: sett linjal | angir rad- og kolonnenummeret som markøren ligger på |
: angi visemodus | vis modus vi er i |
De andre alternativene tar en verdi. For eksempel :
:set tags=./tagsvi forteller hvor du finner filmarkørene .
Settet med alle tilgjengelige alternativer kan vises med
:set allSettet med vi-alternativer (samt makroer og forkortelser) kan settes for hver redigeringsøkt ved å legge dem til ~ / .exrc- filen . Denne filen leses automatisk når VI starter, og kommandoene det inneholder er utført som om de var skrevet av brukeren (det : første er unødvendig). Eksempel:
set nu map @ dd ab sig Mr. Robert Le NomBienLongTabellen nedenfor gir noen grunnleggende kommandoer til vi-editoren, som er nødvendige for de enkleste redigeringsoppgavene. For å legge inn kommandoer, må du først avslutte redigeringsmodus ved å trykke på Esc- tasten .
Bestilt | Effekt |
---|---|
# kommando | utfør # ganger kommandoen (for eksempel 5dd sletter 5 linjer) |
! bestilt | kjør en skallkommando (for eksempel :! gcc -o hallo hallo.c ) |
>> og << | legg til og fjern en fane i begynnelsen av linjen |
/ toto og ? toto | søker etter forekomster av tegnstrengen foo etter henholdsvis markøren og før markøren ( n går til neste forekomst og N går til forrige forekomst) |
: # | plasser markøren på linje # |
: $ | plasser markøren på den siste linjen |
:. = | returnerer nummeret på gjeldende linje |
0 | flytt markøren til begynnelsen av linjen |
$ | flytt markøren til slutten av linjen |
h og l | flytt markøren ett tegn til henholdsvis venstre og høyre |
j og k | flytt markøren til henholdsvis neste og forrige linje |
gg | flytt markøren til starten av filen |
G | flytt markøren til slutten av filen |
H og L. | flytte markøren henholdsvis opp og ned på skjermen |
på | flytte markøren ett tegn til høyre og gå inn i innsettingsmodus |
PÅ | flytter markøren til slutten av gjeldende linje og bytter til innsettingsmodus |
vs. | sletter et visst antall tegn avhengig av underkommandoen og bytter til innsettingsmodus (for eksempel cl lar deg endre gjeldende tegn, cw slutten av det nåværende ordet) |
VS | sletter tegn fra markørposisjon til slutten av linjen og bytter til innsettingsmodus |
dd | slett den nåværende linjen og kopier den til bufferen |
dw | fjern ordet etter markøren og kopier det til bufferen |
dW | fjern tegnstrengen etter markøren til neste tomme tegn |
: e | etterfulgt av et filnavn, åpne denne filen for redigering |
D | fjern enden av linjen fra markøren |
Jeg | bytter til innsettingsmodus ved markørposisjon |
Jeg | flytter markøren til begynnelsen av linjen og bytter til innsettingsmodus |
o | åpne en ny linje under gjeldende linje |
O | åpne en ny linje over gjeldende linje |
s | sett inn innholdet i bufferen etter markøren (eller etter gjeldende linje hvis bufferen inneholder linjer) |
P | sett inn innholdet i bufferen før markøren (eller før gjeldende linje hvis bufferen inneholder linjer) |
: q | slutte vi |
: q! | avslutt vi selv om endringene ikke er lagret |
r | erstatt tegnet under markøren |
u | avbryter effekten av forrige kommando |
w | plasserer markøren på det første tegnet i neste ord |
: w | lagre den nåværende filen |
: wq eller : x eller ZZ | lagre den nåværende filen og avslutt |
x | slett tegnet under markøren |
X | sletter tegnet til venstre for markøren |
yy | kopier gjeldende linje i bufferen ( p setter inn den kopierte linjen etter gjeldende linje) |
yw | kopier ordet etter markøren i bufferen ( p setter inn det kopierte ordet etter markøren) |
Følgende kommandoer viser hva vi gjør når en bruker leter etter mer sofistikerte redigeringskommandoer.
Bestilt | Effekt |
---|---|
"ryy | huske gjeldende linje i registeret "r |
"rp | sett inn innholdet i registeret "r etter gjeldende linje eller etter markøren |
: # 1, # 2t # 3 | kopier linjer nr. 1 til nr. 2 etter linje nr. 3 |
: # 1, # 2m # 3 | flytt linjer nr. 1 til nr. 2 etter linje nr. 3 |
: # 1, # 2s / toto / tutu / g | erstatt på linje nr. 1 til nr. 2 alle forekomster av tegnstrengen toto av tutu |
:% s / toto / tutu / g | erstatt på hver linje alle forekomster av karakterstrengen toto med tutu |
:% s% til / til% tu / tu% g | erstatt på hver linje alle forekomster av tegnstrengen til / til med tu / tu (dette viser at vi kan bruke et annet skilletegn enn / - her % ) |
: s /.*/ \ U & / | endre gjeldende linje til store bokstaver |
:% s / ^ foo // | slett den første forekomsten av tegnstrengen foo på hver linje hvis den er i begynnelsen av linjen |
: # 1, # 2g / toto / d | sletter linjene som inneholder tegnstrengen foo blant linjene 1 til nr. 2 |
: g! / toto / d | slett linjer som ikke inneholder tegnstrengen foo |
: g / ^^^^^^^^ d | fjern tomme linjer |
: # 1, # 2g / toto / s / tutu / titi / gc | erstatte etter bekreftelser til linjene # 1 til # 2 inneholder tegnstrengen toto alle forekomster av tegnstrengen tutu etter titi |
: r toto.txt | sett inn innholdet i toto.txt- filen |
: r! ls -l | sett inn resultatet av ls -l- kommandoen i den gjeldende filen |
: # 1, # 2w toto.txt | lagre linje nr. 1 til nr. 2 i filen toto.txt |
: e! | åpne den nåværende filen på nytt (brukes for eksempel hvis filen er endret i mellomtiden) |