vi

Vi

Beskrivelse af NetBSD 6.1-billedet vi C Hello World.png. Information
Skaberen Bill Joy
Første version 1976
Sidste version 050325 (25. marts 2005)
Depositum ex-vi.cvs.sourceforge.net/ex-vi/ex-vi
Skrevet i VS
Operativ system Unix-type
Type Modal teksteditor ( d )
UNIX-værktøj ( d )
Licens BSD-licens
Internet side ex-vi.sourceforge.net

vi er en tekstredigerer i fuld skærm skrevet af Bill Joy i 1976 på en tidlig version af BSD Unix- distributionen .

Det findes automatisk på de fleste af de nuværende Unix- systemer , ofte som en klon af den originale vi- software .

Navnets oprindelse

Navnet vi kommer fra den kortest mulige (dvs. entydig) forkortelse af den visuelle kommando af teksteditoren ex , fordi denne kommando ændrer redaktør ex fra linje for linje -tilstand til fuld skærm -tilstand  : Det er derfor i første omgang kun en visuel grænseflade (i Engelsk, Visual Interface ) af editoren ex (i sig selv en udvidelse af online editor ed ). ex er altid tilgængelig i vi ved at trykke på : i kommandotilstand. I praksis startes et enkelt program , når vi påkalder vi eller ex : dets adfærd bestemmes af det navn, som det blev kaldt til.

Navnet vi svarer til begge initialer og navnet på dens installationsfil, det udtages normalt ved at sige de to bogstaver på engelsk, det vil sige "vi-aille" , [vi: aɪ] , snarere end som en fuldgyldig ord [vi] . Analogien af ​​dette navn med det romerske tal VI (seks) er tilfældig.

Driftsprincip

vi er en modal editor, det vil sige, at betydningen af ​​knapper og taster ændres afhængigt af hvilken tilstand den er i.

I indsætningstilstand indsættes den indtastede tekst i dokumentet. Ved at trykke på Esc- tasten fra insert-tilstand kan du skifte til kommandotilstand , hvor tasterne svarer til markørbevægelser eller redigeringsfunktioner. For eksempel flytter j markøren en linje ned, x sletter tegnet under markøren (positionen "under markøren" kan betegne højre side af markøren, hvis sidstnævnte er placeret mellem tegnene, over understregningstegnet eller under det rektangulære blok, afhængigt af hvordan terminalen repræsenterer markøren).

Nøgler, der er skrevet i kommandotilstand, indsættes ikke i teksten, hvilket er en almindelig årsag til forvirring for brugere, der er nye for vi.

I kommandotilstand kan mange operationer udføres serielt med enkelt tastetryk uden behov for at holde Alt- eller Ctrl- tasterne nede . De mere detaljerede operationer består af mere primære operationer. For eksempel sletter d3w tre ord ( d til sletning og w for ord ), c2fa ændrer ( ændrer ) teksten, indtil den finder ( find ) den anden ( 2 ) a . Erfarne arbejdere, det gør det muligt at arbejde meget effektivt, det tillader også brugeren til altid at have hænderne på tastaturet.

Tidlige versioner af vi gav ingen indikation af, hvilken tilstand de var i. Det var almindeligt, at brugerne automatisk skrev Esc- tasten for at sikre, at editoren var i kommandotilstand (vi bipper, hvis den allerede er i denne tilstand). Mere moderne versioner af vi angiver tilstanden i en statuslinje eller grafisk (for eksempel markørens form eller farve). Grafiske implementeringer af vi (f.eks. GVim ) understøtter også brugen af ​​musen og menuerne for at få adgang til redigeringsfunktioner.

Udvikling

vi blev de facto standard editor for unix og var favoritredaktøren for mange hackere indtil ankomsten af Emacs i 1984 . Det skal bemærkes, at Emacs er mere end blot en teksteditor og alligevel ofte konkurrerer med vi. Til dato (2011) kan vi eller en af ​​dens kloner findes i næsten alle Unix-installationer. Den enkelte UNIX-specifikation (mere specifikt "IEEE-standard 1003.2, del 2: skal og forsyningsselskaber") inkluderer vi. Ethvert system, der overholder denne specifikation, inkorporerer således vi.

vi bruges stadig i vid udstrækning af brugere af forskellige Unix-varianter. Det starter hurtigere end tunge versioner af Emacs "editor" og bruger mindre hukommelse. Som et resultat bruger selv Emacs fans det som redaktør til e-mail eller til små redigeringer.

Når du opretter en gendannelsesdiskette ( redningsdisk til systemer, hvis harddisk ikke længere fungerer korrekt), vælges vi ofte som redaktør på grund af dens kompakthed (pladsen er meget begrænset på disketterne) og det faktum, at flertallet af mennesker udførelse af bjærgningsoperationer er i stand til at bruge det.

vi og Emacs er de flerårige krigsførere i redaktørens krig .

Kloner og derivater

Der findes mange vi-baserede teksteditorer. Kloner er gratis eller ikke- gratis implementeringer af vi, dvs. de følger teoretisk standard POSIX vi-kommandosættet. Imidlertid understøtter størstedelen af ​​disse kloner også yderligere funktioner. Derivater er programmer, teksteditorer eller ej, som har bevaret funktionsprincippet om vi (helt eller delvist) til deres egen drift.

En mere komplet liste kan findes i de eksterne links nedenfor .

Kom godt i gang med vi

Brugere, der er nye til vi, står ofte over for vanskeligheder, for det første på grund af genveje, der bruges til hver af kommandoerne, og for det andet fordi effekten af ​​disse genveje ændres afhængigt af hvilken tilstand vi er i.

En effektiv måde at komme i gang med vi er at følge en tutorial fra cover til cover, der forklarer de enklere kommandoer. De fleste systemer, der giver en implementering af vi, indeholder også en tutorial til vi.

Ved at forstå arbejdsprincippet med nogle få forklaringer og enkle eksempler kan størstedelen af ​​brugerne nå deres mål med vi. Imidlertid anses fluency med vi generelt for at tage længere tid at komme end med de andre redaktører, som det ofte sammenlignes med. Forsvarere af vi hævder, at denne indledende vanskelighed mere end opvejes af editorens effektivitet, når du først er komfortabel.

Kontrol og interface betragtes som uklare

Begyndere forveksles ofte med kommandoerne i vi. Disse er ofte reduceret til et enkelt bogstav og meget vanskelige at huske ved første øjekast, især da redaktøren præsenterer forskellige perspektiver (læsning, indsættelse, åben tilstand osv.), Som ikke tydeligt skelnes, og overgangen mellem disse tilstande ofte går ubemærket hen .

De fleste af kommandoerne i vi er valgt til:

Modal adfærd

Når vi starter med vi, er det vigtigt at forstå, at vi har flere driftsformer. De to hovedtilstande er kommandotilstand (hvor vi starter op) og indsætstilstand . Ordrer i ( i nsertion) eller har ( a dding) kontroltilstand tillader at skifte til insert-tilstand, mens nøglen Esc for at afslutte insert-mode og vende tilbage til kommandotilstand.

vi har også en anden driftstilstand, der giver mulighed for at definere makrokommandoer ved at integrere et ægte programmeringssprog til automatisering af tekstredigeringsopgaver.

Det er også muligt at kalde vi med argumenter, så det automatisk udfører kommandoer, når en fil åbnes. For eksempel kommandolinjen:

vi -c "1,%s/Deux/Trois/g|:wq" FICHIER

kører vi, som åbner filen "FILE", derefter erstatter alle "Twos" med "Threes" i filen og til sidst gemmer filen og afslutter.

Funktioner i vi

Makroer og forkortelser

vi giver dig mulighed for at definere makrokommandoer og forkortelser.

Makroer giver dig mulighed for at erstatte et tastetryk med et andet, hvilket giver dig mulighed for at definere nye kommandoer. For eksempel,

:map v 10dd

opretter kommandotilstand v kommando, som fjerner blokke på 10 linjer.

Forkortelser undgår at skrive en ret lang række bogstaver. For eksempel :

:ab GNU gnu is not unix

skaber forkortelsen GNU , som i indsættelsesmodus erstattes af gnu er ikke unix, så snart der er skrevet nok tegn til at løse enhver tvetydighed (forkortelser udvides normalt, når der indsættes et mellemrum for at indikere slutningen af ​​ordet).

Muligheder

Opførelsen af ​​vi og dets kommandoer kan justeres med det vi kalder "optioner". Kommandoen : set bruges til at se og ændre dem. Nogle muligheder er boolske, det vil sige, at de kun kan tage to værdier: sand eller falsk , eller mere nøjagtigt aktiveret og deaktiveret . For eksempel :

:set number

som kan forkortes med

:set nu

eller

:se nu

viser antallet af hver linje.

:set nonumber :set nonu

er ækvivalente og tillader, at denne mulighed deaktiveres.

Blandt de boolske muligheder kan vi finde (ikke-udtømmende liste):

Bestilt Effekt
: sæt ignorecase ignorere sag, når du søger efter strenge
: indstillet readonly forbyder ændring af den åbne fil
: indstil autoindent Indrykker automatisk kode ved redigering
: indstil lineal angiver række- og søjlenummer, som markøren er placeret på
: indstil showmode vis tilstanden vi er i

De andre muligheder tager en værdi. For eksempel :

:set tags=./tags

fortæller vi, hvor vi skal kigge efter markørfilen .

Sættet med alle tilgængelige indstillinger kan vises med

:set all

Konfigurationsfil

Sættet af vi-indstillinger (såvel som makroer og forkortelser) kan indstilles for hver redigeringssession ved at tilføje dem til ~ / .exrc- filen . Denne fil læses automatisk, når vi starter, og kommandoerne, den indeholder, udføres som om de blev skrevet af brugeren ( : initialen er unødvendig). Eksempel:

set nu map @ dd ab sig Mr. Robert Le NomBienLong

Eksempler på kommandoer

Eksempler på enkle kommandoer

Følgende tabel giver nogle grundlæggende kommandoer fra vi-editoren, der er nødvendige for de enkleste redigeringsopgaver. For at indtaste kommandoer skal du først afslutte editor-tilstand ved at trykke på Esc- tasten .

Bestilt Effekt
# kommando udfør # gange kommandoen (f.eks. 5dd sletter 5 linjer)
! beordrede kør en shell-kommando (for eksempel :! gcc -o hej hej.c )
>> og << tilføj og fjern en fane i henholdsvis starten af ​​linjen
/ toto og ? toto søger efter forekomster af karakterstrengen foo efter henholdsvis markøren og før markøren ( n går til den næste forekomst og N går til den forrige forekomst)
: # placer markøren på linje #
: $ placer markøren på den sidste linje
:. = returnerer nummeret på den aktuelle linje
0 flyt markøren til starten af ​​linjen
$ flyt markøren til slutningen af ​​linjen
h og l flyt markøren med et tegn til henholdsvis venstre og højre
j og k flyt markøren til henholdsvis næste og forrige linje
gg flyt markøren til starten af ​​filen
G flyt markøren til slutningen af ​​filen
H og L. flyt henholdsvis op og ned på skærmen
flytte markøren et tegn til højre og gå ind i indsættelsestilstand
flytter markøren til slutningen af ​​den aktuelle linje og skifter til insert-tilstand
vs. sletter et bestemt antal tegn afhængigt af underkommandoen og skifter til indsættelsestilstand (for eksempel cl gør det muligt at ændre det aktuelle tegn, cw slutningen af ​​det aktuelle ord)
VS sletter tegn fra markørposition til slutningen af ​​linjen og skifter til insert-tilstand
dd slet den aktuelle linje og kopier den til bufferen
dw fjern ordet efter markøren og kopier det til bufferen
dW fjern tegnstrengen efter markøren indtil det næste tomme tegn
: e efterfulgt af et filnavn, åbn denne fil til redigering
D fjern slutningen af ​​linjen fra markøren
jeg skifter til indsætningstilstand ved markørposition
jeg flytter markøren til starten af ​​linjen og skifter til insert-tilstand
o åbn en ny linje under den aktuelle linje
O åbn en ny linje over den aktuelle linje
s indsæt bufferindholdet efter markøren (eller efter den aktuelle linje, hvis bufferen indeholder linjer)
P indsæt buffertens indhold før markøren (eller før den aktuelle linje, hvis bufferen indeholder linjer)
: q afslut vi
: q! Afslut vi, selvom ændringer ikke er gemt
r udskift tegnet under markøren
u annullerer virkningerne af den forrige kommando
w placerer markøren på det første tegn i det næste ord
: w gem den aktuelle fil
: wq eller : x eller ZZ gem den aktuelle fil og afslut
x slet tegnet under markøren
x sletter tegnet til venstre for markøren
yy kopier den aktuelle linje i bufferen ( p indsætter den kopierede linje efter den aktuelle linje)
yw kopier ordet efter markøren i bufferen ( p indsætter det kopierede ord efter markøren)

Eksempler på avancerede kommandoer

Følgende kommandoer viser, hvad vi gør, når en bruger er på udkig efter mere sofistikerede redigeringskommandoer.

Bestilt Effekt
"ryy huske den aktuelle linje i registret "r
"rp indsæt registerets indhold "r efter den aktuelle linje eller efter markøren
: # 1, # 2t # 3 kopier linjer nr. 1 til nr. 2 efter linje nr. 3
: # 1, # 2m # 3 flytte linjer nr. 1 til nr. 2 efter linje nr. 3
: # 1, # 2s / toto / tutu / g udskift på linier nr. 1 til nr. 2 alle forekomster af tegnstrengen toto af tutu
:% s / toto / tutu / g erstatter på hver linje alle forekomster af karakterstrengen toto af tutu
:% s% til / til% tu / tu% g udskift på hver linje alle forekomster af tegnstrengen til / til med tu / tu (dette viser, at vi kan bruge et andet skilletegn end / - her % )
: s /.*/ \ U & / skift den aktuelle linje til store bogstaver
:% s / ^ foo // sletter på hver linje den første forekomst af karakterstrengen foo, hvis den er i begyndelsen af ​​linjen
: # 1, # 2g / toto / d sletter linierne indeholdende tegnstrengen foo mellem linier nr. 1 til nr. 2
: g! / toto / d slet linjer, der ikke indeholder strengen foo
: g / ^^^^^^^^ d fjern tomme linjer
: # 1, # 2g / toto / s / tutu / titi / gc erstatte efter bekræftelser til linjerne # 1 til # 2 indeholder tegnstrengen toto alle forekomster af tegnstreng tutu efter titi
: r toto.txt indsæt indholdet af toto.txt- filen
: r! ls -l indsæt resultatet af ls -l- kommandoen i den aktuelle fil
: # 1, # 2w toto.txt gem linier nr. 1 til nr. 2 i filen toto.txt
: e! genåbne den aktuelle fil (bruges f.eks. hvis filen er blevet ændret i mellemtiden)

Noter og referencer

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

Bibliografi

Se også

Relaterede artikler