Compare commits
24 Commits
6b7f4675b3
...
7499c8166c
Author | SHA1 | Date | |
---|---|---|---|
7499c8166c | |||
463fbf0dad | |||
630756fdca | |||
10d8ca291f | |||
4e6f48f7ae | |||
129f37ada0 | |||
e4a1cb02ab | |||
e8b956e452 | |||
7c38e0f24a | |||
874d7b9257 | |||
d0f8d86330 | |||
910ba276a9 | |||
18dff87379 | |||
91f1e2ad92 | |||
cd4a404a28 | |||
c015cd006f | |||
990ccf686b | |||
fd26496a7c | |||
71bbbbb190 | |||
31714725f8 | |||
0f06e7ed17 | |||
1a123f98f5 | |||
ff4b588e7d | |||
ad21913add |
258
slides.org
258
slides.org
@ -3,319 +3,329 @@
|
|||||||
|
|
||||||
* Plan for kurset
|
* Plan for kurset
|
||||||
|
|
||||||
+ Før pause:
|
+ Introduksjon til bruk av Emacs (ca. 20 minutter)
|
||||||
+ Liten demonstrasjon av hvordan man kommer igang med Emacs på Ifi's maskiner
|
+ Se en konfigurasjonsfil vokse frem (ca. 20 minutter)
|
||||||
+ Snakk om hva Emacs er
|
+ Pizza! (for de som er påmeldt)
|
||||||
+ Gå raskt gjennom foilene og dekker «basics»
|
+ Workshop hvor vi hjelper deg komme i gang med Emacs (ca. 45 minutter)
|
||||||
+ Etter pause:
|
|
||||||
+ Mer praktiske eksempler.
|
|
||||||
+ Vise hvordan Org-mode fungerer, og hva det kan brukes til
|
|
||||||
+ Tar imot alt av spørsmål fra salen!
|
|
||||||
|
|
||||||
* Hva er Emacs?
|
* Hva er Emacs?
|
||||||
|
|
||||||
+ Teksteditor
|
+ Emacs er en teksteditor
|
||||||
+ Utvidbar (Emacs Lisp)
|
+ Emacs er unikt utvidbar
|
||||||
+ Over 30 år gammel
|
+ Emacs er en Emacs Lisp maskin
|
||||||
+ Over 2500 innebygde kommandoer
|
+ Emacs er selvdokumenterende
|
||||||
+ Fri programvare
|
+ Emacs har over 10000 innebygde kommandoer
|
||||||
|
+ Emacs er /fri/ programvare
|
||||||
|
+ Emacs er 48 år gammel
|
||||||
|
|
||||||
* Rammer, vinduer og buffere
|
* Buffere, vinduer og rammer
|
||||||
|
|
||||||
+ Emacs åpnes i en ramme
|
+ Tekst lagres i /buffere/
|
||||||
+ Man kan ha flere vinduer i samme ramme
|
+ Filer lastes inn i et buffer
|
||||||
+ Tekst vises i buffere
|
+ Buffere kan skrives til fil
|
||||||
+ Du kan ha så mange åpne buffere du vil
|
+ Et buffere vises i et /vindu/
|
||||||
+ En fil åpnes i et nytt buffer
|
+ En /ramme/ kan inneholde ett eller flere vinduer
|
||||||
+ Minibufferet (nederste linje), brukes til å skrive inn filnavn, buffernavn, etc...
|
+ I bunnen av hver ramme er det et /minibuffer/
|
||||||
|
|
||||||
* Modes
|
* Modes
|
||||||
|
|
||||||
+ Major modes
|
+ /Major/ modes
|
||||||
+ hvert buffer har kun én aktiv major mode
|
+ hvert buffer har nøyaktig én aktiv /major/ mode
|
||||||
+ en major mode gir deg funksjonalitet for en bestemt type tekstredigering
|
+ en major mode gir deg funksjonalitet for en bestemt type tekstredigering
|
||||||
+ de fleste programmeringsspråk har sin egen major mode
|
+ de fleste programmeringsspråk har sin egen major mode
|
||||||
|
|
||||||
+ Minor modes
|
+ /Minor/ modes
|
||||||
+ du kan ha så mange aktive minor modes du ønsker
|
+ du kan ha så mange aktive /minor/ modes du ønsker
|
||||||
+ en minor mode tilbyr tilleggsfunksjonalitet
|
+ en minor mode tilbyr tilleggsfunksjonalitet
|
||||||
|
|
||||||
+ Modes tilføyer ofte egne tastekombinasjoner!
|
+ Modes tilføyer ofte egne tastekombinasjoner!
|
||||||
|
|
||||||
* Tips
|
* Tips
|
||||||
|
|
||||||
+ Emacs er annerledes å bruke enn mange andre programmer, så det krever tilvenning.
|
+ Emacs er annerledes å bruke enn mange andre programmer
|
||||||
|
+ Det krever tilvenning
|
||||||
|
|
||||||
+ i begynnelsen:
|
+ I begynnelsen:
|
||||||
+ les og gjør «learn-by-doing tutorial» (=C-h t=)
|
+ Les og gjør «learn-by-doing tutorial» (=C-h t=)
|
||||||
+ tving deg selv til å bruke de kommandoene du lærer til de sitter i fingrene
|
+ Tving deg selv til å bruke de kommandoene du lærer til de sitter i fingrene
|
||||||
+ unngå «pek og klikk»
|
+ Unngå «pek og klikk»
|
||||||
|
|
||||||
+ etter hvert (for spesielt interesserte):
|
+ Etter hvert:
|
||||||
+ skriv din egen config-fil
|
+ Skriv din egen konfigurasjonsfil
|
||||||
+ lær litt Emacs lisp, og skriv dine egne funksjoner
|
+ Lær litt Emacs Lisp, og skriv dine egne funksjoner
|
||||||
|
|
||||||
+ gjør =CAPS-LOCK= om til en ekstra Control (=Ctrl=)
|
+ Gjør =Caps Lock= om til en ekstra =Ctrl=
|
||||||
|
|
||||||
* Terminologi for taster
|
* Terminologi for taster
|
||||||
|
|
||||||
+ =C-<any>=
|
+ =C-<any>=
|
||||||
Control
|
+ Control
|
||||||
|
|
||||||
+ =M-<any>=
|
+ =M-<any>=
|
||||||
Meta er =Alt= på de fleste maskiner (alternativt =ESC=)
|
+ Meta er =Alt= på de fleste maskiner (alternativt =ESC=)
|
||||||
|
|
||||||
+ =<any>= betyr et vilkårlig tegn (eller tastekombinasjon)
|
+ =<any>= representerer et vilkårlig tegn eller tastekombinasjon
|
||||||
|
|
||||||
* Prefikstaster
|
* Prefikstaster
|
||||||
|
|
||||||
+ =C-x <any>=
|
+ =C-x <any>=
|
||||||
prefiks for globale kommandoer
|
+ Prefiks for globale kommandoer
|
||||||
|
|
||||||
+ =C-c <any>=
|
+ =C-c <any>=
|
||||||
prefiks for lokale kommandoer
|
+ Prefiks for lokale kommandoer
|
||||||
(har ikke alltid samme funksjon!)
|
+ Kan ha ulik oppførsel i ulike modes
|
||||||
|
|
||||||
+ =C-h <any>=
|
+ =C-h <any>=
|
||||||
prefiks for hjelp
|
+ Prefiks for hjelp
|
||||||
|
|
||||||
+ Alle tastekombinasjoner som ikke er en prefiks er enten bundet til en
|
|
||||||
kommando eller udefinert.
|
|
||||||
|
|
||||||
* Komme seg ut
|
* Komme seg ut
|
||||||
|
|
||||||
+ =C-x C-c=
|
+ =C-x C-c=
|
||||||
avslutt Emacs
|
+ Avslutt Emacs
|
||||||
|
|
||||||
+ =C-g=
|
+ =C-g=
|
||||||
avbryt
|
+ Avbryt
|
||||||
(bruk hvis du ikke skjønner hva Emacs holder på med!)
|
+ Bør spammes når Emacs forvirrer deg
|
||||||
|
|
||||||
+ =ESC ESC ESC=
|
+ =ESC ESC ESC=
|
||||||
(bruk hvis =C-g= ikke hjalp)
|
+ Bruk hvis =C-g= ikke hjalp
|
||||||
|
|
||||||
+ =<prefix> C-g=
|
+ =<prefix> C-g=
|
||||||
er udefinert
|
+ Er alltid udefinert
|
||||||
(Dvs. =C-g= kan brukes til å avbryte prefiks)
|
+ Altså kan =C-g= brukes til å avbryte prefiks
|
||||||
|
|
||||||
* Tekstredigering
|
* Tekstredigering
|
||||||
|
|
||||||
+ =C-f=, =C-b=
|
+ =C-f=, =C-b=
|
||||||
flytt markøren ett tegn frem/tilbake
|
+ Flytt markøren ett tegn frem/tilbake
|
||||||
|
|
||||||
+ =M-f=, =M-b=
|
+ =M-f=, =M-b=
|
||||||
flytt markøren ett ord frem/tilbake
|
+ Flytt markøren ett ord frem/tilbake
|
||||||
|
|
||||||
+ =C-M-f=, =C-M-b=
|
+ =C-M-f=, =C-M-b=
|
||||||
flytt markøren ett uttrykk frem/tilbake
|
+ Flytt markøren ett uttrykk frem/tilbake
|
||||||
|
|
||||||
+ =C-a=, =C-e=
|
+ =C-a=, =C-e=
|
||||||
flytt markøren til begynnelsen/slutten av linja
|
+ Flytt markøren til begynnelsen/slutten av linja
|
||||||
|
|
||||||
+ =C-p=, =C-n=
|
+ =C-p=, =C-n=
|
||||||
flytt markøren til forrige/neste linje
|
+ Flytt markøren til forrige/neste linje
|
||||||
|
|
||||||
* Bla rundt
|
* Bla rundt
|
||||||
|
|
||||||
+ =C-v=, =M-v=
|
+ =C-v=, =M-v=
|
||||||
scroll ned/opp en side
|
+ Scroll ned/opp en side
|
||||||
|
|
||||||
+ =M-<=, =M->=
|
+ =M-<=, =M->=
|
||||||
gå til begynnelsen/slutten av bufferet
|
+ Gå til begynnelsen/slutten av bufferet
|
||||||
|
|
||||||
+ =C-l=
|
+ =C-l=
|
||||||
vis slik at markøren er i senter/toppen/bunnen
|
+ Juster vertikal visning av markøren til senter/toppen/bunnen
|
||||||
|
|
||||||
* Kill og yank
|
* Kill og yank
|
||||||
|
|
||||||
+ =C-w=
|
+ =C-w=
|
||||||
kill, tilsvarer cut
|
+ Kill, tilsvarer cut
|
||||||
|
|
||||||
+ =C-y=
|
+ =C-y=
|
||||||
yank, tilsvarer paste
|
+ Yank, tilsvarer paste
|
||||||
|
|
||||||
+ =M-w=
|
+ =M-w=
|
||||||
lagre til kill-ring, tilsvarer copy
|
+ Lagre til kill-ring, tilsvarer copy
|
||||||
|
|
||||||
+ =C-k=
|
+ =C-k=
|
||||||
kill, drepe resten av en linje
|
+ Kill, drepe resten av en linje
|
||||||
|
|
||||||
+ =M-y=, må etterfølges av =C-y=
|
+ =M-y=
|
||||||
yank-pop, går lenger tilbake på kill-ring
|
+ Yank-pop, går lenger tilbake på kill-ring
|
||||||
|
|
||||||
* Feiloppretting
|
* Feiloppretting
|
||||||
|
|
||||||
+ =C-d=, =M-d=
|
+ =C-d=, =M-d=, =C-M-d=
|
||||||
fjern neste bokstav/ord
|
+ Fjern neste bokstav/ord/uttrykk
|
||||||
|
|
||||||
+ =C-_=, =C-/=, =C-x u=
|
+ =C-_=, =C-/=, =C-x u=
|
||||||
undo!
|
+ Undo!
|
||||||
|
|
||||||
+ =C-t=, =M-t=
|
+ =C-t=, =M-t=, =C-M-t=
|
||||||
bytt om to bokstaver/ord
|
+ Bytt om to bokstaver/ord/uttrykk
|
||||||
|
|
||||||
+ =C-x C-t=
|
+ =C-x C-t=
|
||||||
bytt om to linjer
|
+ Bytt om to linjer
|
||||||
|
|
||||||
+ =M-q=
|
+ =M-q=
|
||||||
formaterer avsnitt til en fornuftig linjebredde
|
+ Formaterer avsnitt til en fornuftig linjebredde
|
||||||
|
|
||||||
+ =M-u=, =M-l=, =M-c=
|
+ =M-u=, =M-l=, =M-c=
|
||||||
gjør neste ord til UPPERCASE/lowercase/Capital-Case
|
+ Gjør neste ord til UPPERCASE/lowercase/Capital-Case
|
||||||
|
|
||||||
* Markering av tekst
|
* Markering av tekst
|
||||||
|
|
||||||
+ =C-SPC=
|
+ =C-SPC=
|
||||||
markerer tekst
|
+ Start markering av tekst
|
||||||
|
|
||||||
+ =C-x h=
|
+ =C-x h=
|
||||||
markerer all tekst
|
+ Markerer all tekst
|
||||||
|
|
||||||
+ =M-h=
|
+ =M-h=
|
||||||
markerer en paragraf
|
+ Markerer en paragraf
|
||||||
|
|
||||||
+ Bruk i kombinasjon med =M-w=, =C-w= og =TAB=
|
+ Bruk i kombinasjon med =M-w=, =C-w= og =TAB=
|
||||||
|
|
||||||
|
+ Undo respekterer den markerte regionen
|
||||||
|
|
||||||
* Filer
|
* Filer
|
||||||
|
|
||||||
+ =C-x C-f=
|
+ =C-x C-f=
|
||||||
åpne fil
|
+ Åpne eller opprett fil
|
||||||
(hvis den ikke finnes fra før åpnes et tomt buffer med det nye filnavnet)
|
|
||||||
|
|
||||||
+ =C-x C-s=
|
+ =C-x C-s=
|
||||||
lagre buffer
|
+ Skriv bufferet til fil
|
||||||
|
|
||||||
+ =C-x C-w=
|
+ =C-x C-w=
|
||||||
skrive til fil (tilsvarende «lagre som...»)
|
+ Skriv bufferet til en ny fil (tilsvarende «lagre som...»)
|
||||||
|
|
||||||
* Vinduer
|
* Vinduer
|
||||||
|
|
||||||
+ =C-x 2=, =C-x 3=
|
+ =C-x 2=, =C-x 3=
|
||||||
splitt et vindu horisontalt/vertikalt
|
+ Splitt et vindu horisontalt/vertikalt
|
||||||
|
|
||||||
+ =C-x 1=
|
+ =C-x 1=
|
||||||
gjør det aktive vinduet til det eneste vinduet
|
+ Gjør det aktive vinduet til det eneste vinduet
|
||||||
|
|
||||||
+ =C-x 0=
|
+ =C-x 0=
|
||||||
lukk det aktive vinduet
|
+ Lukk det aktive vinduet
|
||||||
|
|
||||||
+ =C-x o=
|
+ =C-x o=
|
||||||
bytt fokus til et annet vindu
|
+ Bytt fokus til et annet vindu
|
||||||
|
|
||||||
* Buffere
|
* Buffere
|
||||||
|
|
||||||
+ =C-x b RET=
|
+ =C-x b RET=
|
||||||
bytt buffer
|
+ Bytt buffer
|
||||||
(siste besøkte buffer er default)
|
|
||||||
|
|
||||||
+ =C-x k RET=
|
+ =C-x k RET=
|
||||||
drep (kill) buffer
|
+ Drep (kill) buffer
|
||||||
(det aktive bufferet er default)
|
|
||||||
|
|
||||||
+ =C-x left=, =C-x right=
|
+ =C-x left=, =C-x right=
|
||||||
en annen måte å bytter buffer på
|
+ En annen måte å bytter buffer på
|
||||||
|
|
||||||
* Kommandoer
|
* Kommandoer
|
||||||
|
|
||||||
+ =M-x <function> RET=
|
+ =M-x <function> RET=
|
||||||
lar deg kalle en vilkårlig kommando med navn
|
+ Lar deg kalle en vilkårlig kommando ved navn
|
||||||
|
|
||||||
+ =M-x replace-string RET <from> RET <to> RET=
|
+ =M-x replace-string RET <from> RET <to> RET=
|
||||||
tilsvarer «search and replace»
|
+ Tilsvarer «search and replace»
|
||||||
|
|
||||||
+ =M-x query-replace RET <from> RET <to> RET= ... =y/n=
|
+ =M-%=, =M-x query-replace RET <from> RET <to> RET=
|
||||||
samme som =replace-string=, men du kan velge hva som skal erstattes (kan også kjøres med =M-%=!)
|
+ Som =replace-string= for utvalgte treff
|
||||||
|
+ Bruk =y=/=n= for om treffet skal erstattes
|
||||||
|
|
||||||
* Søking
|
* Søking
|
||||||
|
|
||||||
+ =C-s=
|
+ =C-s=
|
||||||
søk fremover i bufferet
|
+ Søk /fremover/ i bufferet
|
||||||
|
+ Gjenta =C-s= for neste treff
|
||||||
|
+ Avslutt med =RET=
|
||||||
|
|
||||||
+ =C-r=
|
+ =C-r=
|
||||||
søk bakover i bufferet
|
+ Søk /bakover/ i bufferet
|
||||||
|
|
||||||
+ Dette er en /svært/ effektiv måte å flytte markøren på!
|
+ Dette er en /svært/ effektiv måte å flytte markøren på!
|
||||||
|
|
||||||
* Hjelp til selvhjelp
|
* Hjelp til selvhjelp
|
||||||
|
|
||||||
+ =C-h k=
|
+ =C-h k=
|
||||||
bruk hvis du lurer på hva en tastekombinasjon gjør
|
+ Bruk hvis du lurer på hva en tastekombinasjon gjør
|
||||||
|
|
||||||
+ =C-h f=
|
+ =C-h f=
|
||||||
bruk hvis du kjenner navnet på en funksjon, men ikke vet hva den gjør
|
+ Bruk hvis du vil vite hva en funksjon gjør
|
||||||
|
|
||||||
|
+ =C-h v=
|
||||||
|
+ Bruk hvis du vil vite hva en variabel er bundet til og brukes til
|
||||||
|
|
||||||
+ =C-h m=
|
+ =C-h m=
|
||||||
gir deg informasjon om moden du er i (bl.a. tastekombinasjoner som er spesielle for moden)
|
+ Gir deg informasjon om aktive modes
|
||||||
|
|
||||||
+ =C-h a=
|
+ =C-h a=
|
||||||
apropos, lar deg søke i hjelpen
|
+ Apropos lar deg søke i hjelpen
|
||||||
|
|
||||||
+ =C-h C-h= (eller: =C-h ?=)
|
+ =C-h C-h= (eller: =C-h ?=)
|
||||||
gir deg hjelp om hjelpen
|
+ Gir deg hjelp om hjelpen
|
||||||
|
|
||||||
* Programmering
|
* Programmering
|
||||||
|
|
||||||
+ =TAB=
|
+ =TAB=
|
||||||
indenterer riktig
|
+ Indenterer riktig
|
||||||
|
|
||||||
+ =M-;=
|
+ =M-;=
|
||||||
kommenterer ut et markert område
|
+ Kommenterer ut på slutten av linjen eller et markert område
|
||||||
|
|
||||||
+ =C-x C-;=
|
+ =C-x C-;=
|
||||||
kommenterer ut linjen
|
+ Kommenterer ut linjen
|
||||||
|
|
||||||
+ =M-x compile RET <compile-command> RET=
|
+ =M-x compile RET <compile-command> RET=
|
||||||
lar deg kompilere i Emacs
|
+ Lar deg kjøre en vilkårlig kommando for å kompilere
|
||||||
(gir trykkbare linker til der feil oppstod)
|
+ Gir trykkbare linker til der det oppstod feil
|
||||||
|
|
||||||
+ =M-g M-g <nr> RET=
|
+ =M-g M-g <nr> RET=
|
||||||
flytter markøren til linjenummer =<nr>=
|
+ Flytter markøren til linjenummer =<nr>=
|
||||||
|
|
||||||
* Makroer
|
* Makroer
|
||||||
|
|
||||||
+ Makroer er en måte å «ta opp» en rekke kommandoer på
|
+ Makroer er en måte å «ta opp» en rekke kommandoer på
|
||||||
|
|
||||||
+ =C-x (=
|
+ =C-x (=
|
||||||
definer en makro
|
+ Definer en makro
|
||||||
|
|
||||||
+ =<f3>=
|
+ =<f3>=
|
||||||
definer en makro /eller/ sett inn løpenummer
|
+ Definer en makro /eller/ sett inn løpenummer
|
||||||
|
|
||||||
+ =C-x )=, =<f4>=
|
+ =C-x )=, =<f4>=
|
||||||
ferdigstill makroen
|
+ Ferdigstill makroen
|
||||||
|
|
||||||
+ =C-x e=, =<f4>=
|
+ =C-x e=, =<f4>=
|
||||||
utfør makroen
|
+ Utfør makroen
|
||||||
|
+ Bruk =e= for å gjenta makroen
|
||||||
+ =e=
|
|
||||||
gjenta makroen
|
|
||||||
|
|
||||||
* Pakker
|
* Pakker
|
||||||
|
|
||||||
+ Emacs 29 kommer med innebygd pakkebehandler
|
+ Emacs 29 kommer med innebygd pakkebehandler
|
||||||
|
|
||||||
+ det finnes tusenvis av pakker
|
+ Det finnes tusenvis av pakker
|
||||||
|
|
||||||
+ =M-x list-packages=
|
+ =M-x list-packages=
|
||||||
bla gjennom pakker
|
+ Bla gjennom pakker
|
||||||
|
+ =i= Marker for å installere
|
||||||
|
+ =U= Marker alle pakker for oppgradering
|
||||||
|
+ =d= Marker for sletting
|
||||||
|
+ =x= Utfør installering/oppgradering/sletting
|
||||||
|
|
||||||
+ =i= installere
|
+ Dette bør heller gjøres i konfigurasjonsfilen
|
||||||
|
|
||||||
+ =U= oppgrader alle
|
|
||||||
|
|
||||||
+ =d= slett
|
|
||||||
|
|
||||||
+ =x= utfør installering/oppgradering/sletting
|
|
||||||
|
|
||||||
+ Alt dette bør heller gjøres i konfigurasjonsfilen
|
|
||||||
|
|
||||||
* Anbefalinger
|
* Anbefalinger
|
||||||
|
|
||||||
+ [[https://github.com/magnars/multiple-cursors.el][Multiple cursors]] ([[http://emacsrocks.com/e13.html][demo]])
|
+ [[https://github.com/magnars/multiple-cursors.el][Multiple cursors]] ([[http://emacsrocks.com/e13.html][demo]])
|
||||||
lar deg kontrollere flere markører samtidig!
|
+ Lar deg kontrollere flere markører samtidig!
|
||||||
|
+ [[https://magit.vc/][Magit]]
|
||||||
|
+ Det beste grensesnittet til Git
|
||||||
|
+ [[https://orgmode.org/][Org mode]]
|
||||||
|
+ Et markup språk med fantastisk støtte for
|
||||||
|
+ Notater
|
||||||
|
+ Publisering
|
||||||
|
+ Literate programming
|
||||||
|
+ ... masse mer
|
||||||
|
|
||||||
* Nyttige lenker
|
* Nyttige lenker
|
||||||
|
|
||||||
+ [[http://www.gnu.org/software/emacs/manual/html_node/emacs/index.html#Top][Emacs-manualen]]
|
+ [[http://www.gnu.org/software/emacs/manual/html_node/emacs/index.html#Top][Emacs-manualen]]
|
||||||
+ [[http://www.masteringemacs.org/reading-guide/][En flott blogg om Emacs]]
|
+ [[http://www.masteringemacs.org/reading-guide/][En flott blogg om Emacs]]
|
||||||
+ [[https://github.com/larstvei/dot-emacs][Min konfigurasjonsfil]]
|
+ Noen konfigurasjonsfiler:
|
||||||
|
+ [[https://github.com/larstvei/dot-emacs][larstvei]]
|
||||||
|
+ [[https://codeberg.org/idun/dotemacs][idun]]
|
||||||
|
+ [[https://github.com/SophieBosio/.emacs.d][SophieBosio]]
|
||||||
|
+ [[https://github.com/magnars/emacsd-reboot][magnars]]
|
||||||
|
+ [[https://github.com/simenheg/.emacs.d][simenheg]]
|
||||||
|
+ [[https://github.com/purcell/emacs.d][purcell]]
|
||||||
|
+ [[https://github.com/rougier/dotemacs][rougier]]
|
||||||
|
Loading…
Reference in New Issue
Block a user