# Vi-inmatningsläget

## Vi-inmatningsläge

Målet för VI-läget är inte att vara en fullständig ersättning av Vim och stödja alla funktioner i Vim. Dess mål är att göra Vim-sättet att redigera (och vanorna inlärda med Vim) tillgängligt för program som använder texteditorn &kappname; som intern editor.

VI-lägets mål är att integreras väl med programmet och skilja sig från Vims beteende när det är lämpligt. Exempelvis öppnas en dialogruta för att spara med ``:w`` i &kappname;s VI-läge.

För att aktivera VI-inmatningsläget för alla nya vyer, gå till Inställningar Anpassa &kappname;... Redigering Vi-inmatningsläge. Under denna flik kan du ställa in alternativ för VI-inmatningsläget samt definiera och redigera tangentbindningarna för läget. Vi-inmatningsläge kan också växlas med inställningen Vi-inmatningsläge i menyn Redigera. (Normal genväg är Meta&Ctrl;V, där Meta oftast är Fönster-tangenten).

Många tangentbordskommandon i VI-läget är skiftlägeskänslig, i motsats till de flesta tangentbordsgenvägar i &kde;. Det betyder att `y` och `Y` är olika kommandon. För att skriva in kommandot `y` (ryck ut), försäkra dig om att Caps Lock inte är aktivt och tryck på Y. För att skriva in kommandot `Y` (ryck ut till radens slut), tryck på &Shift;Y.

Detta gäller inte för kommandon som använder &Ctrl;-tangenten, vilka kan skrivas in oberoende av värdet på Caps Lock och utan att hålla ner &Shift;. Dock kräver vissa kommandon användning av &Ctrl;-tangenten följt av en annan tangent som är skiftlägeskänslig. För att exempelvis skriva in &Ctrl;W `h` (byt till delad vy höger) försäkra dig om att Caps Lock inte är aktivt, tryck på &Ctrl;W, släpp, och tryck därefter på H.

### Funktioner inkompatibla med Vim

Det finns bara ett fåtal funktioner i &kappname;s VI-läge som är inkompatibla med Vim (om man inte räknar saknade funktioner). De listas nedan tillsammans med respektive orsak.

- &kappname;: `U` och &Ctrl;R är gör om.

  Vim: &Ctrl;R är vanlig gör om, U används för att ångra alla senaste ändringarna på en rad.

  Orsaken att låta U fungera som ångra i &kappname;s VI-läge är att genvägen &Ctrl;R normalt används av &kappname;s ersättningsfunktion (sök och ersätt). Normalt överskrider inte VI-läget &kappname;s genvägar (det kan ställas in i Inställningar Anpassa &kappname;... Redigering Vi-inmatningsläge), och därför måste åtgärden Gör om också vara tillgänglig som en vanlig tangent. Dessutom motsvarar inte beteendet hos kommandot `U` i Vim &kappname;s interna ångringssystem väl, så det skulle hur som helst inte vara trivialt att stödja.

- &kappname;: ``print`` visar dialogrutan Skriv ut.

  Vim: ``print`` skriver ut raderna i det angivna intervallet, liksom i dess föregångare ed.

  Kommandon som ``:print`` är inte bara tillgängliga i VI-läge, utan också för användare som använder &kappname; på vanligt sätt. Därför visar kommandot ``:print`` utskriftsdialogrutan, med principen att minimera överraskningar istället för att härma Vims beteende.

- &kappname;: `Y` rycker ut till radens slut.

  Vim: `Y` rycker ut hela raden, precis som `y` `y`.

  Vims beteende för kommandot `Y` är i praktiken ett fel. Både för ändrings- och borttagningskommandon utför `c` `c`/ `d` `d` åtgärden för aktuell rad och `C`/`D` fungerar från markörens kolumn till radens slut. Dock rycker både `y` `y` och `Y` ut aktuell rad. I &kappname;s VI-läge rycker `Y` ut till radens slut. Det beskrivs som mer logiskt i Vims dokumentation.

- &kappname;: `O` och `o` påbörjar [`antal`] nya rader och går till infogningsläge.

  Vim: `O` och `o` påbörjar en ny rad och infogar text [`antal`] gånger när infogningsläget lämnas.

  Det har i huvudsak gjorts som en följd av att ha stött på många som blivit förvirrade av beteendet på en Vim IRC-kanal (#vim på Freenode).

### Byta lägen

- Normalt läge låter dig ange kommandon för att navigera eller redigera dokumentet, och är förvalt läge. Du kan återgå till det från vilket annat läge som helst genom att trycka på Esc.

- Visningsläge låter dig markera text i ett dokument. De flesta kommandon från normalläget är också giltiga i detta läget. Du kan gå till det genom att trycka på `v` för att markera tecken, eller `V` för att markera rader.

- Infogningsläge låter dig redigera dokumentet direkt. Du kan gå till det genom att trycka på `i` eller ett av flera andra kommandon som listas nedan.

- Kommandoläget aktiverar &kappname;s kommandorad, vilket möjliggör att köra många kommandon tillgängliga i Vi-implementeringar samt vissa specifika för &kappname;. För mer information om dessa kommandon, se advanced-editing-tools-commandline. För att använda det, tryck på :, skriv in kommandot och tryck på returtangenten.

### Integrering med funktioner i Kate

- Visuellt läge aktiveras automatiskt när text markeras med musen. Det aktiveras också när funktioner i Kate som markerar text används, såsom Markera alla (antingen från menyn eller via &Ctrl;A).

- Markörer i Vi och bokmärken i Kate är integrerade. När en markör skapas i VI-läge, skapas ett motsvarande bokmärke i Kate, och dyker upp i menyn Bokmärken. Omvänt, när ett bokmärke skapas i Kate, skapas en motsvarande markör i Vi på kolumn 0 också.

### Kommandon som stöds i normalt och visningsläge

`a` | Gå till infogningsläge, lägg till efter markören
`A` | Gå till infogningsläge, lägg till efter raden
`i` | Gå till infogningsläge, lägg till före markören
Insert | Gå till infogningsläge, lägg till före markören
`I` | Gå till infogningsläge, infoga före första tecken på raden som inte är ett blanktecken
`gi` | Gå till infogningsläge, lägg till före stället där det senaste infogningsläget lämnades
`v` | Gå till visningsläge, markera tecken
`V` | Gå till visningsläge, markera rader
&Ctrl;v | Gå till visningsläge, markera block
`gb` | Gå till visningsläge, markera den senaste markeringen igen
`o` | Påbörja en ny rad under den aktuella raden
`O` | Påbörja en ny rad ovanför den aktuella raden
`J` | Kombinera rader
`c` | Ändra: Följ med en förflyttning för att ta bort och gå till infogningsläge
`C` | Ändra till radens slut: Ta bort till radens slut och gå till infogningsläge
`cc` | Ändra rad: Ta bort till raden och gå till infogningsläge
`s` | Ersätt tecken
`S` | Ersätt rad
`dd` | Ta bort rad
`d` | Följ med en förflyttning för att ta bort
`D` | Ta bort till radens slut
`x` | Ta bort tecken till höger om markören
Delete | Ta bort tecken till höger om markören
`X` | Ta bort tecken till vänster om markören
`gu` | Följ med en förflyttning för att ändra till små bokstäver
`guu` | Gör den aktuella raden till små bokstäver
`gU` | Följ med en förflyttning för att ändra till stora bokstäver
`gUU` | Gör den aktuella raden till stora bokstäver
`y` | Följ med en förflyttning för att rycka ut (kopiera)
`yy` | Ryck ut (kopiera) rad
`Y` | Ryck ut (kopiera) rad
`p` | Klistra in efter markören
`P` | Klistra in före markören
`]p` | Klistra in efter markören indenterat
`[p` | Klistra in före markören indenterat
`r` | Följ med ett tecken för att ersätta tecknet efter markören
`R` | Gå till ersättningsläge
`:` | Gå till kommandoläge
`/` | Sök
`u` | Ångra
&Ctrl;R | Gör om
`U` | Gör om
`m` | Ange markering (kan användas av senare förflyttningar)
`n` | Sök igen
`N` | Sök föregående
`>>` | Indentera rad
`<<` | Avindentera rad
`>` | Indentera rader
`<` | Avindentera rader
&Ctrl;F | Sida ner
&Ctrl;B | Sida upp
`ga` | Skriv ut tecknets ASCII-värde
`.` | Upprepa senaste ändring
`==` | commandAlignLine
`=` | commandAlignLines
`~` | Ändra skiftläge för aktuellt tecken
&Ctrl;S | Dela vyn horisontellt
&Ctrl;V | Dela vyn vertikalt
&Ctrl; W, `w` | Gå cykliskt till nästa delade fönster
&Ctrl; W, `h` &Ctrl; W Vänster | Gå till det delade fönstret till vänster
&Ctrl; W, `l` &Ctrl; W Höger | Gå till det delade fönstret till höger
&Ctrl; W, `k` &Ctrl; W Upp | Gå till det delade fönstret ovanför
&Ctrl; W, `j` &Ctrl; W Ner | Gå till det delade fönstret nedanför

### Förflyttningar som stöds

Dessa kan användas för att flytta omkring i dokumentet i Normalt läge eller Visningsläge, eller i samband med något av ovanstående kommandon. De kan föregås av ett antal, vilket anger hur många av motsvarande förflyttningar som ska göras.

`h` | Vänster
Vänsterpil | Vänster
Baksteg | Vänster
`j` | Ner
Neråtpil | Ner
`k` | Upp
Uppåtpil | Upp
`l` | Höger
Högerpil | Höger
Mellanslag | Höger
`$` | Radens slut
End | Radens slut
`0` | Radens första tecken (kolumn 0)
Home | Radens första tecken
`^` | Radens första tecken som inte är ett blanktecken
`f` | Följ av tecken för att flytta till höger om markören
`F` | Följ av tecken för att flytta till vänster om markören
`t` | Följ med tecken höger om markören att gå till, och placera markören på tecknet före det
`T` | Följ med tecken vänster om markören att gå till, och placera markören på tecknet före det
`gg` | Första raden
`G` | Sista raden
`w` | Nästa ord
`W` | Nästa ord åtskilt av blanktecken
`b` | Föregående ord
`B` | Föregående ord åtskilt av blanktecken
`e` | Ordets slut
`E` | Ordets slut åtskilt av blanktecken
`ge` | Föregående ords slut
`gE` | Föregående ords slut åtskilt av blanktecken
`|` | Följ med kolumnnummer för att gå till den kolumnen
`%` | Följ med ett objekt för att gå till det objektet
``` | Markera
`‘` | Första tecken på raden som inte är ett blanktecken där markeringen är
`[[` | Föregående inledande hakparentes
`]]` | Nästa inledande hakparentes
`[]` | Föregående avslutande hakparentes
`][` | Nästa avslutande hakparentes
&Ctrl;I | Gå framåt till nästa position
&Ctrl;O | Gå bakåt till föregående position
`H` | Gå till skärmens första rad
`M` | Gå till raden på skärmens mitt
`L` | Gå till skärmens sista rad
`%`procentvärde`` | Gå till angivet procentvärde av dokumentet
`gk` | Gå en rad uppåt visuellt (när dynamisk radbrytning används)
`gj` | Gå en rad neråt visuellt (när dynamisk radbrytning används)
&Ctrl;Vänsterpil | Gå ett ord åt vänster
&Ctrl;Högerpil | Gå ett ord åt höger

### Textobjekt som stöds

De kan användas för att markera vissa delar av ett dokument.

`iw` | Inre ord: Ord inklusive blanktecken
`aw` | Ett ord: Ord exklusive blanktecken
`i"` | Föregående dubbla citationstecken (`"`) till nästa dubbla citationstecken, inklusive citationstecken
`a”` | Föregående dubbla citationstecken (`"`) till nästa dubbla citationstecken, exklusive citationstecken
`i'` | Föregående enkla citationstecken (`'`) till nästa enkla citationstecken, inklusive citationstecken
`a'` | Föregående enkla citationstecken (`'`) till nästa enkla citationstecken, exklusive citationstecken
`i(` | Föregående inledande parentes [`(`] till nästa avslutande parenthesis [`)`], inklusive parentesen
`a(` | Föregående inledande parentes [`(`] till nästa avslutande parentes [`)`], exklusive parenteserna
`i[` | Föregående inledande hakparentes (`[`) till nästa avslutande hakparentes (`]`), inklusive parenteserna
`a[` | Föregående inledande hakparentes (`[`) till nästa avslutande hakparentes (`]`), exklusive parenteserna
`i{` | Föregående inledande klammerparentes (`{`) till nästa avslutande klammerparentes (`}`), inklusive parenteserna
`a{` | Föregående inledande klammerparentes (`{`) till nästa avslutande klammerparentes (`}`), exklusive parenteserna
`i<` | Föregående inledande vinkelparentes (`<`) till nästa avslutande vinkelparentes (`>`), inklusive parenteserna
`a<` | Föregående inledande vinkelparentes (`<`) till nästa avslutande vinkelparentes (`>`), exklusive parenteserna
`i`` | Föregående grava accent (```) till nästa grava accent, inklusive accenterna
`a`` | Föregående grava accent (```) till nästa grava accent, exklusive accenterna

### Kommandon i infogningsläge som stöds

&Ctrl;D | Avindentera
&Ctrl;T | Indentera
&Ctrl;E | Infoga nerifrån
&Ctrl;Y | Ta bort ord
&Ctrl;W | Ta bort ord
&Ctrl;U | Ta bort rad
&Ctrl;J | Ny rad
&Ctrl;H | Ta bort tecken bakåt
&Ctrl;Home | Gå till första tecknet i dokumentet
&Ctrl;R `n` | Infoga innehållet i register `n`
&Ctrl;O, `kommando` | Gå till normalt läge för endast ett kommando
&Ctrl;A | Inkrementera talet som för närvarande är markerat
&Ctrl;X | Dekrementera talet som för närvarande är markerat

### Komma-textobjektet

Objektet saknas i Vim. Komma-textobjektet gör det enkelt att ändra parameterlistor i C-liknande språk och andra listor åtskilda med kommatecken. Det är egentligen området mellan två kommatecken eller mellan ett kommatecken och en parentes. På raden som visas i illustrationen är de tre områden som textobjektet kan omfatta färglagda.

Ett exempel på komma-textobjekt Ett exempel på komma-textobjekt

Intervall för komma-textobjekt. Om markören exempelvis är på `arg2`, skulle `ci`, (ändra inre kommatecken) ta bort `double arg2` och placera markören mellan de två kommatecknen i infogningsläge. Ett mycket bekvämt sätt att ändra en funktions parametrar.

### Saknade funktioner

Som tidigare nämnts, är inte målet med &kappname;s VI-läge att stödja 100 % av Vims funktioner.