vi

Vi

Beskrivelse av NetBSD 6.1-bildet vi C Hello World.png. Informasjon
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 .

Navnets opprinnelse

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.

Prinsipp for drift

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.

Utvikling

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 .

Kloner og derivater

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 .

Komme i gang med vi

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.

Kontroller og grensesnitt betraktes som uklare

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 å:

Modal atferd

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" FICHIER

kjører vi, som åpner filen "FILE", deretter erstatter alle "Twos" med "Threes" i filen, og til slutt lagrer filen og avslutter.

Funksjoner i vi

Makroer og forkortelser

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 10dd

oppretter kommandomodus v- kommando, som fjerner blokker på 10 linjer.

Forkortelser unngår å skrive en ganske lang bokstavsekvens. For eksempel :

:ab GNU gnu is not unix

skaper 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).

Alternativer

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 number

som kan forkortes med

:set nu

eller

:se nu

viser nummeret på hver linje.

:set nonumber :set nonu

er 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=./tags

vi forteller hvor du finner filmarkørene .

Settet med alle tilgjengelige alternativer kan vises med

:set all

Konfigurasjonsfil

Settet 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 NomBienLong

Eksempler på kommandoer

Eksempler på enkle kommandoer

Tabellen 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
flytte markøren ett tegn til høyre og gå inn i innsettingsmodus
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)

Eksempler på avanserte kommandoer

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)

Merknader og referanser

  1. The Traditional Vi  " (åpnet 19. februar 2018 )
  2. ex-viSourceForge.net
  3. svicc på floodgap.com
  4. bviSourceForge.net

Bibliografi

Se også

Relaterte artikler