Boken Om Linux/Kapittel 12
12: Linux og editorer
redigerLinux-editorer
redigerTil 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
redigerDet 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
redigerTekst og programfiler
redigerVi 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
redigerNå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
redigerFor å 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
redigerDu 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
redigerStarte vi
redigerDu 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
redigerDu 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
redigerFor å 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
redigerDu 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
redigerFor å 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
redigerFor å 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
redigerDu 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
redigerDu 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
redigerKommandoen 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
redigerFor å 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
redigerFor å 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
redigerI 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
redigerNå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
redigerFor å 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
redigerDu 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
redigerFor å 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
redigerForskjellige 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
redigerFigur 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
redigerOppgave 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.