Vi

Från Unix.se, den fria unixresursen.

Innehåll

Introduktion

Vi (uttalas på engelska vee eye, på svenska vanligtvis som det låter) är en mycket vanlig editor som finns som standard på nästan alla Unix-system. Det är därför praktiskt att kunna behärska den och det är en mycket kraftfull editor när man väl lärt sig den.

Viktigt att komma ihåg är att Vi arbetar i flera så kallade redigeringslägen för att undvika problemet med krångliga tangentkombinationer för att utföra enklare redigeringar (jämför med exempelvis Emacs).

För att öppna en fil används

# vi <fil>

Eller när Vi redan är startat:

:e <fil>

Hur avslutas Vi?

Denna fråga kommer ofta upp bland nybörjare. Om man bara vill avsluta Vi skriver man ESC :q (kolon q). För att tvinga avslutning (utan att spara), använd ESC :q! (kolon q utropstecken).

Redigeringslägen

Man kommer kanske bli förvånad första gången man startar Vi och märker att det inte går att skriva in text direkt. Först måste man nämligen gå in i insättningsläget, vilket man gör genom att trycka på tangenen i. Nu går det bra att skriva/ändra texten, och när man är färdig sparar man med ESC :w. Om man vill avsluta och spara på samma gång använder man ESC :wq (vilket är ett bra exempel på hur Vi kan kombinera kommandon på ett ofta mycket användbart sätt).

Anledningen till att man först måste trycka på i för att kunna skriva in text är att Vi har två olika lägen: kommandoläget och insättningsläget. När man startar Vi hamnar man direkt i kommandoläget. Här kan man utföra kommandon som manipulerar texten på olika sätt; t.ex. ta bort hela rader, kopiera och klistra in text, o.s.v. För att växla från kommandoläget till insättningsläget används i och när man vill gå ut ur kommandoläget används ESC. För att vara säker på att man är ute ur insättningsläget kan två ESC användas. Vi kommer då att pipa till om man redan var i kommandoläget. Var därför inte rädd för att komma någon annanstans när du använder ESC; Vi kommer alltid att skicka dig till kommandoläget.

Kommandon

Fundamentala

  • x - Ta bort en bokstav efter markören
  • dd - Klipp ut raden markören står på
  • yy - Kopiera raden markören står på
  • p - Klistra in på raden efter den markören står på
  • u - Ångra (oftast kan man bara ångra allt från förra insättningslägetillfället så spara ofta)

För att sätta in text

  • i - insert mode (text läggs till där markören står)
  • a - append mode (text läggs till efter där markören stod)
  • o - opend? (en ny rad läggs till och markören placeras till vänster)

Avancerat

  • P - Klistra in på raden innan den markören står på
  • X - Tabort en bokstav innan markören
  • D - Tabort resten av raden, inkl det under markören
  • J - Lägg upp raden under på denna rad
  • r - Skriv över tecknet markören står på
  • R - Skriv över resten av raden från markören

Flytta markören

  • h - flytta till vänster
  • j - flytta ner en rad
  • k - flytta upp en rad
  • l - flytta till höger
  • w - flytta ett ord framåt (till höger)
  • b - flytta ett ord bakåt

Notera att hjkl (vänster, ner, upp, höger) är väldigt mycket mer praktiska att använda för att flytta runt markören än piltangenterna, eftersom du i det förra fallet slipper flytta på handen från bokstavstangenterna på tangentbordet.

Hoppa omkring inuti enskilda filer

Mellan uttryck

if (( NULL == x ) && y > z )

Låt oss säga att markören står i början av if-satsen. Ett tryck på 'w' hoppar till den första parentesen. Ett till tryck till NULL och nästa till == osv.

'b' fungerar precis som w fast baklänges, är markören på == flyttas den till NULL. Vill man t.ex. ändra NULL till nåt annat och markören står på == trycker man alltså b cw och-skriver-nånting.

Mellan motsvarande tecken

Med hjälp av procenttecknet (%) hoppar man mellan motsvarande tecken.

if (x == 















"x = y\n";
if (y == z) {
cout << "y == z\n";
}

Är markören på sista tecknet hoppar den till tillhörande fiskmås. Likaså hoppar den till motsvarande parentes i följande (överdrivna) exempel:

if ((((((x==y))))))

Kombinera kommandon

Vi har också den roliga funktionen att kommandon kan skrivas som nX där n är en siffra på hur många gånger man vill att kommandot ska utföras. Vill man t.ex. klippa ut 3 rader skriver man ESC 3dd.

Det är möjligt att kombinera en del kommandon med kommandon som flyttar markören (w, b o.s.v.): om man exempelvis vill ta bort det ord som kommer efter markören skriver man dw.

Ctags

Ctags genererar så kallade tag-filer för vi(m). Dessa används för att söka igenom delar av koden snabbt.

Se även

Externa länkar

http://www.eng.hawaii.edu/Tutor/vi.html

Personliga verktyg