Boken Om Linux/Kapittel 12

12: Linux og editorer rediger

Linux-editorer rediger

Til Linux-maskinen finnes det mange forskjellige teksteditorer tilgjengelig, inkludert vi, ex, pico, jove, joe, GNU Emacs og Lucid Emacs. Denne siste varianten finnes også som en X-Window- applikasjon. Emacs støtter et komplett LISP-basert makrospråk og tolker en kraftig kommando-syntaks. Du vil finne Emacs-makropakker, som gir deg muligheten til å lese elektronisk post og nyheter fra Emacs.

Vi-editoren er den enkleste og finnes på alle Linux- og Unix-versjoner. Jeg har derfor i dette kapitlet konsentrert meg om den.

Linux og tekstbehandling rediger

Det finnes mange forskjellige tekstbehandlingssystemer tilgjengelig for Linux. Jeg kan blant annet nevne textinfo, TeX, groff GNU, AbiWord, KWord, Kile, OpenOffice (Writer), Open-Office/!StarOffice (Writer) og Corel Office (Wp) og Libreoffice.

I Linux-verdenen vil vi-editoren og Emacs-editoren bare brukes til å få teksten inn. Deretter må forfatteren selv sette på forskjellige type-settings-språk, som beskriver hvordan tekst skal formateres. Når kildeteksten er komplett, kan du formatere teksten med et separat program. Dette programmet konverterer orginalteksten til et format som passer for utskrift. Unntaket er derimot WP fra Corel, StarOffice og OpenOffice; her slipper du å bruke noe type-settingsspråk, teksten er ferdig formatert. Det du ser er det "samme" som du får ut på skriveren. (What you see is what you get.) WP fra Corel var tidligere markedsleder i PC-verden. I dag finner du den på flere Unix-dialekter. Den følger også med på mange Linux-demoCDer. Andre eksempler på moderne tekstbehandlingspakker under Linux er AbiWord, KWord, OpenOffice og StarOffice.

GNU versjonen Groff er basert på tekstformatereren nroff, som først ble utviklet av Bell Labs. I mine dager på Blindern brukte jeg det moderne og komplekse tekstbehandlingssystemet TeX. Dette systemet er utviklet av Donald Knuth. En annen dialekt av TeX, er LaTeX, som også er tilgjengelig for Linux.

Tekstbehandlingssystemet texinfo er en utvidelse av TeX, som brukes av Free Software Foundation til dokumentasjon av forskjellig Linux- og Unix-programvare.

Editoren vi rediger

Tekst og programfiler rediger

Vi er en enkel teksteditor hvor du kan skrive, rette og redigere tekst. Du kan også bruke vi til å lage kommandofiler (batchfiler, skriptfiler). Kommandoene i vi kan deles i tre grupper: skjermmodus, innsettingsmodus (tekstmodus) og kommandomodus.

Skjermmodus rediger

Når du starter vi, kommer du alltid i skjermmodus. Er du usikker på hvilken modus du er i, kan du trykke ESC som bringer deg tilbake til skjermmodus. Trykker du ESC når du er i skjermmodus, skjer ingenting. Du hører bare et pip. I denne modusen kan du flytte omkring i dokumentet, søke etter ord og bytte ut ord. Du kan også lagre et dokument eller avslutte vi.

Innsettingsmodus rediger

For å skrive tekst eller gjøre endringer i filen må du være i innsettingsmodus. Innsettingsmodus kalles også ofte innskrivingsmodus, insertmodus eller tekstmodus. Du kan gå fra skjermmodus til innsettingsmodus med følgende kommandoer:

Innsettingskommando Beskrivelse
i (insert) Du kommer i innsettingsmodus der markøren står
I (insert) Går i innsettingsmodus i begynnelsen av linjen
a (append) Går i innsettingsmodus etter markørens posisjon
A (append) Går i innsettingsmodus i slutten av linjen
o (open) Går i innsettingsmodus på en åpen linje under den linjen der markøren står
O (open) Går i innsettingsmodus på en åpen linje over den linjen der markøren står
r (replace) Går i innsettingsmodus bare for det tegnet som står i markørposisjonen
R (replace) Går i innsettingsmodus (overskrivingsmodus) for resten av den linjen markøren står på

Kommandomodus rediger

Du kommer fra skjermmodus til kommandomodus ved å trykke : (kolon). Det vil da stå et : nederst til venstre på skjermen. Dette er tegnet på at du er i kommandomodus. I kommandomodus kan du få utført følgende kommandoer:

Kommando Beskrivelse
x Oppdaterer filen og går ut av vi
w argument Lagrer filen med navnet argument; argument er et filnavn
q Avslutter uten å lagre
q! Avslutter uten å lagre selv om filen er endret
wq Lagrer filen og avslutter vi
n Går til linje nummer n
dn Fjerner n linjer fra der markøren sto
r filnavn Leser filen med navnet filnavn
w filnavn Skriver filen med navnet filnavn

Skal du addere tekst fra andre filer, kan du gjøre det i kommandomodus.

Eksempel:

r Linuxbok-kap1

Figur 12.1: Forskjellige moduser i vi.

Lage en tekstfil rediger

Starte vi rediger

Du starter vi ved å gi kommandoen vi med et filnavn som argument. For å opprette en tekstfil med navnet tekst1, gir du kommandoen

[david@nittedal david]$ vi tekst1

Du får nå en tom skjerm der du kan skrive inn tekst. En ~ (tilde) til venstre i skjermen viser at du er i skjermmodus.

Skrive tekst rediger

Du kommer i innskrivingsmodus ved å gi kommandoen i.

Du kan nå skrive inn tekst. Skriv for eksempel:

Linux inneholder editorprogrammet vi. Denne kalles også en skjermeditor, fordi du kan arbeide med et dokument som kan fylle hele skjermen. Det kan også være så stort at det ikke får plass på skjermen.

Da vises bare en del av dokumentet.

Lagre filen rediger

For å lagre filen og gå ut av vi, gjør du slik:

   Gå til skjermmodus ved å trykke ESC.
   Avslutt vi ved å trykke ZZ (husk stor Z). 

Filen blir nå lagret med navnet tekst1, og vi avsluttes. Du er tilbake i skallet og får skall-ledeteksten på skjermen. Et alternativ er å lagre filen med kommandoene x og w når du er i kommandomodus. Vil du ikke lagre, kan du bruke kommandoen q! når du er i kommandomodus.

Starte vi rediger

Du kan starte vi på flere måter.

Kommandoen vi skjermeditor
Kommando: vi [opsjon] [argument]
Funksjon: Fullskjermseditor som brukes til å lage/endre tekstfiler
Argumenter: Navnet på filen som skal lages eller redigeres (redigeres)
Opsjoner: Se også Linux-man-sidene.

Kommandoen vi uten opsjon eller argument gjør at du lager et nytt dokument. Teksten du skriver blir lagret i maskinens arbeidsminne. Når du har skrevet teksten, kan du lagre den med et filnavn som du gir når du lagrer.

Eksempler:

[david@nittedal david]$ vi TilBillGates

Henter inn filen TilBillGates slik at du kan redigere den. Hvis det ikke finnes noen fil med dette navnet, vil det bli opprettet en som heter TilBillGates når du lagrer teksten du har skrevet.

[david@nittedal david]$ vi +20 notat1

Filen notat1 blir hentet for editering. Markøren står på linje 20.

[david@nittedal david]$ vi + notat2

Filen notat2 blir hentet for editering. Markøren står på siste linje.

[david@nittedal david]$ vi +/mat notat3

Filen notat3 blir hentet for editering. Markøren står på den første linjen som inneholder teksten mat.

[david@nittedal david]$ vi -r notat4

Henter filen notat4 inn for editering. Opsjonen -r brukes når en tidligere editering er blitt avbrutt på ureglementert måte, for eksempel ved et strømbrudd.

Flytte markøren rediger

For å flytte markøren i en fil, må du først være i skjermmodus. Trykk ESC. Du kan bruke følgende kommandoer for å flytte markøren:

Flytte markøren Beskrivelse
h en posisjon til venstre
l en posisjon til høyre
j ned en linje
k opp en linje
0 til begynnelsen av linjen
$ til slutten av linjen
b til ordet foran
w til ordet etter
e til slutten av ordet
( til begynnelsen av setningen
) til slutten av setningen
H til toppen av skjermen
L til bunnen av skjermen
G til bunnen av filen
nG til linje nummer n
"<Ctrl-u>" et skjermbilde oppover (12 linjer)
"<Ctrl-d>" et skjermbilde nedover (12 linjer)
"<Ctrl-f>" en side ned (25 linjer)
"<Ctrl-b>" en side opp (25 linjer)

Slette tekst rediger

For å slette tekst må du være i skjermmodus. Plasser først markøren der du vil slette tekst. Du kan bruke følgende kommandoer til å slette tekst:

Kommando Beskrivelse
x tegnet der markøren står
2x tegnet der markøren står og tegnet til høyre
xxxx tegnet der markøren står og tre tegn til venstre
dw ordet markøren står i
7dw ordet markøren står i og seks ord til høyre
dd linjen markøren står i
3dd linjen markøren står i og to linjer under til høyre
D fra markøren og ut linjen

I tre av kommandoene står det tall (2, 7 eller 3). Ved å sette inn andre tall, kan du slette et annet antall tegn, ord eller linjer.

Gjenopprette sletting rediger

Du kan gjenopprette siste sletting med kommandoen

u

Hvis du har gjort flere slettinger på en linje, kan du gjenopprette hele linjen med kommandoen

U

Skrive mer tekst

For å skrive mer tekst i en fil, må du være i innsettingsmodus. Når du går fra skjermmodus til innsettingsmodus, kan du samtidig plassere markøren på et ønsket sted. Kommandoene for å gå til innsettingsmodus er forklart tidligere i dette kapitlet.

Nå kan du skrive den nye teksten. Det du skriver blir plassert der markøren står. Teksten til høyre for markøren forskyves.

For å skifte linje, trykk Enter.

Du går ut av innsettingsmodus ved å trykke ESC

Flytte tekst

Du flytter tekst ved først å slette teksten, og så gjenopprette teksten på et annet sted i dokumentet. Du har følgende kommandoer for å gjenopprette slettet tekst:

p Den sist slettede teksten blir plassert etter markøren.

P Den sist slettede teksten blir plassert før markøren.

Du kan bruke alle slettekommandoene som er gjennomgått tidligere i dette kapitlet. Som et eksempel viser jeg hvordan du flytter fem linjer fra og med den linjen der markøren står. Du gjør slik:

   Gå til skjermmodus ved å trykke ESC.
   Flytt markøren til den første av de fem linjene du skal flytte.
   Slett de fem linjene ved å taste 5dd.
   Flytt markøren til det stedet der du vil ha linjene inn igjen.
   Sett de fem linjene inn ved å taste p.
   Linjene blir plassert etter der markøren står. 

Hvis du i stedet skulle flyttet tre ord, ville du i punkt 3 brukt slettekommandoen 3dw

Kopiere tekst rediger

Du kopierer tekst ved å først kopiere den ønskede teksten inn i et mellomlager (buffer). Så flytter du markøren til det stedet teksten skal kopieres og henter den fram med kommandoene p eller P. Du har følgende kommandoer for å kopiere tekst inn i bufferen:

Y Linjen markøren står i kopieres.

   3Y Linjen markøren står i og de to etterfølgende linjene blir kopiert. På samme måte kan du kopiere et annet antall linjer ved å sette inn et annet tall i stedet for 3. 

Følgende eksempel viser hvordan du kopierer 2 linjer.

   Gå til skjermmodus ved å trykke ESC.
   Flytt markøren til den første av de linjene du vil kopiere.
   Lagre de 2 linjene i bufferen ved å taste 2y.
   Flytt markøren dit du vil sette inn de kopierte linjene.
   Sett inn linjene ved å taste p.
   De 2 linjene blir satt inn på stedet etter der markøren sto. 

Søke etter tekst rediger

Kommandoen for å søke etter tekst, er /argument

Argumentet er den teksten du skal søke etter. Du kan søke etter en tekst fra der markøren står og framover eller bakover i dokumentet. Husk at du må være i skjermmodus.

Søke framover rediger

For å søke etter teksten Linux gjør du slik:

   Gå til skjermmodus ved å trykke ESC.
   Skriv /Linux.
   Trykk Enter.
   Markøren flytter seg til første forekomst av ordet Linux. 

Hvis du skal søke flere ganger etter samme tekst, kan du gjenta siste søking ved å trykke n.

Søke bakover rediger

For å søke bakover bruker du kommandoen ? i stedet for /. Ellers gjør du på samme måte som når du søker forover i teksten; dvs. at du i punkt 2 i stedet for /Linux skal skrive ?Linux.

Søk og erstatt rediger

I kommandomodus kan du søke etter en bestemt tekst og erstatte den med en annen med følgende kommando: g/s1/s//s2/g

Den første g'en er selve kommandoen som forteller at vi skal bytte ut tekst, s1 er teksten som skal byttes ut og s2 er den nye teksten. Bokstaven s (som står for substitutes) forteller oss at teksten s1 skal byttes ut med teksten s2.

Den siste g'en betyr at teksten s1 skal byttes globalt gjennom hele dokumentet. Tar vi ikke med den siste g'en, vil bare den første tekststrengen s1 i dokumentet bli byttet ut med s2.

   Som et eksempel skal jeg vise hvordan du skifter ut ordet Linux med ordet Open. Du gjør slik:
   Gå til skjermmodus ved å trykke ESC.
   Gå til kommandomodus ved å trykke :
   Skriv g/Linux/s//Open/g.
   Trykk Enter.
   Søkingen og erstatningen gjennomføres, og alle forekomster av Linux blir erstattet med Open 

Ønsker du å se hvor det byttes ut tekst i dokumentet, kan du skrive:

g/data/s//edb/gp (p=page=side)

Husk at du må være i kommandomodus.

Hente fil for editering rediger

Når du har startet vi, kan du lese en fil for å redigere den. Du gjør slik:

   Gå til skjermmodus ved å trykke ESC.
   Skriv :e notat7.
   Trykk Enter.
   Filen notat7 hentes inn, og du kan redigere denne. 

Du kan også lese inn en fil med kommandoen r i stedet for e. Med r kan du sette en fil inn i en eksisterende tekst. Den innleste filen vil plassere seg fra der markøren står og utover. Teksten bak markøren vil forskyves. I eksemplet over vil da kommandoen i punkt 2 se slik ut:

r notat7

Lagre og avslutte rediger

For å lagre og avslutte en fil må du være i kommandomodus. Du går til kommandomodus fra skjermmodus ved å trykke : (kolon). Du har følgende kommandoer til å lagre og/eller avslutte redigeringen av en fil:

Kommando lagre/avslutt Beskrivelse
w Lagrer filen med samme navn som den ble lest inn med
w argument Lagrer filen med navnet argument; argument er et filnavn
q Avslutter uten å lagre
q! Avslutter uten å lagre selv om filen er endret
wq Lagrer filen og avslutter vi
ZZ Lagrer filen og avslutter vi

Kommandoen ZZ kan bare gis fra skjermmodus.

Utskrift rediger

Du kan ta utskrift av en fil som er laget med vi, på den måten som forklares i kapittel 14. vi inneholder ingen spesielle kommandoer for utskrift.

Makrodefinisjoner rediger

For å lette editeringsarbeidet i vi kan du lage makroer i en oppstartsfil som man kaller .exrc. Makrodefinisjoner gjør det mulig å omdefinere en tast til en kommandosekvens eller tekststreng. Oppstartsfilen .exrc må ligge i brukeres hjemmekatalog eller i den katalogen hvor vi-programmet blir startet opp. Map-kommandoer kan også defineres direkte når du er i vi's kommandomodus.

map- og unmap-kommandoene

For å kunne omdefinere taster bruker vi map-kommandoen. Syntaksen er: map [tast] [kommando/tekststreng]

Eksempel på bruk fra vi-editoren:

map #0 Linux er bedre enn WINDOWS

Hver gang du trykker på funksjonstast F1 (når du er i innsettingsmodus), vil teksten “Linux er bedre enn WINDOWS" komme i dokumentet.

map q & w! temp<Ctrl-v><CR>

Hver gang du trykker på tasten q, vil filen som er under redigering, lagres i filen temp.

Vil du nullstille en tast når du er i vi-editoren, kan dette gjøres med umap-kommandoen. For eksempel:

unmap #0

nullstiller funksjonstast F1.

unmap *

nullstiller tasten *.

Eksempel på .exrc-fil:

map #0 r F1 erstatter et tegn.

map #1 l F2 flytter markøren til høyre.

map #2 j F3 flytter markøren ned en linje.

map #3 k F4 flytter markøren opp en linje.

map #4 dd F5 fjerner linjen markøren peker på.

map #5 x F6 fjerner tegnet markøren peker på.

map #6 R F7 skriver over tekst.

map #7 i F8 er innsettingsmodus.

map #8 u F9 er angretast.

Skal du prøve eksemplet ovenfor, skriver du bare det som står i venstre kolonne, resten er kommentarer.

Første posisjon etter map-kommandoen peker til tasten som skal defineres. #0 til #8 refererer til funksjonstast F1 til F9 på et PC eller PS/2-tastatur. Trykker du på funksjonstast F1 når du er i skjermmodus, vil du gå inn i innsettingsmodus bare for det tegnet som står i markørposisjonen. Er du i innsettingsmodus og trykker på funksjonstast F1, vil du få inn en liten r på skjermen.Trykker du på funksjonstast F2 når du er i skjermmodus, vil markøren flytte til høyre osv. Skal du jobbe med programutvikling med språket C, kan følgende .exrc-fil passe i din $HOME/C-katalog.

map #1 #include <stdio.h>

map #2 #include <curses.h>

map #3 #include <signal.h>

map #4 main()

Når du her trykker på funksjonstast F2, vil teksten #include <stdio.h> komme inn på den linjen som markøren står på. Det forutsetter at du er i innsettingsmodus. På de andre funksjonstastene vil det komme andre tekststrenger.

Forskjellige set-parametere rediger

Forskjellige omgivelsesparametere kan også plasseres i .exrc-filen. De viktigste er:

set viser de parameterne som er satt i vi

set ai setter autoinnrykk

set noai sletter autoinnrykk

set bf neglisjerer spesielle kontrolltegn

set nobf godtar alle kontrolltegn

set dir spesifiserer hvor vi's bufferområde skal ligge

set nu viser linjenummer på alle linjer

set nonu viser ikke linjenummer

set window=30 setter vindusstørrelsen til 30 linjer

set wm=8 setter høyremarg til 8 tegn

set wm=0 setter høyremarg til standard (0 tegn)

Alle disse set-parameterne kan også defineres direkte når du er i kommandomodus, for eksempel:

set nu

Her får du linjenummer på alle linjene i filen, noe som er spesielt nyttig når du driver med programutvikling.

Eksempel på oppsett av .exrc med map og set:

set nu

set wm=4

map #0 r

map #1 l

map #2 j

map #3 #include <signal.h>

map #4 main()

map #5 Boken kommer fra IDG Norge Books AS

I dette eksempelet setter jeg først linjenummer på alle linjer. Deretter definerer jeg høyremargen til posisjon 4. Funksjonstast F1, F2 og F3 blir definert til forskjellige kommandoer i vi. F4 og F5 gir forskjellig tekststrenger som kan være nyttige i forbindelse med C-programmering. Siste linje (F6) gir oss tekststrengen “Boken kommer fra IDG Norge Books AS".

Vi – en oppsummering rediger

Figur 12.2 vi - en oppsummering

Ønsker du å vite mer om vi, kan du sjekke adressen:

ftp://ftp.uib.no/pub/vi/docs/innforing.Z

Oppgaver til kapittel 12 rediger

Oppgave 12.1

Bruk hjelpefunksjonen man til å finne ut mer om vi. Hvilke tre moduser kan du bruke i vi?

Oppgave 12.2

Start vi. Skriv inn teksten: Dette er mitt første forsøk på å bruke teksteditoren vi. Når du har skrevet teksten, skal du lagre den. Lagre denne teksten med navnet OppgaveVI og avslutt vi. Nevn tre måter å lagre et dokument i vi på. Nevn to måter å gå ut av vi på uten å lagre.

Oppgave 12.3

Hent inn teksten du laget i oppgave 12.3. Øv deg på å flytte markøren, slette tekst og sette inn ny tekst. Prøv så å flytte og kopiere tekst.

Oppgave 12.4

Skriv inn en lengre tekstfil med vi. Prøv deretter:

   a) Globalt søk både fremover og bakover i filen b) Globalt søk og erstatt på forskjellige ord 

Oppgave 12.5

Lag en .exrc-fil som definerer dine 6 mest brukte vi-kommandoer på funksjonstastene F1 til F6. Legg deretter til set-kommandoene

set window=10

set ai

set nu

i .exrc. Sjekk at .exrc-filen blir initiert når du starter opp vi.