Back openDesk Edu for a sovereign, open-source education — every vote counts.
Vote nowSave products you love by clicking the heart icon.
Vollständige Anleitung zum Scrollen in geschachtelten tmux-Sessions — Maus-Unterstützung, Alt-Tasten-Bindings, Copy-Mode und Prefix-Handling für mehrstufiges tmux.
GNU Emacs ist ein Lisp-basierter, unendlich erweiterbarer Editor. Er ist nicht nur ein Texteditor – er ist eine vollständige Computing-Umgebung. Wichtige Konvention: C- = Ctrl, M- = Alt (Meta).
| Taste | Aktion | Merkhilfe |
|---|---|---|
C-f | Ein Zeichen vorwärts | Forward |
C-b | Ein Zeichen rückwärts | Back |
C-n | Nächste Zeile | Next |
C-p | Vorherige Zeile | Previous |
C-a | Zeilenanfang | Anfang des Alphabets |
C-e | Zeilenende | End |
M-f | Ein Wort vorwärts | Meta Forward |
M-b | Ein Wort rückwärts | Meta Back |
M-a | Satzanfang | Meta Beginning |
M-e | Satzende | Meta End |
C-v | Seite abwärts | View |
M-v | Seite aufwärts | Meta View |
C-l | Cursor auf Bildschirm zentrieren | Line |
M-< | Buffer-Anfang | Meta Less-than |
M-> | Buffer-Ende | Meta Greater-than |
C-g | Aktuellen Befehl abbrechen/beenden | Go away |
# Files
C-x C-f # find (open) file
C-x C-s # save file
C-x C-w # write as (save as)
C-x C-c # exit Emacs
C-x k # kill (close) current buffer
C-x C-j # open Dired (file manager)
# Buffers
C-x b # switch buffer (with auto-complete)
C-x C-b # list all buffers
C-x <left> # previous buffer
C-x <right> # next buffer
C-x k # kill buffer
| Taste | Aktion |
|---|---|
Backspace | Vorheriges Zeichen löschen |
C-d | Nächstes Zeichen löschen |
M-Backspace | Vorheriges Wort löschen |
M-d | Nächstes Wort löschen |
C-k | Bis zum Zeilenende löschen (cut) |
M-k | Bis zum Satzende löschen |
C-w | Region löschen (Auswahl ausschneiden) |
M-w | Region kopieren |
C-y | Yank (einfügen) |
M-y | Kill-Ring nach Yank durchlaufen |
C-/ oder C-x u | Undo |
C-Shift-/ oder C-x C-Shift-u | Redo (Emacs 28+) |
C-Space | Markierung setzen (Auswahl beginnen) |
C-x h | Gesamten Buffer auswählen |
C-t | Zwei Zeichen vertauschen |
M-t | Zwei Wörter vertauschen |
C-x C-t | Zwei Zeilen vertauschen |
M-c | Wort großschreiben (Anfang) |
M-u | Wort komplett GROSSSCHREIBEN |
M-l | Wort kleinschreiben |
M-q | Absatz formatieren (reflow) |
# Incremental search
C-s # search forward (incremental)
C-r # search backward (incremental)
# While searching:
# C-s again = jump to next match
# C-r again = jump to previous match
# C-g = cancel search
# Non-incremental search
M-C-s # search forward with regex
M-C-r # search backward with regex
# Replace
M-% # query-replace (prompted replace)
# y = replace, n = skip, ! = replace all, q = quit
# Replace with regex
C-M-% # query-replace-regexp
# The kill ring is Emacs's multi-item clipboard
C-k # kill (cut) line from cursor to end
C-k C-k # kill entire line (including newline)
C-w # kill region (cut selection)
M-w # copy region (without killing)
C-y # yank (paste most recent kill)
M-y # cycle kill ring — press repeatedly after C-y
# Example: paste something from 3 cuts ago
C-y M-y M-y M-y
# Fenster aufteilen
C-x 2 # horizontal aufteilen
C-x 3 # vertikal aufteilen
C-x 1 # alle anderen Fenster schließen
C-x 0 # aktuelles Fenster schließen
# Zwischen Fenstern navigieren
C-x o # zum nächsten Fenster wechseln
# Fenster in der Größe ändern
C-x ^ # Fensterhöhe vergrößern
C-x } # Fensterbreite vergrößern
C-x { # Fensterbreite verkleinern
C-x + # Alle Fenster ausbalancieren
Org-Mode is Emacs's killer app — an outline-based document and task management system built in.
# Eine Org-Datei öffnen
C-x C-f todo.org
# Navigation in der Gliederung
Tab # Sichtbarkeit umschalten (Subtree einklappen/ausklappen)
S-Tab # Globale Sichtbarkeit umschalten
C-c C-n # Nächste Überschrift
C-c C-p # Vorherige Überschrift
C-c C-f # Vorwärts zur nächsten Überschrift (gleiche Ebene)
C-c C-b # Rückwärts zur vorherigen Überschrift (gleiche Ebene)
C-c C-u # Zur übergeordneten Überschrift springen
# Struktur-Bearbeitung
M-Enter # Neue Überschrift/Punkt darunter
M-S-Enter # Neue Überschrift (gleiche Ebene wie übergeordnet)
M-Left/Right # Subtree herauf- oder herabstufen
M-S-Left/Right # Subtree mit Kindern herauf- oder herabstufen
M-Up/Down # Subtree nach oben/unten verschieben
# Todo-Listen
C-c C-t # Todo-Status umschalten (TODO → DONE → TODO)
S-Right/Left # Durch Todo-Keywords navigieren
# Tabellen (integriertes Spreadsheet)
C-c | # Tabelle erstellen oder in Tabelle konvertieren
Tab # Zur nächsten Zelle springen / Ausrichtung korrigieren
S-Tab # Zur vorherigen Zelle springen
M-Left/Right # Spalte verschieben
M-Up/Down # Zeile verschieben
C-c - # Horizontale Linie einfügen
C-c Enter # Zeile darunter einfügen
C-c C-c # Tabellenformeln neu berechnen
# Links
C-c C-l # Link einfügen/bearbeiten
C-c C-o # Link an aktueller Position öffnen
# Export
C-c C-e # Export-Dispatcher
# h h = Export nach HTML
# l p = Export nach PDF (via LaTeX)
# l o = Export nach ODT
# m m = Export nach Markdown
# Eine Aufgabenliste erstellen
* Project Alpha
** TODO Research competitor features
SCHEDULED: <2026-04-25>
** TODO Design API schema
SCHEDULED: <2026-04-28>
** DONE Write initial documentation
CLOSED: [2026-04-18 Sat]
# Eine einfache Tabelle mit Formel
| Item | Qty | Price | Total |
|----------+-----+-------+-------|
| Widget | 3 | 10 | 30 |
| Gadget | 2 | 25 | 50 |
| Doohickey| 1 | 15 | 15 |
|----------+-----+-------+-------|
| Total | 6 | | 95 |
#+TBLFM: @5$4=vsum(@2$4..@4$4)
# ~/.emacs.d/init.el — moderne Emacs-Konfiguration
;; Package management
(require 'package)
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
("gnu" . "https://elpa.gnu.org/packages/")))
(package-initialize)
(unless package-archive-contents
(package-refresh-contents))
;; Use-package für saubere Konfiguration (integriert seit Emacs 29)
(setq use-package-always-ensure t)
;; UI
(tool-bar-mode -1) ; Toolbar ausblenden
(menu-bar-mode -1) ; Menüleiste ausblenden
(scroll-bar-mode -1) ; Scrollbalken ausblenden
(column-number-mode 1) ; Spaltennummer anzeigen
(global-display-line-numbers-mode 1) ; Zeilennummern anzeigen
(show-paren-mode 1) ; Passende Klammern hervorheben
(electric-pair-mode 1) ; Klammern automatisch schließen
;; Theme
(use-package doom-themes
:config
(setq doom-themes-enable-bold t
doom-themes-enable-italic t)
(load-theme 'doom-one t))
;; Editing
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
(setq-default fill-column 80)
(global-auto-revert-mode t) ; Geänderte Dateien automatisch neu laden
(setq backup-directory-alist '(("." . "~/.emacs.d/backups")))
(setq auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save/" t)))
;; Key bindings
(global-set-key (kbd "C-<tab>") 'other-window)
(global-set-key (kbd "M-/") 'company-complete)
(global-set-key (kbd "C-c g") 'magit-status)
(global-set-key (kbd "C-x k") 'kill-current-buffer)
# Installation
M-x package-install RET magit RET
# Nutzung
C-x g # Magit-Status-Buffer öffnen
# Im Magit-Status:
# s = Datei stagen
# u = Datei unstagen
# c c = commit (öffnet Buffer für Commit-Nachricht)
# C-c C-c = Commit abschließen
# P p = push
# F p = pull
# l l = log
# d d = diff
# z s = stash
# b b = Branch auschecken
# Tab = Sektion erweitern/einklappen
# q = Magit beenden
# Installation
M-x package-install RET company RET
# Konfiguration (zu init.el hinzufügen)
(use-package company
:hook (prog-mode . company-mode)
:config
(setq company-minimum-prefix-length 1
company-idle-delay 0.0)
(global-company-mode 1))
# Nutzung (im prog-mode erscheinen Vervollständigungen automatisch):
M-/ # Vervollständigung manuell auslösen
C-n / C-p # Durch Vervollständigungskandidaten navigieren
Tab # Vervollständigung akzeptieren
# Installation
M-x package-install RET flycheck RET
# Konfiguration (zu init.el hinzufügen)
(use-package flycheck
:init (global-flycheck-mode))
# Nutzung:
# Flycheck läuft automatisch in unterstützten Modi
C-c ! l # Fehler auflisten
C-c ! n # Zum nächsten Fehler springen
C-c ! p # Zum vorherigen Fehler springen
C-c ! v # Flycheck-Setup verifizieren
C-c ! s # Checker festlegen
| Taste | Aktion |
|---|---|
C-g | Befehl abbrechen |
C-x C-c | Emacs beenden |
C-x u oder C-/ | Rückgängig machen |
C-x C-f | Datei öffnen |
C-x C-s | Datei speichern |
C-x C-b | Buffer auflisten |
C-x b | Buffer wechseln |
| Taste | Aktion |
|---|---|
C-f / C-b | Zeichen vor / zurück |
C-n / C-p | Zeile runter / hoch |
C-a / C-e | Zeilenanfang / -ende |
M-f / M-b | Wort vor / zurück |
M-< / M-> | Buffer-Anfang / -ende |
C-v / M-v | Seite runter / hoch |
| Taste | Aktion |
|---|---|
C-k | Zeile killen (bis zum Ende ausschneiden) |
C-w | Region killen (Auswahl ausschneiden) |
M-w | Region kopieren |
C-y | Yank (einfügen) |
M-y | Kill-Ring durchlaufen |
| Taste | Aktion |
|---|---|
C-x 2 | Horizontal teilen |
C-x 3 | Vertikal teilen |
C-x 1 | Einzelnes Fenster |
C-x o | Anderes Fenster |
C-x b | Buffer wechseln |
C-x k | Buffer killen |
| Taste | Aktion |
|---|---|
C-s / C-r | Vorwärts- / Rückwärtssuche |
M-% | Abfrage-Ersetzen |
C-M-% | Abfrage-Ersetzen mit Regex |
C-h f # describe function
C-h v # describe variable
C-h k # describe key binding
C-h m # describe current mode's bindings
C-h a # apropos (search all commands by keyword)
C-h t # built-in Emacs tutorial
C-h i # Info manual browser
Dired ist der integrierte Dateimanager von Emacs — ein leistungsstarker Verzeichnis-Editor zum Navigieren, Anzeigen und Manipulieren von Dateien.
# Open Dired
C-x C-j # open Dired in current directory (dired-jump)
C-x d # open Dired (prompts for directory)
C-u C-x d # open Dired in other window
# Navigation
n # next file
p # previous file
C-n / C-p # same as n/p
SPC # scroll down (next page)
DEL # scroll up (previous page)
g # refresh directory listing
s # sort by name (toggle date/name)
C-u s # sort by date
# Marking files
m # mark file
u # unmark file
U # unmark all files
d # flag for deletion
D # delete flagged files
x # execute all deletions
t # toggle mark (invert selection)
* . # mark all files with extension
* @ # mark all symlinks
* / # mark all directories
M-DEL # unmark all files
# File operations on marked files
C # copy files (prompts for destination)
R # rename file
M # change file mode (chmod)
G # change group (chgrp)
O # change owner (chown)
Z # compress/decompress files
! # run shell command on marked file
# Search in files
A # search marked files for regex
Q # query replace in marked files
# Writable Dired (wdired) — edit filenames like text
C-x C-q # enter wdired mode (make directory editable)
C-c C-c # commit changes and exit wdired
C-c C-k # abort wdired changes
# Find files
M-x find-name-dired # find files by name in directory
M-x find-grep-dired # find files matching grep pattern
# Shell mode (interactive system shell)
M-x shell # open shell buffer (runs $SHELL)
M-x eshell # open Eshell (Emacs Lisp shell)
# Run shell commands from any buffer
M-! # run shell command, show output
M-| # pipe region through shell command (replace region)
C-u M-! # run command and insert output at point
# Eshell-specific features
# Eshell is written in Emacs Lisp — works the same on all platforms
# Supports Emacs Lisp expressions alongside regular commands
# Tab completion works with Emacs's completion system
# Useful Eshell aliases (add to ~/.eshell-aliases)
# alias ll ls -l $*
# alias gs git status
# alias gl git log --oneline -20
# Async shell commands
M-& or M-x async-shell-command # run command in background
M-x shell-command-on-region # pipe selection to shell command
# Compilation mode (run builds and capture output)
M-x compile # run make (or custom compile command)
M-x recompile # re-run last compile command
# After compilation:
# M-n / M-p = next/previous error
# Enter / g = jump to error
# C-c C-k = kill compilation
# Inkrementelle Regex-Suche
C-M-s # isearch-forward mit Regex
C-M-r # isearch-backward mit Regex
# Regex-Ersetzen
C-M-% # query-replace-regexp
# Emacs Regex-Syntax
\( \) # Capture-Gruppe (Referenzierung über \1, \2)
\| # Alternation (ODER)
\` # Anfang des Buffers
\' # Ende des Buffers
\b # Wortgrenze
\< # Wortanfang
\> # Wortende
\[ \] # Literale Klammern (im Gegensatz zu BRE/ERE)
\{m,n\} # Wiederholung (in String-Literalen \\{ verwenden)
# re-builder — interaktiver Regex-Tester
M-x re-builder # Regex gegen Buffer-Inhalt testen
# C-c C-c = Regex an replace senden
# C-c C-w = Regex kopieren
# Tab = Umschalten zwischen lesbarer und String-Syntax
# Bookmarks setzen
C-x r m # Bookmark an aktueller Position setzen
C-x r m <name> # Benanntes Bookmark setzen
# Zu Bookmarks springen
C-x r b # Zu Bookmark springen (Frage, welches)
C-x r b <name> # Direkt zu benanntem Bookmark springen
# Bookmarks auflisten
C-x r l # Alle Bookmarks in einem Buffer auflisten
# In der Bookmark-Liste:
# Enter = Zu Bookmark springen
# d = Zum Löschen markieren
# x = Markierte Bookmarks löschen
# r = Bookmark umbenennen
# o = In anderem Fenster springen
# Bookmark-Datei (Bookmarks bleiben über Sessions hinweg erhalten)
# Standardmäßig in ~/.emacs.d/bookmarks gespeichert
# Automatisch beim Beenden gespeichert
# Point-to-register (Cursorposition speichern)
C-x r SPC <r> # Aktuelle Position in Register r speichern
C-x r j <r> # Zu in Register r gespeicherter Position springen
# In Register kopieren
C-x r s <r> # Region in Register r kopieren
C-x r x <r> # Region in Register r kopieren (wie oben)
# Aus Register einfügen
C-x r i <r> # Inhalt von Register r an aktueller Position einfügen
# Frame/Window-Konfigurationsregister
C-x r w <r> # Fensterkonfiguration in Register r speichern
C-x r f <r> # Frame-Konfiguration in Register r speichern
C-x r j <r> # Fenster-/Frame-Konfiguration wiederherstellen
# Zahlenregister
C-u 100 C-x r i 1 # Inhalt von Register 1 insgesamt 100-mal einfügen
# Register anzeigen
M-x view-register # Inhalt eines Registers anzeigen
C-x r j <register> # Zu Register springen (funktioniert für alle Typen)
# Tastatur-Makro-Register
C-x ( # Definition eines Tastatur-Makros starten
C-x ) # Definition eines Tastatur-Makros beenden
C-x e # Letztes definiertes Makro ausführen
C-u 10 C-x e # Makro 10-mal ausführen
# Tastatur-Makros (F3/F4-Tasten in modernem Emacs)
F3 oder C-x ( # Makro-Aufnahme starten
F4 oder C-x ) # Makro-Aufnahme stoppen
F4 oder C-x e # Letztes Makro wiederholen
C-u 10 F4 # 10-mal wiederholen
C-u 0 F4 # Wiederholen bis zum Fehler (Makro stoppt bei Fehlschlag)
# Makro benennen
M-x name-last-kbd-macro # Dem letzten Makro einen Namen geben
# Es wird zu einem interaktiven Befehl, den man via M-x aufrufen kann
# Makros in Init-Datei speichern
M-x insert-kbd-macro # Makro-Definition als Lisp-Code einfügen
# Den Output zur init.el hinzufügen, um ihn über Sessions hinweg zu behalten
# Makro-Ring (falls mehrere Makros aufgenommen wurden)
C-x e dann e dann e # Jedes e spielt das nächste Makro im Ring ab
Rectangle editing works on column-aligned blocks of text — essential for editing tables, structured data, and code.
# Rechtecke ausschneiden (Kill) und einfügen (Yank)
C-x r k # Rechteck ausschneiden (rectangular region cut)
C-x r y # Rechteck einfügen (paste)
C-x r d # Rechteck löschen (nicht in den Kill-Ring kopieren)
C-x r M-w # Rechteck kopieren
# Rechteck-Operationen
C-x r o # Rechteck öffnen (Leerzeichen einfügen, Text nach rechts verschieben)
C-x r c # Rechteck leeren (durch Leerzeichen ersetzen)
C-x r t # String-Rechteck (String an der linken Seite des Rechtecks einfügen)
C-x r N # Zeilennummern an der linken Seite des Rechtecks einfügen
# Rectangle Mark Mode
C-x SPC # Rectangle Mark Mode aktivieren
# Dann Bewegungstasten nutzen, um das Rechteck zu definieren
# C-x r k verwenden, um es auszuschneiden
# Praktisches Beispiel: Zeilennummern einfügen
# 1. Zeilen mit C-SPC auswählen, nach unten bewegen
# 2. C-x r N zum Nummerieren verwenden
# 3. C-x r t "prefix: " zum Voranstellen von Text in jeder Zeile
TRAMP (Transparent Remote Access, Multiple Protocol) lets you edit files on remote servers as if they were local.
# SSH Remote-Dateien
C-x C-f /ssh:user@host:/path/to/file
# SSH mit benutzerdefiniertem Port
C-x C-f /ssh:user@host#2222:/path/to/file
# Sudo (als Root bearbeiten)
C-x C-f /sudo::/etc/nginx/nginx.conf
C-x C-f /sudo:root@localhost:/etc/hosts
# Docker-Container
C-x C-f /docker:container-name:/path/to/file
C-x C-f /docker:user@container:/path/to/file
# Andere Protokolle
C-x C-f /su: # su/sudo-Zugriff
C-x C-f /rsync:user@host:/path # rsync-basiert
C-x C-f /sftp:user@host:/path # SFTP
# TRAMP-Tipps
# - Die erste Verbindung ist langsam (wird für die weitere Nutzung gecacht)
# - Funktioniert mit allen Emacs-Features (grep, dired, magit, etc.)
# - M-x find-file-at-point (C-x C-f) vervollständigt TRAMP-Pfade
# - M-x tramp-cleanup-connection zum Zurücksetzen gecachter Verbindungen
# Org Capture — schnelle Notizerfassung
C-c c # Capture-Template öffnen
# Templates in init.el konfigurieren:
# (setq org-capture-templates
# '(("t" "Todo" entry (file+headline "~/org/todo.org" "Tasks")
# "* TODO %?\n %U\n %a")
# ("n" "Note" entry (file+datetree "~/org/notes.org")
# "* %? :note:\n %U")))
# Org Agenda
C-c a # Agenda-Dispatcher öffnen
# a = Agenda (Wochenansicht)
# t = Globale Todo-Liste
# s = Suche
# m = Tags abgleichen
# T = Benutzerdefinierte Todo-Abfrage
# Org Refile — Subtrees zwischen Dateien verschieben
C-c C-w # Subtree an eine andere Stelle verschieben (refile)
# Refile-Ziele konfigurieren:
# (setq org-refile-targets
# '((org-agenda-files :maxlevel . 3)))
# Zeiterfassung (Clocking)
C-c C-x C-i # Clock in (Timer für aktuelle Überschrift starten)
C-c C-x C-o # Clock out (Timer stoppen)
C-c C-x C-r # Clock-Report einfügen (Tabelle der aufgewendeten Zeit)
C-c C-x C-d # Clock-Tagebuch anzeigen
# Properties
C-c C-x p # Property setzen
C-c C-x p RET # Property entfernen
# Export-Backends
C-c C-e # Export-Dispatcher
# h h = HTML h o = HTML und im Browser öffnen
# l p = PDF l o = PDF und öffnen
# o o = ODT m m = Markdown
# b b = Beamer (Folien)
# Org-Babel — Quellcode in Dokumenten ausführen
C-c C-c # Code-Block unter dem Cursor ausführen
C-c C-v t # Anzeige des Code-Block-Inhalts umschalten
C-c C-v e # Code-Block erweitern
C-c C-v n # Zum nächsten Code-Block springen
C-c C-v p # Zum vorherigen Code-Block springen
# Beispiel für einen Code-Block:
# #+BEGIN_SRC bash
# echo "Hello from Org-Babel"
# #+END_SRC
# #+RESULTS:
# : Hello from Org-Babel
# Tags und Prioritäten
C-c C-q # Tags für aktuelle Überschrift setzen
C-c , # Priorität setzen (A/B/C)
S-UP/DOWN # Priorität zyklisch ändern
# VC Basis-Befehle (funktioniert mit git, hg, svn, bzr)
C-x v v # Nächste logische VC-Aktion ausführen (stage, commit, etc.)
C-x v = # Diff der aktuellen Datei anzeigen
C-x v d # VC-Verzeichnis öffnen (Liste aller Dateien mit Status)
C-x v l # Log anzeigen
C-x v u # Datei auf die letzte committed Version zurücksetzen
C-x v i # Datei für Versionsverwaltung registrieren
C-x v ~ # Vorherige Version der Datei aufrufen
C-x v c # Änderungen einchecken (commit)
C-x v r # Branch auschecken
C-x v s # Snapshot (Tag) erstellen
# Ediff — Gegenüberstellung (Side-by-Side Vergleich)
M-x ediff # Zwei Dateien vergleichen
M-x ediff-buffers # Zwei offene Buffer vergleichen
M-x ediff-files # Dateien vergleichen (fordert beide an)
M-x ediff3 # 3-Wege-Vergleich (Merge)
M-x ediff-revision # Datei mit einer git-Revision vergleichen
# In ediff:
# n / p = nächster/vorheriger Diff
# a / b = kopieren von A/B nach anderen
# = = Unterschiede hervorheben
# q = beenden
# mc/mark-more-like-this (Installation: mc/multiple-cursors Paket)
C-S-c C-S-c # Zeilen derselben Region gleichzeitig bearbeiten
M-x mc/edit-lines # mehrere Zeilen simultan bearbeiten
# Nächstes/vorheriges Vorkommen wie aktuelle Auswahl markieren
C-> oder M-x mc/mark-next-like-this # nächstes Vorkommen markieren
C-< oder M-x mc/mark-previous-like-this
C-M-> oder M-x mc/mark-all-like-this # alle Vorkommen markieren
# Multiple Cursors beenden
C-g # Multiple-Cursor-Modus beenden (ein einzelner Cursor bleibt)
# Praktisches Beispiel: Variable umbenennen
# 1. Cursor auf Variablennamen setzen
# 2. C-S-c C-S-c, um alle Zeilen zu markieren
# 3. Bearbeiten — Änderungen werden auf alle markierten Zeilen angewendet
# Installation: M-x package-install RET projectile RET
# Kernbefehle (Präfix: C-c p)
C-c p p # Projekt wechseln
C-c p f # Datei im Projekt finden
C-c p F # Datei im Projekt mit fd/rg finden
C-c p b # zum Projekt-Buffer wechseln
C-c p k # alle Projekt-Buffer schließen
C-c p d # Verzeichnis im Projekt finden
C-c p g # grep im Projekt ausführen
C-c p s # ag/rg im Projekt ausführen
C-c p o # multi-occur im Projekt ausführen
C-c p r # String im Projekt ersetzen
C-c p c # compile im Projekt ausführen
C-c p t # Projekt-Terminal öffnen
C-c p D # Projekt-Root in dired öffnen
C-c p 4 f # Datei in anderem Fenster finden
C-c p 4 b # Buffer in anderem Fenster wechseln
# Konfiguration (zu init.el hinzufügen)
# (projectile-mode 1)
# (setq projectile-completion-system 'ivy) ; oder 'helm oder 'default
# (define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)
# Ausdrücke auswerten
C-x C-e # eval-last-sexp (Ausdruck vor dem Cursor auswerten)
M-x eval-region # ausgewählte Region auswerten
M-x eval-buffer # gesamten Buffer auswerten
M-: # einzelnen Ausdruck im Minibuffer auswerten
# Hilfe und Dokumentation
C-h f # describe-function (Funktionsdokumentation anzeigen)
C-h v # describe-variable
C-h k # describe-key (anzeigen, was ein Keybinding tut)
C-h m # describe-mode (alle Bindings für den aktuellen Modus anzeigen)
C-h a # apropos (Befehle nach Stichwort suchen)
# Eine einfache Funktion schreiben
(defun insert-timestamp ()
"Fügt den aktuellen Zeitstempel an der Cursorposition ein."
(interactive)
(insert (format-time-string "%Y-%m-%d %H:%M:%S")))
# An eine Taste binden
(global-set-key (kbd "C-c t") 'insert-timestamp)
# Interaktive Funktionen können mit M-x aufgerufen werden
# Die Special Form (interactive) macht sie aufrufbar
# Gängige Elisp-Patterns
(message "Debug: value is %s" my-variable) ; Ausgabe in den *Messages* Buffer
(setq my-var "hello") ; Variable setzen
(let ((x 10) (y 20)) (+ x y)) ; lokale Bindungen (= 30)
(if (> x 5) "big" "small") ; Bedingung
(when (buffer-modified-p) (save-buffer)) ; when (wie if mit nur einem Zweig)
(unless (file-exists-p path) (error "Not found")) ; unless
(dolist (item my-list) (message "%s" item)) ; Liste iterieren
# Frames (Fenster auf OS-Ebene)
C-x 5 2 # neuer Frame
C-x 5 0 # aktuellen Frame schließen
C-x 5 o # zu anderem Frame wechseln
C-x 5 f # Datei in neuem Frame öffnen
C-x 5 d # dired in neuem Frame öffnen
# Tab-Bar-Modus (integriert seit Emacs 27)
M-x tab-bar-mode # Tab-Bar aktivieren/deaktivieren
C-x t 2 oder C-x T 2 # neuer Tab
C-x t 0 # aktuellen Tab schließen
C-x t k # Tab schließen (Frage, welcher)
C-x t o # zum nächsten Tab wechseln
C-x t p # zum vorherigen Tab wechseln
C-x t 1 # alle anderen Tabs schließen
C-x t f # Datei in neuem Tab öffnen
C-x t d # dired in neuem Tab öffnen
C-x t RET oder C-x t C-f # Datei öffnen und zu ihrem Tab wechseln
# Add MELPA to init.el (if not already present)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/") t)
# Then in Emacs:
M-x package-refresh-contents RET
M-x package-install RET <package-name> RET