Fotografio | Komputiloj | Programaro | Sangdonado | Tekstoj
Emacs estis unu el antikvaj tekstredaktiloj en la mondo kaj unu el tutekranaj redaktiloj permesantaj al uzanto vidi grandan pecon de teksto. La redaktilo ĝis nun restas ege populara en UNIX mondo kaj ĝi estas unu el normaj redaktiloj en Linukso kaj similaj operaciumoj. Sed jam ekzistas versioj de Emakso por preskaŭ ĉiuj aliaj operaciumoj (por DOS kaj Vidozo ankaŭ).
Ekzistas almenaŭ du veraj Emaksoj (variaĵoj): GNU Emacs kaj XEmacs, kaj kelkdek emakso-similaj redaktiloj (laŭ Richard Stallman «erzatz Emacs»), kiuj nur imitas interfacon de Emakso.
En ĉi-tiu manlibro sub la nomo Emakso ni komprenas redaktilojn kun simila interfaco, origine el ITC Emacs. Ĉefe temas pri GNU Emacs kaj XEmacs, ankaŭ pri diversaj variaĵoj de MicroEMACS.
Ankaŭ leganto memoru ke la manlibro estas nur mallonga enkonduko en la mondo de Emakso kaj enhavas nur bazan subaron de komandoj kaj ebloj de tiu rimarkinda ilo. Por pli detala informo leganto sin turnu al gvidilo de lia redaktilo.
Emakso estas tekstredaktilo por programado kaj diversaj tekstoj. Ĝi estas unu el normaj redaktiloj en Linukso kaj aliaj UNIX operaciumoj, ankaŭ ekzistas variaĵoj kaj versioj por preskaŭ ĉiuj komputiloj kaj operaciumoj. La ĉefaj ĝiaj ebloj ordinare enhavas:
Por uzi Emakson efike, oni nepre komprenu ĝian ideologion kaj parkere lernu interfacon.
Ĝenerale oni lanĉas Emakson per la komando:
emacs [dosiernomo ...]
kie dosiernomo estas nomo de dosiero por redaktado. Se vi uzas MicroEMACS'on vi devas verŝajne uzi komandojn me, mg aŭ uemacs anstataŭ.
Provu <F1>. Ankaŭ povas helpi <Ctrl>-h aŭ <ECS> h.
Por malfaro en Emakso estas uzata klavkombinaĵo <Ctrl>-g kaj por malfermi redaktilon -- kombinaĵo <Ctrl>-x Ctrl-c.
La interfaco de Emakso diferencas de kutima Vindoza interfaco, kaj tio ofte mallogas novulojn. Sed kiam vi alkutomiĝos, vi trovos ĝin ege logikan kaj oportunan.
Origine Emakson faris programistoj por si mem. Pro tio ĝi plej konvenas por programado. Ĝustadire, GNU Emacs aŭ XEmacs povas anstataŭi kelkaj programadajn mediojn (IDE) por diversaj programlingvoj kaj ankaŭ tekstotraktilon, retpoŝtilon, krozilon kaj tiel plu.
Emacs aperis en tiu tempo, kiam ankoraŭ neniu grafika interfaco ekzistis kaj la sola eniga organo de komputilo estis klavaro. Tial la redaktilo uzas ĉefe klavaron sed modernaj versioj havas grafikan interfacon kaj menuon, subtenas muson. Tamen, la ĉefa enigilo restas klavaro. Tio estas natura por tekstredaktilo, ĉu ne?
Teksto en Emakso aperas en bufroj, kiujn montras fenestroj. Ĉiu fenestro estas ligita al iu bufro. Bufro povas esti ne ligita al iu fenestro (kaj sekve ĝi ne estas videbla sur ekrano), bufro povas esti ligita al unu aŭ kelkaj fenestroj samtempe (en la lasta okazo vi povas vidi, ekzemple, du diversajn pacojn de la sama teksto).
Ekrano de la redaktilo konsistas el du partoj. Komandlinio (mesaĝlinio aŭ eĥo-areo) troviĝas sube -- en ĝi montriĝas diversaj mesaĝoj kaj uzanto tajpas komandojn. La komandlinio en Emakso anstataŭas diversajn dialogajn fenestrojn, kutimajn por uzantoj de Vindozo. La resto de la ekrano montras fenestro(j)n kie uzanto redaktas tekstojn.
Fenestro estas ortangula peco de ekrano, kie montriĝas redaktata teksto. En la suba parto de fenestro troviĝas statlinio, kiu respegulas ĉefajn informojn pri la teksto, ekzemple, * maldekstre signifas ke la teksto estis ŝanĝita sed ankoraŭ ne konservita, % ke la teksto ne estas ŝanĝebla, ankaŭ tie troviĝas nomo de la bufro ligita al la fenestro, dosiernomo, koordinatoj de kursoro, reĝimoj de redaktado ktp.
Uzanto redaktas tekston en bufroj. La bufro povas esti ligita al dosiero, aŭ povas esti ne ligita (ekzemple, se temas pri portempaj bufroj). Kiam vi malfermas dosieron por redaktado, la redaktilo kreas novan bufron kaj metas tekston de la dosiero en la bufron. Kaj fine ĝi ligas la bufron al aktuala fenestro, post tio vi vidas la tekston sur la ekrano.
Tio ŝajnas tre komplika kaj malfacila, sed post iom da laboro vi komprenos kaj ŝatos la strukturon de la redaktilo.
Emakso havas iom nekutiman mekanismon por apartigi tekston. Ĝi havas punkto (angle point) kaj markon (angle mark).
Aktuala pozicio de teksta kursoro nomiĝas punkto. Kaj ĉiun pozicion de kursoro en la teksto vi povas marki (kutime per Ctrl-@ aŭ Ctrl-Spaco). La peco de teksto inter punkto kaj marko estas apartigita por kopii, transpoŝigi aŭ fari ion alian. Ankaŭ marko estas oportuna por konservi pozicion por poste rapide reveni al ĝi.
Bufro havas nur unu markon kaj unu punkton.
Emakso de sia komenco estas portebla. Ĝi povas bone funkcii en diversaj komputiloj kun diversaj terminaloj. Ĝiaj bazaj komandoj egale bone funkcias en iu ajn ekrano kaj ĝin eblas uzi kun iu ajn klavaro. Ankaŭ eblas uzi la redaktilon per fora terminalo. Tamen Emakso egale bone funkcias kun ordinaraj klavaroj de surtablaj komputiloj.
Por plimulto da komandoj de Emakso sufiĉas unu-du klavpremojn. La plej ofte uzatajn komandojn oni elvokas per kombino de <Ctrl> kaj litero (oni skribas C-litero). Ankaŭ ekzistas klavoj-prefiksoj. La ĉefa estas <Meta>. Nun vi apenaŭ trovas tiun klavon sur via klavaro. En moderna klavaro ĝin anstataŭas klavo <Esc>. Meta-kombinoj estas skribitaj kiel M-klavoj. Kiel tajpi Meta-klavon? Simple klavu <Esc> (ordinare vi vidos "M-" en la eĥo-areo), kaj poste -- la literon mem. Ofte kiel Meta-litero ankaŭ funkcias <Alt>-litero -- premu klavon <Alt> kaj literon samtempe.
Plimulto da variaĵoj de Emakso distingas majuskloj kaj minuskloj en komandoj -- C-f kaj C-F estas malsamaj kaj por klarigi la lastan ofte skribas kiel C-S-f, kie "S" signifas <Shift>.
Ankaŭ ekzistas almenaŭ unu alia komuna prefikso -- C-x (ekzemple, por konservi dosieron oni klavu laŭvice C-x C-s).
Oni povas ripeti komandoj de la redaktilo multfoje. Por tio ekzistas universala argumento C-u. Ekzemple, por viŝi 12 liniojn suben de la kursoro oni klavu:
C-u 12 C-k
Ofte tiu nombro estas uzata kiel parametro de komando, ekzemple, por difini longecon de linio je 65 literoj por aŭtomata formatado oni klavu C-u 65 C-x f.
Premo sur C-u sen sekvanta nombro signifas "ripeti kvarfoje". Tio ofte utilas por fontkodo de programoj: C-u <Space> aldonos kvar spacojn kaj C-u <Backspace> forviŝos ankaŭ 4 signojn.
Ĉi-tiu ĉapitro priskribas la plej oftajn kaj komunajn komandojn. Por ĉiu estas indikitaj kutimaj klavkombinoj por elvoko. Ili povas esti malsamaj en via redaktilo. Legu manlibron de via redaktilo por pliaj informoj.
Paĝo supren M-v aŭ PgUp
Ĵetas kursoron je unu ekrana paĝo supren, al komenco de bufro.
Pago suben C-v aŭ PgDn
Ĵetas kursoron je unu ekrana paĝo suben, al fino de bufro.
Al komenco de bufro M-< aŭ M-Home
Ĵetas kursoron en komencon de bufro.
Al fino de bufro M-> aŭ M-End
Ĵetas kursoron en finon de bufro.
Unu litero antaŭen C-f aŭ sageto dekstren
Ĵetas kursoron je unu litero dekstren. Se la kursoro estas ĉe fino de linio, ĵetas ĝin en la komenco de sekvanta linio.
Unu litero reen C-b aŭ sageto maldekstren
Ĵetas kursoron je unu litero maldekstren. Se la kursoro estas ĉe komeco de linio, ĵetas ĝin en la fino de antaŭa linio.
Unu vorto antaŭen M-f
Ĵetas kursoron al komenco de sekvanta vorto.
Unu vorto reen M-b
Ĵetas kursoron al komenco de antaŭa vorto.
Al komenco de linio C-a aŭ Home
Ĵetas kursoron al komenco de aktuala linio.
Al fino de linio C-e aŭ End
Ĵetas kursoron al fino de aktuala linio.
Al sekvanta linio C-n aŭ sageto suben
Ĵetas kursoron je unu linio suben.
Al antaŭa linio C-p aŭ sageto supren
Ĵetas kursoron je unu linion supren.
Al la linio M-g aŭ M-x goto-line (GNU Emacs)
Ĵetas kuesoron al indikita linio. Ekzemple,
M-x goto-line RET 65ĵetos kursoron al la 65-a linio de la bufro.
Viŝi literon maldekstre C-h aŭ <- (Backspace)
Forviŝas literon maldekstre de la kursoro. Se la kursoro troviĝas en komenco de linio, la komando forviŝas linifinon kaj gluas aktualan kaj antaŭan liniojn.
Viŝi literon sub kursoro C-d aŭ Delete
Forviŝas literon sub kursoro. Se kursoro estas ĉe linifino, sekvanta linio estos algluita al la aktuala.
Viŝi vorton maldekstre M-<-
Forviŝas vorton maldekstre de la kursoro.
Viŝi sekvantan vorton M-d
Forviŝas sekvantan vorton dekstre de la kursoro.
Viŝi ĝis la fino de linio C-k
Se uzata sen argumento, la komando forviŝas ĉiun tekston de la aktuala posicio de kursoro ĝis la fino de aktuala linio. Se la linio estas malplena, la komando forviŝas malplenan linion. Se antaŭ la komando estis indikita argumento, ĝi forviŝas indikitan nombron da linioj komence de la aktuala. En ambaŭ okazoj la viŝitaj linioj estas metitaj en la poŝon (viŝringon) kiel unu peco de teksto, kiun oni povas enmetita poste.
Komenci novan linion C-m aŭ Enter
Enmetas novan linion en la teksto. Se la kursoro estas meze en linio, ĉiu teksto dekstre de la kursoro estas metata en la nova linio.
Krommarĝeni linion C-i aŭ Tab
En multaj reĝimoj (ĉefe por programlingvoj) enmetas necesan kvanton da spacoj por ke la unua maldekstra nespaca litero okazu ĉeĝusta pozicio.
Enpoŝigi areon C-w aŭ Shift-Delete
Forviŝas apartigitan pecon de teksto (inter punkto kaj marko) kaj metas ĝin en la viŝringo por posta enmeto.
Kopii areon M-w aŭ Ctrl-Insert
Kopias apartigitan pecon de teksto (inter punkto kaj marko) en la viŝringo por poste enmeto, sen forviŝi ĝin el la teksto.
Enmeti linion C-o
Enmetas novan linion en la pozicio de kursoro sed ne tuŝas kursoron.
Serĉi antaŭen C-s Enter (GNU Emacs) aŭ C-s (MicroEMACS)
Serĉas tekston komence de la aktuala pozicio en bufro ĝis la fino de dosiero. La teksto por serĉo estas tajpata en komandlinio kaj finiĝas per premo de klavo
<Enter>. Specialaj signoj povas esti enmetataj per premo deC-qkaj sekvanta premo de bezonata<Ctrl>-klavo. Post sukcesa serĉo premo de<Enter>ripetas la serĉo de la lasta tajpata teksto.
Serĉi reen C-r Enter (GNU Emacs) aŭ C-r (MicroEMACS)
Serĉas tekston reen, de la aktuala pozicio de kursoro ĝis la komenco de bufro simile al la antaŭa komando.
Dumtajpa serĉo C-s (C-s s en MicroEMACS)
La komando similas al ordinara serĉo, sed ĝi komencas serĉadon tuj post uzanto tajpis la unuan literon de teksto kaj trovis unuan aperon de tajpita teksto en bufro komence de la aktuala pozicio. Post uzanto tajpis sekvantan literon, la komando provas trovi la plej proksiman aperon de tajpita teksto. Por estri la serĉadon uzanto povas uzi jenajn subkomandojn:
- C-s Serĉi sekvantan aperon de la teksto
- C-r Reiri al la antaŭa
- C-h Viŝi la lastan tajpitan literon kaj reveni al la antaŭa trovita apero.
- C-g Haltigi la serĉon kaj reveni al la origina pozicio de kursoro
- Enter Haltigi la serĉon kaj resti ĉe la lasta trovita apero de la serĉata teksto.
Vi ĉiam finu serĉon per
<Enter>aŭC-g.
Dumtajpa serĉo reen C-r (C-x r en MicroEMACS)
La sama komando sed serĉas reen (de la aktuala pozicio ĝis la komenco de la bufro).
Substitui tekston M-r (MicroEMACS) aŭ M-x replace-string <Enter> (GNU Emacs)
La komando helpas substitui ĉiujn aperojn de unu teksto per alia teksto. Serĉo kaj substituo komenciĝas de la aktuala pozicio de kursoro kaj kuras al la fino de bufro. Se nombra argumento estis indikita antaŭ la komando, tiu nombro limigas kvanton da substituoj.
Interaga substituo M-x query-replace
Simile al la antaŭa, la komando substituas aperojn de unu teksto per la alia. Tamen, ĝi demandas konfirmon pri ĉiu substituo. Je ĝia demando uzanto povas respodi jene:
- y Substitui la trovitan tekston kaj serĉi plu
- n Ne substitui la trovitan tekston kaj serĉi plu
- ! Substitui ĉion sen demandoj
- C-g Haltigi la serĉadon
- . Reveni al origina pozicio, de kie serĉado komenciĝis
- ? Mallonga helpo
Serĉi regulesprimon M-x re-search-forward <Enter> en GNU Emacs
Serĉi regulesprimon de la aktuala pozicio de kursoro ĝis la fino de bufro. La regulesprimon uzanto tajpu en la komandlinio kaj finu ĝin per
<Entar>. Specialaj signoj estas entajpataj per helpo deC-q.
Serĉi regulesprimon reen M-x re-search-backward <Enter> en GNU Emacs
La komando funkcias same kiel la antaŭa, sed serĉas reen, de la pozicio de kursoro ĝis la komenco de bufro.
Substitui regulesprimon M-C-% aŭ M-x query-replace-regexp <Enter> (GNU Emacs)
Simile al la simpla interaga substituo, la komando substituas aperojn de teksto al alia teksto. Sed ĝi permesas uzi regulesprimojn por serĉo. Kiam ĝi demandas konfirmon, vi povas respondi jene:
- y Substitui la trovitan tekston kaj serĉi plu
- n Ne substitui la trovitan tekston kaj serĉi plu
- ! Substitui ĉion sen demandoj
- C-g Haltigi la serĉadon
- . Reveni al origina pozicio, de kie serĉado komenciĝis
- ? Mallonga helpo
Majuskligi vorton M-u
Ŝanĝas usklecon de ĉiuj literoj de la vorto al majuskla.
Numuskligi vorton M-c
Ŝanĝas usklecon de la vorto: la unua litero fariĝas majuskla dum ĉiuj aliaj -- minusklaj.
Minuskligi vorton M-l
Ŝanĝas usklecon de ĉiuj literoj de la vorto al minuskla.
Interŝanĝi du literojn C-t
Interŝanĝas du leterojn maldekstre de kursoro. 'AB' fariĝas 'BA'.
Enmeti specialan signon C-q
Enmetas signon tajpitan tuj poste ignorante ke ĝi povas havi specialan signifon (ekzemple, vi povas enmeti signon
^Qmem klavanteC-q C-q).
Meti markon C-Space aŭ C-@
La komando estas uzata por marki komencon de apartigata teksto. Apartigita teksto estas teksto inter punkto kaj marko. Ekzemple, por viŝi pecon de teksto, oni devas meti kursoron en la komenco de la peco, marki la pozicion per
C-Space, meti kursoron al la fino de la peco kaj eltranĉi la pecon perC-w. Nur unu sola marko povas ekzisti en ĉiu bufro. Emakso memoras markojn en ĉiuj bufroj.
Interŝanĝi punkton kaj markon C-x C-x
La komando ĵetas kursoron al markita pozicio kaj markas la antaŭan pozicion de kursoro. La komando tre utilas se necesas serĉi markon aŭ rapide reveni al markita pozicio en la teksto.
Eltranĉi apartigitan tekston C-w aŭ Shift-Del
La komando forviŝas apartigitan tekston (inter punkto kaj marko) kaj metas ĝin en la viŝringo. La komando egalas al la komando Cut (enpoŝigi) en aliaj redaktiloj.
Elpoŝigi C-y aŭ Shift-Ins
La komando engluas tekston el la viŝringo en aktualan pozicion de kursoro. Ĝi ne purigas la poŝon, sekve la teksto en ĝi povas esti engluita multfoje. Egalas al la komando Paste (reglui) en aliaj redaktiloj.
Kopii apartigitan tekston M-w aŭ Ctrl-Ins
La komando kopias apartigitan pecon de teksto en la poŝo (viŝringo) sed ne viŝas ĝin el la teksto. La komando egalas al la komando Copi (kopii) en aliaj redaktiloj.
Elpoŝigi antaŭan viŝitaĵon M-y
Anstataŭ unu la sola poŝo Emakso havas ringan liston de poŝoj -- kill ring aŭ viŝringo. Dum peco de teksto estas metata en ĝi, la antaŭa peco ne malaperas kaj povas esti elpoŝigita poste. La komando, elvokita tuj post
C-y, anstataŭas ĵus elpoŝigitan tekston je la antaŭa peco el la viŝringo. Se uzanto tuj elvokas la komandon ankoraŭfoje, la teksto estas anstataŭata per pli antaŭa peco el la viŝringo. La komando iom similas al multa poŝo en M$ Office 2000.
Malfari C-x u (C-/ en GNU Emacs)`
Malfari la lastan komandon. Uzanto povas malfari kelkajn laŭvicajn komandojn per kelkaj elvokoj de
C-x u. Ankaŭ eblas refari -- t.e. malfari malfaron.
Emakso havas multe da eblecoj por formati tekston. Ofte ili dependas de la ĉefa reĝimo uzata en bufro.
Agorgi dekstran randon de la teksto C-x f
Agordas novan valoron por dekstra rando de la teksto uzatan en aliaj komandoj de tekstformatado. Alivorte, la komando agordas maksimuman longecon de linio. Nova valoro estas indikita per universala argumento antaŭ la komando:
C-u 72 C-x ffaros maksimuman longecon de linio egalan je 72 literoj.
Krommarĝeni linion C-i aŭ Tab
La komando krommarĝenas maldekstran randon de linio aldonante necesan kvanton da spaco en ĝia komenco. Ordinare la maldekstra rando de linio fariĝas egalan al tiu de antaŭa linio. Depende de ĉefa reĝimo, la komando povas konsideri sintaksan konvencion de uzata programlingvo.
Formati alineon M-q
La komando formatas la tekston de kuranta alineo (alineo estas peco de teksto limigita je malplenaj linioj).
Centrigi linion M-s
La komando krommarĝenas kurantan linion centre de la teksto.
Aktuala pozicio en la bufro C-x =
La komando raportas pri kuranta pozicio de kursoro en la teksto. Ĝi montras numeron de litero sub kursoro en la teksto kaj en la linio, longecon de kuranta linio. Ankaŭ ĝi montras dekuman, okuman kaj deksesuman kodon de la litero sub kursoro.
Dividi aktualan fenestron vertikale C-x 2
Se eblas, la komando dividas la kurantan fenestron je du egalaj fenestroj. En ĉiu nova fenestro montriĝas la sama bufro.
Fermi fenestron C-x 0 (nulo)
La komando fermas la aktualan fenestron, se eblas.
Fermi aliajn fenestrojn C-x 1
La komando fermas ĉiujn aliajn fenestrojn krom la aktuala. La lasta fariĝas la sola fenestro.
Sekvanta fenestro C-x o (litero "o")
La komando aktivigas sekvantan fenestron laŭvice.
Rulumi sekvantan fenestron suben M-C-v
La komando rulumas sekvantan fenestron je unu paĝo suben.
Rulumi sekvantan fenestron supren M-C-z
La komando rulumas sekvantan fenestron je unu paĝo supren.
Pligrandigi fenestron C-x ^
La komando pligrandigas dimension de la aktuala fenestro je unu linio (aŭ nombro da linioj indikita per universala argumento).
Renovigi C-l
Renovigas la tutan ekranon kaj redesegnas kaj ĵetas aktualan linion en la centro de ekrano.
Elekti bufron C-x b
Ŝanĝi bufron montratan en la fenestro. La redaktilo demandos pri nomo de bufro. Se simple klavi
<Enter>la redaktilo elektos sekvantan en la listo de bufroj (aŭ la lastan uzitan).
Neniigi bufron C-x k
La komando neniigas indikitan bufron. Ĝi ne neniigas la dosieron, kiu estis ligita kun la bufro.
List de bufroj C-x C-b
En la nova fenestro la komando montras tutan liston de ekzistantaj bufroj. Por ĉiu bufro ordinare estas montrata plia informo: dosiernomo, ŝanĝoflago (
*ordinare signifas ke la teksto en la bufro ankoraŭ ne estas konservita,%signifas ke la teksto estas protektata de ŝanĝoj) ktp.
Viziti dosieron C-x C-f
La komando trovas indikitan dosiero. Se ĝi estas jam ligita kun iu bufro, la komando montras ĝin en aktuala fenestro. Alie ĝi kreas novan bufron kaj provas legi la dosieron.
Se vi volas krei novan dosieron, simple indiku nomon de neekzistanta dosiero. Ĝi estos kreita en la disko dum posta konservado.
Legi dosieron C-x C-r
La komando anstataŭas enhavon de la aktuala bufro je la enhavo de indikita dosiero. Se la malnova teksto ne estas konservita, la komando petos konfirmi nenniigon.
Inserti dosieron C-x C-i
La komando enŝovas enhavon de la indikita dosiero en la aktuala pozicio de la bufro.
Kompletigo estas uzata en ĉiuj komandoj, kiuj postulas dosiernomoj aŭ nomoj de bufroj. Uzanto tajpas nur komencon de la dezirata nomo kaj klavas <Tab>. Se ekzistas kelkaj dosieroj aŭ bufroj, kiuj komenciĝas per tajpitaj literoj, la listo de ili estas montrata al la uzanto (aŭ la uzanto devas klavi <Tab> kelkfoje).
Konservi bufron C-x C-s
Se enhavo de la aktuala bufro estis ŝanĝita sed ne konservita, la komando konservas la tekston en la dosiero ligita kun la bufro. La komando egalas al Save (Konservu) en aliaj redaktiloj.
Konservi dosieron C-x C-w
La komando konservas enhavon de la bufro en indikita dosiero. La komando egalas al Save as (Konservu kiel) en aliaj redaktiloj.
Eliri la redaktilon C-x C-c
La komando finigas la laboro kun Emakso kaj eliras en operaciumo. Se ekzistas ne konservitaj bufroj, la komando demandos ĉu vi volas perdi ĉiujn ŝanĝojn. Notu, ke la komando ne demandas ĉu vi volas konservi, sed ĉu vi volas perdi la ŝanĝojn.
Diversaj variaĵoj de Emakso povas havi sian propran helpsistemon. Ordinare en GNU Emacs kaj XEmacs helpo estas elvokata per C-h post kio Emakso demandas vin pri speco de helpo kiun vi bezonas: legi info, priskribi klavon, reĝimon, variablon aŭ funkcion.
Regulaj esprimoj estas verŝajne la plej potenca ilo por serĉi kaj substitui tekston. Se kutimaj komandoj serĉas nur precizajn kongruojn de la serĉata teksto, regulaj esprimoj "scipovas" serĉi, ekzemple, "vorton komencantan per 're'", aŭ "vorton 'redaktilo' ĉe la komenco de linio aŭ propozicio". Eblas instrui redaktilon trovi ĉiujn formojn de iu ajn vorto (ekzemple, ĉiujn akuzativojn aŭ prezencajn formojn de verboj). Eĉ pli, regulaj esprimoj permesas uzi fragmentojn de trovita teksto en serĉata teksto! Ekzemple, eblas trovi ĉiujn erare duobligitajn vortojn kaj forviŝi ilin.
Regulaj esprimoj estas simpla sed fleksebla kaj potenca lingvo. Ili forte plifaciligas tekstredaktado.
En regulaj esprimoj kelkaj simboloj havas specialan signifon kaj ĉiuj aliaj restas "ordinaraj". Ordinara simbolo estas la plej simpla regula esprimo, kiu kongruas kun si mem en la teksto. Specialaj simboloj estas: "$", "^", ".", "*", "+", "?", "[", "]" kaj "\". Ĉiuj aliaj simboloj aperantaj en la regula esprimo estas traktataj kiel ordinaraj, krom se la simbolo havas "\" antaŭ si.
Ekzemple, "f" ne estas speciala simbolo, ĝi estas ordinara, tial "f" estas regula esprimo, kiu kongruas nur al teksto "f" kaj nenion alian (ĝi ne kongruas al la linio "ff"). La esprimo "o" estas regula esprimo kongruanta nur kun "o". (Se uskleco estas ignorata, tiuj ĉi esprimoj ankaŭ kongruas al "F" kaj "O", sed ni taksu tion ĝeneraligo de "la sama linio").
Ajnaj du regulesprimoj A kaj B povas esti komponitaj en unu solan. La rezulto de la komponado estas regulesprimo, kiu kongruas al la linio, se A kongruas al la komenco de la linio kaj B al la resto.
Kiel la plej simpla ekzemplo ni komponu la regulesprimojn "f" kaj "o" kaj la rezulto estas regulesprimo "fo", kiu kongruas nur al la linio "fo". Ĝis nun ĉio estis simpla. Por fari ion pli kompleksan vi devas uzi almenaŭ unu el la specialaj simboloj. Jen estas la listo.
"."(Punkto) speciala simbolo, kiu kongruas al iu ajn solan literon de la teksto, krom linifinilo. Uzante komponadon ni povas krei regulajn esprimojn similajn al"a.b", kiuj kongruas al iu ajn linio el tri literoj kaj kiu komenciĝas per"a"kaj finiĝas per"b".
"*"ne estas uzata per si mem, ĝi estas postmeta operatoro, kiu signifas ripeti la antaŭan regulesprimon multfoje, tiom kiom eblas (nul aŭ pli da fojoj). Ekzemple,"o*"kongruas al ia ajn kvanto de litero"o"(kaj ankaŭ al malplenan linion).
"*"ĉiam aplikeblas al la plej malgranda regulesprimo. Do, всегда применяется к самому малому регулярному выражению. Так,"fo*"enhavas ripetigon de"o", sed ne"fo". Ĝi kongruas al"f","fo","foo"ktp.
Serĉa meĥanismo prilaboras operacion "*" trovante tiom da ripetantaj literoj kiom eblas. Post tio ĝi daŭrigas prilabori la reston de la regulesprimo. Se ne eblas kongruigi la reston de la regulesprimo al la resto de linio, okazas malfaro -- ĝi redonas kelkajn kongruitajn al "*" literojn ĝis kongruos la resto de la regulesprimo. Ekzemple, dum kongruado de ŝablono "ca*ar" al linio "caaar", unue la regulesprimo "a*" provas kongrui al "caaa" sed la resto de la regulesprimo enhavas "ar" kaj la resto de la linio -- nur "r", do, tiu provo fiaskas. Sekvanta provo por "a*" estas kongrui al nur du "a". Kaj tiuokaze la resto de la ŝablono kongruas al la resto de linio kaj serĉo sukcesas.
"+"postmeta operatoro, simila al"*", ĝi diferencas nur en tio, ke ĝi devas kongrui almenaŭ unu fojon. Ekzemple,"ca+r"kongruas al"car"kaj"caar"dum"c*r"ankaŭ al"cr".
"?"postmeta operatoro, simila al"*"escepte ke antaŭa esprimo devas kongrui nul aŭ unu fojon. Ekzemple,"ca?r"kongruas nur al"car"kaj"cr".
"[ … ]"difinas aron de simboloj, komenciĝas per"["kaj finiĝas per"]". En la plej simpla okazo la simboloj en krampoj estas tio, al kio la regulesprimo kongruas.
T.e., "[ad]" kongruas ĉu al "a", ĉu al "d", kaj regulesprimo "[ad]*" kongruas al ĉiu ajn linio el literoj "a" kaj "d" (kaj ankaŭ al malplena linio). Simile "c[ad]*r" kongruas al "cr", "car", "cdr", "caddaar" ktp.
Ankaŭ eblas uzi intervalojn de simboloj, indikante komencan kaj lastan simbolojn kun "-" inter ili. Ekzemple, "[a-z]" kongruas al ĉiu minuskula latina litero. Intervaloj povas intermiksiĝi kun ordinaraj simboloj, kiel, ekzemple, en esprimo "[a-z$%.]" kiu kongruas al ĉiu minuskula latina litero (a-z) aŭ simboloj "$", "%" aŭ punkto.
Bonvolu noti ke specialaj simboloj de regulesprimoj perdas sian specialan signifon interne de aroj kaj fariĝas ordinaraj. Aro havas sian propran specialan signaron: "]", "-" kaj "^".
Por aldoni simbolon "]" al aro oni devas meti ĝin je la unua loko: "[]a]" kongruas al "]" aŭ "a". Por aldoni "-" metu ĝin je la unua aŭ lasta loko en la aro: "[]-]" kongruas al "]" aŭ "-".
Por aldoni simbolon "^" al aro metu ĝin en iu ajn lokon de la aro krom komenco, kie ĝi havas specialan signifn (vd. malsupre).
Kiam oni uzas intervalon ĉe senuskleca serĉado, oni devas indiki ambaŭ finojn de la aro majuskle aŭ minuskle. Konduto de la aro kun miksita diapazono (ekz-e "A-z") ne estas predikebla.
"[^ … ]""[^"malfermas "komplementan aron da simboloj", kiu kongruas al ĉiuj simboloj krom indikitaj. Do, la aro"[^a-z0-9A-Z]"kongruas al ĉiuj simboloj krom latinaj literoj (ambaŭusklecaj) kaj ciferoj.
"^"ne havas specialan signifon en aro de simboloj, krom kiam ĝi komenciĝas la aron. Sekva post"^"simbolo estas traktata kvazaŭ ĝi estas la unua simbolo en la aro (alivorte"-"kaj"]"ankaŭ ne estas specialaj simboloj tiuokaze).
Komplementa aro povas kongrui al linifinilo se la lasta ne estis speciale indikita en la aro. Tio diferencas de konduto de aliaj programoj (ekz-e, "grep").
"^"estas speciala simbolo, kongruanta al komenco de linio, en kiu teksto estis trrovita. Aliokaze ĝi kongruas al nenio. Do,"^foo"kongruas al tekstero"foo"kiu komencas linion.
"$"simile al"^", sed ĝi kongruas al fino de linio."x+$"kongruas al unu aŭ kelkaj literoj"x"nur ĉe la fino de linio.
"\"plenumas du funkciojn: eskapigas specialajn simbolojn kaj aldonas specialajn konstuojn.
Rim. Historie, specialaj simboloj estas traktataj kiel ordinaraj kiam ili aperas en kunteksto, kie ilia speciala signifo estas sensenca. Ekzemple, en la esprimo "*foo" la asterisko estas traktata kiel ordinara simbolo "*", ĉar ĝi staras en komenco de l'esprimo kaj ne havas antaŭstarantan simbolon, por kiu ĝi povus influi. Oni taksas similajn esprimojn malbonaj, ĉiam necesas eskapigi specialajn simbolojn por igi ilin ordinarajn sendepende de la loko, kie ili aperas.
Plej ofte "\" kun sekvanta simbolo kongruas nur al tiu simbolo mem. Sed ekzistas kelkaj esceptoj: dusimbolaj vicoj komencantaj per "\", kiuj havas specialan signifon. La dua simbolo en ili estas ĉiam ordinara simbolo kiam estas uzata unuope. Jen estas la listo de kelkaj tiuj vicoj.
"\|"difinas alternativon. Du regulaj esprimoj A kaj B, kunigitaj per"\|", formas esprimon, kiu kongruas al la teksto se A kongruas al ĝi, aŭ B kongruas al ĝi. Tio funkcias jene: unue estas provanta A kaj se ĝi ne kongruas, B estas provanta.
Do, "foo\|bar" kongruas ĉu al "foo" ĉu al "bar".
"\|"estas aplikata al plej longaj regulesprimoj. Nur grupigaj krampoj"\( … \)"povas limigi vastecon de"\|".
"\( … \)"grupiga konstruo. Estas uzata en tri okazoj:a) Por limigi alternativaron de
"\|". Ekzemple,"\(foo\|bar\)x"kongruas al"foox"aŭ al"barx".b) Por grupigi kunmetitan esprimon por postfiksaj operatoroj
"*","+"aŭ"?". Ekzemple,"ba\(na\)+"kongruas al"bana","banana","bananana"ktp.c) Por konservi kongruitajn teksterojn por posta uzado.
La lasta apliko ne sekvas el ideo de grupigo, tio estas aparta apliko, kiu estu taksata kiel alia signifo de la konstruo "\( … \)". Apenaŭ okazus konflikto inter la ambaŭ signifoj en praktiko.
"\`"kongruas al malplena teksto, sed nur en la komenco de bufro aŭ linio, al kiu kongruas la esprimo.
"\b"kongruas al malplena teksto, sed nur en la fino de bufro aŭ linio, al kiu kongruas la esprimo.
"\b"kongruas al malplena teksto, sed nur en komenco aŭ fino de vorto. Do,"\bfoo\b"kongruas al ĉiu aparta vorto"foo","\bballs?\b"kongruas al apartaj vortoj"ball"aŭ"balls".
"\B"kongruas al malplena teksto ne en komenco aŭ fino de vorto.
"\<"kongruas al komenco de vorto."\<"kongruas al komenco de bufro nur se la teksto komenciĝas per litero.
"\>"kongruas al fino de vorto."\>"kongruas al fino de bufro nur se la teksto finiĝas per litero.
"\w"kongruas al ajna litero. Simboloj estas traktataj kiel literoj laŭ sintaksa tabelo.
"\W"kongruas al ajna simbolo, kiu ne estas litero.
La konstruoj pri vortoj kaj sintakso estas direktataj laŭ agordoj de sintaksa tabelo.
Jen estas kunmetita regulesprimo, kiun oni povas uzi por trovi finoj de sentencoj kune kun sekvantaj spacoj.
"[.?!][]"')]*\($\| $\|^I\| \)[ ^I^J]*"
La esprimo konsistas el kvar partoj:
Tajpante la regekspon vi devas premi C-q <TAB> por tajpi tabon kaj C-q C-j por tajpi linifinilon. Antaŭa C-q "diras" al Emakso ke senkvan klavpremon ĝi devas trakti kiel simpla simbolo eĉ se la klavo havas specialan signifon (komandon) por Emakso.