343 lines
7.2 KiB
Org Mode
343 lines
7.2 KiB
Org Mode
#+TITLE: Emacskurs
|
||
#+EMAIL: larstvei@ifi.uio.no
|
||
|
||
* Plan for kurset
|
||
+ Introduksjon til bruk av Emacs (ca. 20 minutter)
|
||
+ Se en konfigurasjonsfil vokse frem (ca. 20 minutter)
|
||
+ Pizza! (for de som er påmeldt)
|
||
+ Workshop hvor vi hjelper deg komme i gang med Emacs (ca. 45 minutter)
|
||
|
||
* Hva er Emacs?
|
||
+ Emacs er en teksteditor
|
||
+ Emacs er unikt utvidbar
|
||
+ Emacs er en Emacs Lisp maskin
|
||
+ Emacs er selvdokumenterende
|
||
+ Emacs har over 10000 innebygde kommandoer
|
||
+ Emacs er /fri/ programvare
|
||
+ Emacs er 48 år gammel
|
||
|
||
* Buffere, vinduer og rammer
|
||
|
||
+ Tekst lagres i /buffere/ + Filer lastes inn i et buffer
|
||
+ Buffere kan skrives til fil
|
||
+ Et buffere vises i et /vindu/
|
||
+ En /ramme/ kan inneholde ett eller flere vinduer
|
||
+ I bunnen av hver ramme er det et /minibuffer/
|
||
|
||
* Modes
|
||
|
||
+ /Major/ modes + hvert buffer har nøyaktig én aktiv /major/ mode
|
||
+ en major mode gir deg funksjonalitet for en bestemt type tekstredigering + de fleste programmeringsspråk har sin egen major mode
|
||
|
||
+ /Minor/ modes + du kan ha så mange aktive /minor/ modes du ønsker
|
||
+ en minor mode tilbyr tilleggsfunksjonalitet
|
||
+ Modes tilføyer ofte egne tastekombinasjoner!
|
||
|
||
* Tips
|
||
|
||
+ Emacs er annerledes å bruke enn mange andre programmer + Det krever tilvenning
|
||
|
||
+ I begynnelsen: + 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 + Unngå «pek og klikk»
|
||
|
||
+ Etter hvert: + Skriv din egen konfigurasjonsfil
|
||
+ Lær litt Emacs Lisp og skriv dine egne funksjoner
|
||
+ Gjør =Caps Lock= om til en ekstra =Ctrl=
|
||
|
||
* Terminologi for taster
|
||
|
||
+ =C-<any>= + Control
|
||
|
||
+ =M-<any>= + Meta er venstre-=Alt= på de fleste maskiner (alternativt =ESC=)
|
||
|
||
+ =S-<any>=
|
||
* Shift
|
||
* Kan ikke brukes med tegn du må bruke Shift for å nå (f.eks. =:=)
|
||
+ =<any>= representerer et vilkårlig tegn eller tastekombinasjon
|
||
|
||
* Prefikstaster
|
||
|
||
+ =C-x <any>= + Prefiks for globale kommandoer
|
||
|
||
+ =C-c <any>= + Prefiks for lokale kommandoer
|
||
+ Kan ha ulik oppførsel i ulike modes
|
||
+ =C-h <any>=
|
||
+ Prefiks for hjelp
|
||
|
||
* Komme seg ut
|
||
+ =C-x C-c=
|
||
+ Avslutt Emacs
|
||
+ =C-g=
|
||
+ Avbryt + Bør spammes når Emacs forvirrer deg
|
||
|
||
+ =ESC ESC ESC= + Bruk hvis =C-g= ikke hjalp
|
||
|
||
+ =<prefix> C-g= + Er alltid udefinert
|
||
+ Altså kan =C-g= brukes til å avbryte prefiks
|
||
|
||
* Tekstredigering
|
||
+ =C-f=, =C-b=
|
||
+ Flytt markøren ett tegn frem/tilbake
|
||
+ =M-f=, =M-b=
|
||
+ Flytt markøren ett ord frem/tilbake
|
||
+ =C-M-f=, =C-M-b=
|
||
+ Flytt markøren ett uttrykk frem/tilbake
|
||
+ =C-a=, =C-e=
|
||
+ Flytt markøren til begynnelsen/slutten av linja
|
||
+ =C-p=, =C-n=
|
||
+ Flytt markøren til forrige/neste linje
|
||
|
||
* Bla rundt
|
||
+ =C-v=, =M-v=
|
||
+ Scroll ned/opp en side
|
||
+ =M-<=, =M->=
|
||
+ Gå til begynnelsen/slutten av bufferet
|
||
+ =C-l=
|
||
+ Juster vertikal visning av markøren til midten/toppen/bunnen
|
||
|
||
* Kill og yank
|
||
+ =C-w=
|
||
+ Kill, tilsvarer cut
|
||
+ =C-y=
|
||
+ Yank, tilsvarer paste
|
||
+ =M-w=
|
||
+ Lagre til kill-ring, tilsvarer copy
|
||
+ =C-k=
|
||
+ Kill, drepe resten av en linje
|
||
+ =M-y=
|
||
+ Yank-pop, går lenger tilbake på kill-ring
|
||
|
||
* Feiloppretting
|
||
+ =C-d=, =M-d=, =C-M-d=
|
||
+ Fjern neste bokstav/ord/uttrykk
|
||
+ =DEL=, =M-DEL=, =C-M-DEL=
|
||
* Fjern forrige bokstav/ord/uttrykk
|
||
* =DEL= er "slettetasten", ikke "delete"
|
||
|
||
+ =C-_=, =C-/=, =C-x u= + Undo!
|
||
|
||
+ =C-t=, =M-t=, =C-M-t= + Bytt om to bokstaver/ord/uttrykk
|
||
|
||
+ =C-x C-t= + Bytt om to linjer
|
||
|
||
+ =M-q= + Formaterer avsnitt til en fornuftig linjebredde
|
||
+ Setter inn og fjerner kommentartegn etter behov
|
||
+ =M-u=, =M-l=, =M-c=
|
||
+ Gjør neste ord til UPPERCASE/lowercase/Capital-Case
|
||
|
||
* Markering av tekst
|
||
+ =C-SPC=
|
||
+ Start markering av tekst
|
||
+ =C-x h=
|
||
+ Markerer all tekst
|
||
+ =M-h=
|
||
+ Markerer et avsnitt ("paragraph")
|
||
+ Bruk i kombinasjon med =M-w=, =C-w= og =TAB=
|
||
|
||
+ Undo respekterer den markerte regionen
|
||
|
||
* Filer
|
||
+ =C-x C-f=
|
||
+ Åpne eller opprett fil
|
||
+ =C-x C-s=
|
||
+ Skriv bufferet til fil
|
||
+ =C-x C-w=
|
||
+ Skriv bufferet til en ny fil (tilsvarende «lagre som...»)
|
||
|
||
* Vinduer
|
||
+ =C-x 2=, =C-x 3=
|
||
+ Splitt et vindu horisontalt/vertikalt
|
||
|
||
+ =C-x 1=
|
||
+ Gjør det aktive vinduet til det eneste vinduet
|
||
|
||
+ =C-x 0=
|
||
+ Lukk det aktive vinduet
|
||
|
||
+ =C-x o=
|
||
+ Bytt fokus til et annet vindu
|
||
|
||
* Buffere
|
||
|
||
+ =C-x b RET=
|
||
+ Bytt buffer
|
||
|
||
+ =C-x k RET=
|
||
+ Drep (kill) buffer
|
||
|
||
+ =C-x left=, =C-x right=
|
||
+ En annen måte å bytter buffer på
|
||
|
||
* Kommandoer
|
||
|
||
+ =M-x <function> RET=
|
||
+ Lar deg kalle en vilkårlig kommando ved navn
|
||
|
||
+ =M-x replace-string RET <from> RET <to> RET=
|
||
+ Tilsvarer «search and replace»
|
||
|
||
+ =M-%=, =M-x query-replace RET <from> RET <to> RET=
|
||
+ Som =replace-string= for utvalgte treff
|
||
+ Bruk =y= / =n= for å velge om treffet skal erstattes + Bruk =!= for å erstatte resten av treffene
|
||
|
||
* Søking
|
||
|
||
+ =C-s= + Søk /fremover/ i bufferet
|
||
+ Gjenta =C-s= for neste treff + Avslutt med =RET=, slettekommando eller flytting av peker
|
||
|
||
+ =C-r= + Søk /bakover/ i bufferet
|
||
|
||
+ Dette er en /svært/ effektiv måte å flytte markøren på!
|
||
|
||
* Hjelp til selvhjelp
|
||
+ =C-h k=
|
||
+ Bruk hvis du lurer på hva en tastekombinasjon gjør
|
||
+ =C-h f=
|
||
+ 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=
|
||
+ Gir deg informasjon om aktive modes
|
||
+ =C-h a=
|
||
+ Apropos lar deg søke i hjelpen
|
||
+ =C-h C-h= (eller: =C-h ?=)
|
||
+ Gir deg hjelp om hjelpen
|
||
|
||
* Programmering
|
||
+ =TAB=
|
||
+ Indenterer riktig
|
||
+ =M-;=
|
||
+ Kommenterer ut på slutten av linjen eller et markert område
|
||
+ =C-x C-;=
|
||
+ Kommenterer ut linjen
|
||
+ =M-x compile RET <compile-command> RET=
|
||
+ Lar deg kjøre en vilkårlig kommando for å kompilere + Gir trykkbare linker til der det oppstod feil
|
||
|
||
+ =M-g M-g <nr> RET= + Flytter markøren til linjenummer =<nr>=
|
||
|
||
* Makroer
|
||
|
||
+ Makroer er en måte å «ta opp» en rekke kommandoer på
|
||
+ =C-x (=
|
||
+ Definer en makro
|
||
+ =<f3>=
|
||
+ Definer en makro /eller/ sett inn løpenummer
|
||
+ =C-x )=, =<f4>=
|
||
+ Ferdigstill makroen
|
||
+ =C-x e=, =<f4>=
|
||
+ Utfør makroen + Bruk =e= for å gjenta makroen
|
||
|
||
* Pakker
|
||
|
||
+ Emacs 29 kommer med innebygd pakkebehandler
|
||
+ Det finnes tusenvis av pakker
|
||
|
||
+ =M-x list-packages= + Bla gjennom pakker
|
||
+ =i= Marker for å installere + =U= Marker alle pakker for oppgradering
|
||
+ =d= Marker for sletting + =x= Utfør installering/oppgradering/sletting
|
||
|
||
+ Dette bør heller gjøres i konfigurasjonsfilen
|
||
|
||
* Anbefalinger
|
||
+ [[https://github.com/magnars/multiple-cursors.el][Multiple cursors]] ([[http://emacsrocks.com/e13.html][demo]])
|
||
+ 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
|
||
+ [[http://www.gnu.org/software/emacs/manual/html_node/emacs/index.html#Top][Emacs-manualen]]
|
||
+ [[https://www.masteringemacs.org/][Mastering Emacs]]
|
||
+ [[https://systemcrafters.net/][System Crafters]]
|
||
+ 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]]
|