Vi Editor: Varför programmerare tycker att den här gamla redaktören fortfarande är fantastisk

Avslöjande: Ditt stöd hjälper till att hålla webbplatsen igång! Vi tjänar en remissavgift för några av de tjänster vi rekommenderar på denna sida.


Vi är en textredigerare som ursprungligen skapades för Unix operativsystem. I stället för menyer använder vi kombinationer av tangenttryckningar för att utföra kommandon. Som sådan finns det inget behov av att använda en mus eller en pekplatta – allt görs exklusivt med tangentbordet.

Lär dig Vi Editor

Kortfattad bakgrund

Vi spårar sitt ursprung tillbaka till den tidigaste kommandoradsredigeraren som används i Unix-system som kallas ed. Ed fungerade extremt bra med teletyper men passade inte för visningsterminaler. Många människor ansåg att de var ovänliga och tog på sig att skapa en bättre version. Bland dem är George Coulouris, vid den tiden en föreläsare vid Queen Mary College, som skapade em, redaktören designad för visningsterminaler.

1976 besökte han UC Berkeley och visade dem för olika människor. Reaktionerna var blandade men ett par studenter, Bill Joy och Chuck Haley, var imponerade av dem och använde den som bas för sin egen redaktör som heter en som sedan utvidgades för att skapa ex version 0.1. Efter att Haley hade lämnat Berkeley, omgjorde Joy redaktören 1977, när han lägger till ett visuellt läge på helskärm till ex, vilket tillåter att text kan visas på en full skärm istället för bara en rad åt gången.

Ex 1.1 ingick officiellt i den första BSD Unix-utgåvan 1978 och det blev känt som vi efter frigörandet av ex 2.0 som en del av den andra Berkeley Software Distribution 1979 när redaktören installerades under namnet “vi” eftersom den automatiskt tog användare rakt in i ex’s visuella läge.

vi Kloner

Med tanke på att källkoden för den ursprungliga vi inte var fritt tillgänglig förrän 2002 skapades många kloner av vi-redaktören. De hade liknande utseende och funktionalitet men var skrivna helt från grunden. Detta gjorde det möjligt att lägga till fler funktioner och portera redigeraren till andra operativsystem.

Listan över vi-kloner inkluderar calvin, elvis, elwin, lemmy, nvi, stevie, vile, viper, BusyBox och xvi. Den mest populära klonen är dock Vim, som är en förbättrad version av vi-redaktören som distribueras med de flesta UNIX-system.

vim

Vim står för Vi IMproved och det innehåller ännu fler funktioner än vi, vilket gör det till en favorit bland många programmerare. Funktionerna inkluderar (skriptbar) syntaxbelysning, musstöd, grafiska versioner, visuellt läge, nya redigeringskommandon och tillägg för ex-kommandon. Det ingår i nästan varje Linux-distribution och skickas med varje kopia av Apple MacOS.

På grund av det faktum att vissa vi-funktioner saknas i Vim har den ett vi-kompatibilitetsläge, vilket gör att det striktare överensstämmer med vi. Den här funktionen kan styras av: inställt kompatibla alternativ.

Vim kan anpassas på många sätt – inklusive dess användargränssnitt och grundläggande funktionalitet. Du kan definiera anpassade makron för att automatisera sekvenser av tangenttryckningar, ställa in interna användarfunktioner och dra nytta av många plugins som lägger till Vim en ny funktionalitet. Pluginterna skrivs på Vims interna skriptspråk som kallas vimscript. Det stöder också skript med Lua, Perl, Python, Ruby, Tcl och Racket.

Vi Grunderna

Det här avsnittet tar dig igenom alla grunderna i vi så att du kan börja redigera dokument produktivt direkt. Men kom ihåg: det finns mycket mer att veta, och allt du lär dig kommer att göra dig mer produktiv.

Vad gör Vi?

Med vi kan du redigera textfiler med bara tangentbordet. Detta inkluderar XML, TeX, HTML och programmeringsspråk, men inte binära filer som Word eller OpenDocument. Om du vill redigera en fil skriver du kommandoraden:

vi filnamn

När vi kör tar det över terminalfönstret. Om filen redan finns, kommer början av den att fylla på skärmen. Filens namn visas på den sista raden. Om den inte redan existerar kommer skärmen att fyllas med tomma rader förutom en sida i vänster marginal. Den nedersta raden visar “[Ny fil]” efter namnet.

Till en början är du i kommandoläge. Detta är ett av vi tre huvudlägen. I kommandoläge är varje tangenttryckning ett kommando. Du kan börja med att trycka på “i.” Du är nu i infogningsläge, eftersom ordet “- INSERT -” längst ner i fönstret påminner dig. Allt du skriver kommer att läggas till som text. Tryck på knappen för att komma tillbaka från infoga till kommandoläge.

Det tredje läget är sista radläget. Du kommer till det från kommandoläget genom att skriva kolon (:) -tangenten. När du befinner dig i sista radläget skriver du in en kommandorad längst ner i fönstret. Det körs bara när du trycker på. Om du vill spara vad du har lagt in skriver du “: w” (kolon följt av små bokstäver w och). Det kommer att skriva ut filen. Om det är en ny fil måste du ange ett filnamn. Detta görs genom att ange “: w filnamn” följt av. Efter detta kommer du tillbaka till kommandoläget.

Alla tangenttryckningar i vi är skiftlägeskänsliga! Om du av misstag lämnar locklåset på, kan konstiga saker hända.

Navigering

Den här artikeln beskriver bara några grundläggande vi-kommandon. För mer avancerad information, se vim-dokumentationen.

Liten skala rörelse

Du kan flytta markören med piltangenterna eller med “j” (ned), “k” (upp), “h” eller (vänster) och “l” eller (höger). Det är bäst att undvika piltangenterna av flera orsaker. Det största är att dina fingrar inte behöver lämna hemmapositionen. En annan är att de inte alltid är tillgängliga – om du hittar en gammal version eller en där terminaltypen inte är korrekt inställd. Slutligen, om du oss: kartfunktionen (se nedan), är det lättare att använda bokstavskommandona.

Du kan förflytta ett ord med “w” eller gå tillbaka ett ord med “b.”

Storskalig rörelse

Att skriva “0” tar dig till början av raden och “$” till slutet. På liknande sätt kommer “: 0” att ta dig till början av filen och “: $” tar dig till slutet av den. Detta är en del av ett generellt system där “: num” tar dig till radnummer num. Så “: 101” tar dig till rad nummer 101. (Om det finns mindre än 101 rader i filen tar det dig till slutet av filen.)

Vi tillåter dig vanligtvis att göra viktiga saker på mer än ett sätt. Så du kan gå till en viss rad med “Gnum” där num är radnumret. Det har fördelen att kräva en mindre karaktär. Men det har nackdelen att inte stämma överens med “0” och “$” så att “0G” inte tar dig till början av filen och “$ G” tar dig inte till slutet.

Ytterligare två kritiska navigeringskommandon är ctrl-b för att gå tillbaka en sida, och ctrl-f för att gå framåt en sida.

Lägga till och ändra text

Du har redan sett kommandot “i” för att infoga text. Det kommer att placera det du skriver med början vid markörens position. Kommandot “a” kommer att infoga text som börjar på tecknet efter det du är på. Så det är lätt att tänka på dessa två kommandon är att infoga (i) och bifoga (a). Om du kommer ihåg dessa, kan du enkelt komma ihåg de stora versionerna av dessa kommandon. “A” -kommandot sätter in text i slutet av raden och kommandot “I” infogar text i början av raden. Kapitlet “A” kommer att lägga till det du skriver i slutet av raden.

Om du skriver “o” öppnas en ny rad efter markörraden och låter dig börja skriva in den. Kapitel “O” kommer att göra samma sak innan markörradet.

Ta bort text

Raderingskommandon är mycket mångsidiga. Att skriva “dw” kommer att radera ett ord, börjar vid markörens position. Du kan lägga ett nummer framför det för att radera så många ord. Så “3dw” kommer att radera tre ord. Att skriva “d $” eller “D” kommer att raderas till slutet av raden. “Dd” -kommandot raderar hela raden och “10dd” raderar tio rader. Att skriva “d” (bokstaven d följt av ett mellanslag) eller “x” kommer att radera ett enda tecken. Att skriva “20x” kommer att ta bort upp till 20 tecken men går inte förbi den aktuella raden.

Ändrar text

Kommandot för att ändra text är “c.” Det fungerar exakt på samma sätt som “d” -kommandot förutom att det sedan går in i insert-läge där texten raderades. Så 3cw kommer att radera tre ord och ersätta dem med vad du skriver tills du träffar .

Få inte panik om du har tagit bort fel sak. “U” -kommandot ångrar den senaste ändringen du gjorde. I de flesta implementeringar kan du ange det flera gånger för att ångra de senaste ändringarna. Om du ångrar en gång för många kommer ctrl-r att göra om det du bara ångrar.

En av de mest kraftfulla sakerna i vi är “.” kommando. Detta upprepar din senaste ändring. Så om du bara använde “3cw” för att ändra text, skriver du “.” kommer att orsaka de nästa tre orden (var du än är) till vad du än ändrade de tre sista orden till. Eller, om du bara raderade tio rader med “10dd”, ange “.” kommer att radera de nästa tio raderna. Detta är också mycket användbart med kommandot “: map”.

Klistra in text

Du kan flytta text från en plats till en annan genom att radera och klistra in. Kommandot att klistra in är “p” att klistra in efter markören eller “P” att klistra in innan den. Om du tar bort en eller flera hela rader med text visas texten nedan (med “p”) eller ovan (med “P”) den aktuella raden.

Yanking Text

Kommandot “y” för “yank” kopierar snarare än att ta bort. Det lägger texten i en tillfällig buffert som du kan klistra in någon annanstans, en eller flera gånger. Alternativen är som de som ska raderas, förutom att “yy” används för att få en hel rad. (Detta motsvarar “dd” för att radera en hel rad.)

Var försiktig. Varje gång du lurar eller raderar, går texten i den namngivna bufferten, som är som Urklipp i andra applikationer. Den ersätter den tidigare icke nämnda bufferten. Om du vill hålla texten lite längre kan du använda en av de 26 namngivna buffertarna. Du anger det genom att gå före bokstaven med ett tecken med dubbla offertar. För att ta ut fyra rader i bufferten med namnet “c”, skriv “4 ″ cyy” (citerade i enstaka citat bara för tydlighet). För att klistra in den använder du samma dubbelcitationstecken och buffertbokstav innan klistra in kommandot. Så om du vill klistra in de fyra raderna som vi bara kopierade till “c” -bufferten till raden under den nuvarande, skulle du använda kommandot ” cp ‘.

Sökande

För att söka efter text skriver du “/” följt av söksträngen och. Det kommer att hitta nästa match efter markören, och omvandlas till toppen om det behövs. Om du vill söka bakåt skriver du “?” istället för “/.”

Fall

Sökning är som versal-känslig som standard. Starta söksträngen med “c” för att göra en okänslig sökning. Så om du använder “/ cthis” följt av, kommer vi att hitta “detta” oavsett dess aktivering. Du kan också ändra standarden genom att ange “: set ignorecase” följt av. Du kan också ange “: set ic.” För att gå tillbaka till skiftlägeskänsliga sökningar skriver du in “: set noignorecase” eller “: set noic.”

Du kan upprepa den sista sökningen med kommandot “n”. Om du vill söka i motsatt riktning, använd kommandot “N”.

Vanliga uttryck

Söksträngen är faktiskt ett vanligt uttryck. Detta låter dig söka efter mönster, men vissa tecken fungerar inte som bokstavliga matchningar. Som ett enkelt exempel hittar du “trä”, “vind” eller “w00d.” Det här är för att “.” i en sökning matchar alla tecken. Om du vill söka efter “.” du anger ett backslash innan det. Så du skulle ange “/.” kommando.

För mer information om vanliga uttryck, kolla in vår artikel, Regular Expressions Primer and Resource.

Arbeta med filer

Som redan nämnts kommer “: w” att spara filen. Om du vill spara den i en annan fil skriver du “: w newfilename.” När du är klar med vi kan du skriva “: wq” för att spara och avsluta. Glöm inte att ett sista rad kommando som börjar med en kolon kräver att du skriver för att slutföra det. Som ett resultat använder många vi-entusiaster kommandot “ZZ”, vilket gör samma sak.

Ny fil

Om du vill växla till en annan fil skriver du “: e newfilename”. Om du inte har sparat den föregående filen kommer vi att varna dig. Om du verkligen vill kassera dina ändringar använder du “e! newfilename ”. Du kan använda “: e!” utan filnamn om du har klarat av och vill återgå till den senaste sparade versionen av den aktuella filen.

Du kan växla mellan den aktuella filen och den sista filen du redigerade med kommandot “: e #”. Med detta kan du växla fram och tillbaka mellan två filer, vilket liknar redigering av två filer samtidigt, som vi diskuterar nedan.

Flera filer

Du kan redigera flera filer samtidigt och växla mellan dem. I vi-terminologin växlar du mellan deras redigeringsbuffertar. För att redigera flera filer i en session, starta vi med en kommandorad som denna:

vi-fil1-fil2-fil3

Den första filen du listar visas på skärmen. För att gå igenom dem kan du använda “: bn” (nästa buffert) eller “: bp” (föregående buffert). Du kan luta dig till namngivna buffertar för att kopiera text från en fil till en annan. (Redigera buffertar och klistra buffertar är två olika saker. Det är lite förvirrande.)

Shell-kommandon från Vi

Du kan köra skalkommandon utan att lämna vi. För att göra detta, skriv “:!” (kolon och utropstecken) följt av kommandot. Du ser utdata från kommandot och sedan måste du slå för att komma tillbaka till kommandoläget. Du kan till och med skriva “:! Sh” för att köra ett skal från vi, utföra flera kommandon och sedan gå tillbaka till vi. Det här är praktiskt om du redigerar en kod och vill testa dina ändringar.

Du kan köra ett shell-kommando och infoga dess output i den aktuella filen genom att skriva “: r! Kommando”.

Mappning av tangentbord

En av de mest kraftfulla sakerna med vi är dess förmåga att kartlägga kommandon på nycklar. Det görs på följande sätt:

: kartnyckelkommandon

Nyckeln är en enda karaktär. Det kan vara vilken som helst karaktär, men det är bäst att du inte använder en nyckel som redan är ett kommando som “c” eller “a.” Kommandona kan vara ganska komplicerade. De kan till exempel inkludera Enter-tangenten med “” och Escape-tangenten med “.” Så om du har en upprepande uppgift kan du enkelt kartlägga den till en enda nyckel. Till exempel kommer följande kommando att “q” -tangenten flyttas till det andra ordet i nästa rad, ändra den till “Hjälp!” och återgå till den första karaktären i den ursprungliga raden:

: karta q j0wcwHjälp! k

Kartkommandot är som mest kraftfullt i kombination med regelbundna uttryck och kommandot repetera (“.”). När du befinner dig som gör något tråkigt i vi, se om du kan konstruera en kartläggning som kan göra det. I de flesta fall kan du göra det.

Resurser

Detta har varit en mycket snabb överblick över vad som är möjligt i vi. Kontrollera igen dokumentationen för fullständig information. Du kanske vill bokmärka ett fuskark, till exempel vimsheet.com eller Vim Cheat Sheet for Programmers. Här är några fler resurser:

Online-resurser

Följande resurser består av olika artiklar, självstudier och till och med fuskark.

  • The Traditional Vi: den officiella hemsidan för vi-redaktören med nedladdningslänkar.
  • Vi Vanliga frågor: ett bra ställe att börja eftersom det svarar på några av de vanligaste frågorna om vi och varför det är värt att lära sig det.
  • En introduktion till visningsredigering med Vi: en tutorial om vi inriktad på mer avancerade användare, som täcker dess funktioner och hur man använder den.
  • Vi Manual Page: ger en beskrivning av tillgängliga kommandon.
  • Unix – Vi Editor Tutorial: en mycket kort och till den punktstudie för vi, riktad till kompletta nybörjare.
  • Så här använder vi Vi: en annan handledning riktad till kompletta nybörjare att fungera som en “mild introduktion” till redaktören, men det kan också användas som referensmaterial för mellananvändare.
  • Vi Cheat Sheet: ett praktiskt fuskark med vi-kommandona.
  • Vim: den officiella hemsidan för Vim.
  • Interaktiv Vim-handledning: Som namnet antyder är denna handledning interaktiv – emulerar kommandoraden och tangentbordet i din webbläsare så att du kan testa det och lära dig Vim utan rädsla för att bryta din dator.
  • Grafisk Vi-Vim fuskblad och handledning: ett grafiskt fuskark som visar kärnkommandona på ett tangentbord GIF med tillhörande handledning.
  • Vim Awesome: en ganska stor samling av plugins för Vim.
  • En extremt snabb och enkel introduktion till Vi Text Editor: denna handledning av Norm Matloff ger en “5-minuters introduktion” till vi. Det är förmodligen lite för spänt för riktiga nybörjare, men det är ett bra dokument om du bara behöver en snabb påminnelse.
  • Vi Text Editor: denna Ryan’s Tutorial ger en grundläggande introduktion som tar dig ett sätt att veta ingenting.
  • Lär dig Vim progressivt: denna tutorial startar i början men kommer snabbt in i många avancerade ämnen.
  • Kartlägga nycklar i Vim: detta är en grundlig guide till kartläggning med vim. Om du vill bli vi-power-användare måste du kolla in detta.

Videohandledning

Flera tutorials finns tillgängliga om du föredrar att lära dig när du går.

  • Vi / Vim Editor: en inledande handledning om hur vi använder vi / vim-redigeraren, inklusive hur man öppnar en fil, infogar text, skriver texten till en fil och avslutar vi.
  • Lär dig att älska Vim: inte en självstudie, men det belyser varför du bör använda Vim.
  • Learning Vim in a Week: ett föredrag presenterat av Mike Coutermash, baserat på hans blogginlägg Learning Vim in a Week. Riktat på nybörjare, det täcker att komma igång med Vim.

Böcker

Med tanke på populariteten hos både vi och Vim täcker följande böcker redaktörerna i stort djup.

  • Learning the Vi and Vim Editors (2008) av Robbins, Hannah och Lamb: omfattar redigeringsgrunder och avancerade verktyg för både redaktörer och programmerare, såsom redigering i flera fönster, hur man skriver både interaktiva makron och skript för att utöka redigeraren och Mer.
  • Mastering Vim (2014) av Damien Conway: bäst lämpad för mellananvändare, täcker Vims mer avancerade funktioner, konfigurationsalternativ och flera plugins som gör redigeringsupplevelsen bättre.
  • Hur man använder UNIX-LINUX Vi Text Editor: Tips, tricks och tekniker (And Tutorials Too!) (2006) av Larry L Smith: detta är en kort och enkel introduktion till redaktören. Om du vill komma igång på en helg är det denna bok som ska användas.
  • Practical Vim: Edit Text at the Speed ​​of Thought (2015) av Drew Neil: om du redan känner vi-redaktören och vill bli en power-användare, är det den här boken att använda. Den består av 126 tips som visar varför vissa människor går förlorade utan vi.
  • Vi och Vim Editors Pocket Reference (2011) av Arnold Robbins: täcker de mest värdefulla kommandona för vi, Vim och vi: s huvudkloner.

Det tar lite tid att bli vi-expert, men när du väl kommer dit kommer du att undra varför du någonsin brytt dig med en mus.

Slutsats

Bland seriösa utvecklare (åtminstone i Unix-världen) finns det egentligen bara två redaktörer som är värda att nämna: Emacs och vi. De har båda sina fördelar och nackdelar. Och olika människor har starka åsikter om vilken redaktör du ska använda.

Richard Stallman är grundaren av GNU-projektet och rörelsen för fri programvara. Förutom att skriva den ursprungliga GNU-kompilatorn (GCC) skrev han GNU Emacs. Här har han lite kul på vi: s bekostnad:

Med Emacs kan du göra mycket mer – särskilt om du kodar i Lisp. Men vi är extremt lätt och för någon som vet det väl, extremt kraftfullt och snabbt.

Ovanstående resurser hjälper dig att bli vi-master på nolltid – och förbättra din produktivitet kraftigt.

Ytterligare läsning och resurser

Vi har fler guider, självstudier och infografik relaterade till kodning och utveckling:

  • Mantis Hosting: ta reda på vilka webbhotellföretag som erbjuder bra erbjudanden som inkluderar detta populära bugspårningsprogram, ett viktigt verktyg för seriösa kodare.
  • Ubuntu Primer: lära dig allt om en av de mest populära Linux-distributionerna. Det är ett fantastiskt system att utveckla på – och det kommer med vim!
  • Objektorienterad programmering: lära sig om begreppen objektorienterade språk och specificiteten för ett brett spektrum av objektorienterade programmeringsspråk. Vissa kan överraska dig. Objektorienterad Fortran?!

Skulle Internet överleva världens slut?

Har du någonsin undrat vad en stor katastrof skulle göra på internet? Kolla in vår infographic, skulle Internet överleva världens slut? Det är möjligt att vi alla kan förstöras men internet skulle leva vidare.

Skulle Internet överleva världens slut?
Skulle Internet överleva världens slut?

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me