# Välkommen till VIM-handledningen # KAPITEL TVÅ Hic Sunt Dracones: om detta är din första kontakt med vim och du vill utnyttja introduktionskapitlet, skriv på kommandoraden i Vim-redigeraren ~~~ cmd :Tutor vim-01-beginner ~~~ Eller öppna bara [första kapitlet](@tutor:vim-01-beginner) i handledningen via länken. Det tar ungefär 8–10 minuter att gå igenom detta kapitel, beroende på hur mycket tid du lägger på att experimentera. # Lektion 2.1.1: BEHÄRSKA TEXTOBJEKT ** Arbeta med logiska textblock med precision med hjälp av textobjekt ** 1. Öva på ordoperationer: - Placera markören på valfritt ord i raden nedan - Skriv `diw`{normal} för att radera INNER ord (ord utan omgivande mellanslag) - Skriv `daw`{normal} för att radera ETT ORD (inklusive efterföljande blanksteg) - Prova med andra operatorer: `ciw`{normal} (ändra), `yiw`{normal} (yank), `gqiw`{normal} (formatera) Öva på: ”Vim's”, (text_object) och ’powerful’ här. 2. Arbeta med innehåll inom parenteser: - Placera markören inom något av parenteserna () {} [] <> nedan - Skriv `di(`{normal} eller `dib`{normal} (ta bort inre parentes) - Skriv `da(`{normal} eller `dab`{normal} (ta bort runt parenteserna) - Prova samma sak med `i”`{normal}/`a”`{normal} för citattecken, `it`{normal}/`at`{normal} för HTML/XML-taggar Testfall: {curly}, [square], och ”quoted” objekt. 3. Manipulering av stycken och meningar: - Använd `dip`{normal} för att radera inre stycke (markören var som helst i stycket) - Använd `vap`{normal} för att visuellt markera hela stycket - Prova `das`{normal} för att radera en mening (fungerar mellan .!? skiljetecken) 4. Avancerade kombinationer: - `ciwnew`{normal} - Ändra aktuellt ord till ”new” - `ciw”-”`{normal} - Sätt aktuellt ord inom citattecken - `gUit`{normal} - Skriv inre HTML-tagginnehåll med versaler - `va”p`{normal} - Markera text inom citattecken och klistra in över den Slutlig övning: (Ändra ”denna" text) genom att [tillämpa {olika} operationer]< # Lektion 2.1.2: DE NAMNGIVNA REGISTREN ** Lagra två kopierade ord samtidigt och klistra sedan in dem ** 1. Flytta markören till raden under märket ✓ 2. Navigera till valfri punkt i ordet ”Edward” och skriv `”ayiw`{normal} **MINNESREGEL**: *in i register(”) med namnet (a) (y)ank (i)nner (w)ord* 3. Navigera framåt till ordet ’cookie’ (`fk`{normal} eller `3fc`{normal} eller `$2b`{normal} eller `/co`{normal} ``{normal}) och skriv `"byiw`{normal} 4. Navigera till valfri punkt i ordet ’Vince’ och skriv `ciwa` {normal} **MNEMONIC**: *(c)hange (i)nner (w)ord med med namnet (a)* 5. Navigera till valfri punkt i ordet ”cake” och skriv `ciwb`{normal} a) Edward kommer hädanefter att ansvara för kakorna b) I denna egenskap kommer Vince att ha ensamrätt att bestämma över kakorna OBS: Delete fungerar även i register, dvs. `"sdiw`{normal} raderar ordet under markören till register s. REFERENS: [Register](register) [Namngivna register](quotea) [Motion](text-objects) [CTRL-R](i_CTRL-R) # Lektion 2.1.3: UTTRYCKREGISTRET ** Infoga resultaten av beräkningar direkt ** 1. Flytta markören till raden under märket ✗ 2. Navigera till valfri punkt på det angivna talet 3. Skriv `ciw=`{normal}60\*60\*24 ``{normal} 4. På nästa rad går du in i infogningsläget och lägger till dagens datum med `=`{normal}`system(’date’)`{vim} ``{normal} OBS: Alla anrop till system är beroende av operativsystemet, t.ex. på Windows använder du `system(’date /t’)`{vim} eller `:r!date /t`{vim} Jag har glömt det exakta antalet sekunder i en dag, är det 84600? Dagens datum är: OBS: samma sak kan uppnås med `:pu=`{normal}`system(’date’)` {vim} eller, med färre tangenttryckningar `:r!date`{vim} REFERENS: [Uttrycksregister](quote=) # Lektion 2.1.4: DE NUMMERERADE REGISTRA ** Tryck på `yy`{normal} och `dd`{normal} för att se deras effekt på registren ** 1. Flytta markören till raden under den markerade ✓ 2. Kopiera raden som börjar med ”0.”, och inspektera sedan registren med `:reg`{vim} ``{normal} 3. Ta bort rad 0 med `"cdd`{normal}, och inspektera sedan registren (Var förväntar du dig att rad 0 ska vara?) 4. Fortsätt att radera varje efterföljande rad och kontrollera `:reg`{vim} medan du gör det OBS: Du bör lägga märke till att gamla rader som raderats flyttas nedåt i listan när nya rader som raderats läggs till 5. Klistra nu in följande register i ordning: c, 7, 4, 8, 2. Dvs. `"7p`{normal} 0. Detta 9. vagga 8. hemlighet 7. är 6. på 5. axeln 4. en 3. krig 2. meddelande 1. hyllning OBS: Radradering av hela rader (`dd`{normal}) lever mycket längre i de numrerade registren än radradering av hela rader eller radering som involverar mindre rörelser REFERENS: [Numrerade register](quote0) # Lektion 2.1.5: SPECIALREGISTER ** Använd systemets urklipp och blackhole-register för avancerad redigering ** Obs: Användning av urklipp kräver X11/Wayland-bibliotek på Linux-system OCH en Vim byggd med ”+clipboard” (vanligtvis en Huge-byggnad). Kontrollera med `:version`{vim} och `:echo has(’clipboard_working’)`{vim} 1. Urklippsregister `+`{normal} och `*`{normal} : - `”+y`{normal} - Kopiera till systemets urklipp (t.ex. `”+yy`{normal} för aktuell rad) - `"+p`{normal} - Klistra in från systemets urklipp - `”*`{normal} är primärt val på X11 (mittenklick), `”+`{normal} är urklipp Prova: ”+yy och klistra sedan in i ett annat program med Ctrl-V eller Cmd+V 2. Blackhole-registret `_`{normal} raderar text: - `”_daw`{normal} - Radera ord utan att spara i något register - Användbart när du inte vill skriva över ditt standardregister `”`{normal} - Observera att detta använder textobjektet ”a Word”, som introducerades i en tidigare lektion - `”_dd`{normal} - Ta bort rad utan att spara - `”_dap`{normal} - Ta bort stycke utan att spara - Kombinera med antal: `3”_dw`{normal} Övning: ”_diw på valfritt ord för att radera det utan att påverka yank-historiken 3. Kombinera med visuella markeringar: - Markera text med V och sedan `”+y`{normal} - För att klistra in från urklipp i infogningsläge: `+`{normal} - Försök öppna ett annat program och klistra in från urklipp 4. Kom ihåg: - Urklippsregister fungerar mellan olika Vim-instanser - Urklippsregistret fungerar inte alltid - Blackhole förhindrar oavsiktlig överskrivning av register - Standardregistret `"`{normal} är fortfarande tillgängligt för normal yank/paste - Namngivna register (a-z) förblir privata för varje Vim-session 5. Felsökning av urklipp: - Kontrollera stöd med `:echo has(’clipboard_working’)`{vim} - 1 betyder tillgängligt, 0 betyder inte kompilerat - På Linux kan vim-gtk- eller vim-x11-paketet behövas (kontrollera `:version`{vim} -utdata) # Lektion 2.1.6: SKÖNHETEN I MARKERINGAR ** Undvik aritmetik för kodapor ** OBS: ett vanligt problem vid kodning är att flytta runt stora kodblock. Följande teknik hjälper till att undvika beräkningar på talraden i samband med operationer som `"a147d`{normal} eller `:945,1091d a`{vim} eller ännu värre med `i=`{normal}1091-945 `` {normal} först 1. Flytta markören till raden nedan markerad med ✓ 2. Gå till den första raden i funktionen och markera den med `ma`{normal} OBS: den exakta positionen på raden är INTE viktig! 3. Navigera till slutet av raden och sedan till slutet av kodblocket med `$%`{normal} 4. Ta bort blocket till register a med `”ad'a`{normal} **MINNESREGEL**: *till register(”) med namnet (a) lägg (d)eletionen från markören till raden som innehåller markeringen(') (a)* 5. Klistra in blocket mellan BBB och CCC `"ap` {normal} OBS: öva på denna operation flera gånger för att bli flytande `ma$%"ad'a`{normal} ~~~ cmd AAA function itGotRealBigRealFast() { if ( somethingIsTrue ) { doIt() } // taxonomin för vår funktion har ändrats och den // är inte längre alfabetiskt logisk i sin nuvarande position // föreställ dig hundratals rader med kod // naivt sett skulle du kunna navigera till början och slutet och registrera eller // komma ihåg varje radnummer } BBB CCC ~~~ OBS: märken och register delar inte samma namnområde, därför är register a helt oberoende av märket a. Detta gäller inte register och makron. REFERENS: [Markeringar](markeringar) [Markeringsrörelser](markeringsrörelser) (skillnaden mellan ' och \`) # Lektion 2.1 SAMMANFATTNING 1. Textobjekt möjliggör precisionsredigering: - `iw`{normal}/`aw`{normal} - inuti/runt ord - `i[`{normal}/`a[`{normal} - inuti/runt parentes - `i”`{normal}/`a”`{normal} - inuti/runt citattecken - `it`{normal}/`at`{normal} - inuti/runt tagg - `ip`{normal}/`ap`{normal} - inuti/runt stycke - `is`{normal}/`as`{normal} - inuti/runt mening 2. För att lagra (kopiera, radera) text i och hämta (klistra in) från totalt 26 register (a-z) 3. Kopiera ett helt ord från valfri plats i ett ord: `yiw`{normal} 4. Ändra ett helt ord från valfri plats i ett ord: `ciw` {normal} 5. Infoga text direkt från register i infogningsläge: `a`{normal} 6. Infoga resultaten av enkla aritmetiska operationer: `=`{normal}60\*60``{normal} i infogningsläge 7. Infoga resultaten av systemanrop: `=`{normal}`system(’ls -1’)`{vim}``{normal} i infogningsläge 8. Inspektera register med `:reg`{vim} 9. Lär dig den slutliga destinationen för raderingar av hela rader: `dd`{normal} i de numrerade registren, dvs. i fallande ordning från register 1 till 9. Uppskatta att raderingar av hela rader bevaras i de numrerade registren längre än någon annan operation 10. Lär dig den slutliga destinationen för alla yanks i de numrerade registren och hur kortlivade de är 11. Placera markeringar från kommandoläge `m[a-zA-Z0-9]` {normal} 12. Flytta radvis till en markering med `'`{normal} 13. Specialregister: - `”+`{normal}/`”*`{normal} - Systemets urklipp (beroende på operativsystem) - `"_`{normal} - Blackhole (kasta bort raderad/yankad text) - `”=`{normal} - Uttrycksregister - `”-`{normal} - Litet raderingsregister # SLUTSATS Detta avslutar kapitel två i Vim Tutor. Det är ett pågående arbete. Detta kapitel är skrivet av Paul D. Parker och Christian Brabandt. Modifierat för vim-tutor-mode av Restorer. Översatt av Daniel Nylander .