Emacs-opas, luku 5 Peruskäskyt Emacsissa:

Haku ja korvaus

Haku: C-s tai C-r

Usein on tarvetta hakea tekstistä jotakin merkkijonoa tehokkaammalla tavalla kuin silmäilemällä tekstiä ruudullinen kerrallaan. Emacsin hakukäskyistä kuvaamme tässä vain C-s:n ja C-r:n, jotka suorittavat ns. inkrementaalisen haun. Joskus C-s:ää ei voi käyttää, katso ohjeita kohdasta 11.1. Pitempi synonyymi käskylle C-s on M-x isearch-forward.

Kun kirjoitat C-s:n, käskyriville ilmestyy

I-search:

Kun sitten kirjoitat haettavan merkkijonon ensimmäisen merkin, se tulee näkyviin em. tekstin perään ja samalla Emacs hakee merkin ensimmäisen esiintymän (kursorin paikasta lähtien). Kun kirjoitat seuraavan merkin, sekin tulee näkyviin ja Emacs jatkaa tarvittaessa hakua. Käytännössä voit kirjoittaa haettavaa merkkijonoa omaan tahtiisi ja Emacs hakee sitä omaan tahtiinsa. Kun löytyy esiintymä, josta eteenpäin et halua jatkaa hakua ainakaan saman tien, paina ESC-näppäintä, jolla pääset pois hakutilasta. Myös esim. millä tahansa kursoria siirtävällä kontrollimerkillä kuten C-a:lla tullaan pois hakutilasta. Jos myöhemmin haluat hakea samaa merkkijonoa uudestaan, voit kirjoittaa C-s C-s.

Jos ennen haun lopettamista annetaan uusi C-s, Emacs etsii siihen mennessä annetun merkkijonon seuraavan esiintymän.

Hakiessaan merkkijonoa Emacs ei kiinnitä huomiota isojen ja pienten kirjainten eroon kirjainten a - z osalta.

C-r toimii muutoin aivan samoin kuin C-s mutta hakee taaksepäin.

Korvaus: M-%

Jos haluat korvata jonkin merkkijonon toisella, esim. jonkin käyttämäsi termin paremmalla, koko tekstissä tai sen osassa, voit käyttää ns. query replace -toimintoa. Anna aluksi käsky M-%. Käskyriville ilmestyy teksti

Query replace:

Kirjoita sitten korvattava merkkijono, esim. foo, ja paina Returnia, jolloin käskyriville tulee em. tekstin tilalle seuraavanlainen:

Query replace foo with:

jolloin voit kirjoittaa korvaavan merkkijonon, esim. bar, ja taas painaa Returnia. Nyt Emacs lähtee hakemaan korvattavan merkkijonon ensimmäistä esiintymää kursorin paikasta lähtien ja näyttää tekstiä niin, että kursori on kyseisen esiintymän perässä. Kun käskyriville tulee teksti

Query replacing foo with bar:

on Emacs erityisessä tilassa, jossa se odottaa päätöstäsi kyseisen esiintymän osalta. Voit ilmaista valintasi yleensä yhdellä merkillä:

SPC
tehdään tämä muutos
DEL
ei tehdä tätä muutosta
ESC
ei tehdä tätä muutosta ja lopetetaan korvaaminen kokonaan
.
tehdään tämä muutos mutta sitten lopetetaan korvaaminen kokonaan
!
tehdään tämä ja kaikki seuraavat muutokset automaattisesti

Valintasi jälkeen Emacs hakee seuraavan esiintymän jne. Viimeisen esiintymän käsittelyn jälkeen käskyriville tulostuu sana Done ja ollaan normaalissa editointitilassa.

Jos korvattava merkkijono annetaan pienin kirjaimin, niin Emacs löytää myös sellaiset esiintymät, joissa on vastaavia isoja kirjaimia, ja korvauksessa käyttää samanlaista kirjoitusasua kuin korvattavassa esiintymässä. Jos esimerkiksi korvattava merkkijono on foo ja korvaava bar, niin Emacs löytää myös esiintymät FOO ja Foo korvaten ne merkkijonoilla BAR ja Bar.