Menu

Go to english version.

Mein Emacs How-To

Emacs Logo

Ich habe Emacs gelegentlich schon seit Version 20.7 benutzt. Seit 2016-11 nutze ich Emacs 25.1 regelmäßig, jetzt 27.2. Dieses Verzeichnis enthält Dokumente, in denen ich mitteile

Die Emacs-Dokumentation, sowohl die eingebaute als auch online, ist sehr umfassend und detailliert. Ich habe einige Dinge aufgeschrieben, während ich gelernt habe. Dies teile ich unten mit. Die Aufzeichnungen könnten für Andere nützlich sein, die ähnliche Anforderungen haben wie ich.

Ansicht

Emacs "Frames" nutzen statt Emacs "Windows"

Ich erkenne an, dass Emacs den klassischen Betrieb im Terminal sehr gut unterstützt, indem er "Windows" anbietet. Ich nütze Emacs aber vom MS Windows-Desktop aus und ich bin gewöhnt, mit den eingebauten "Windows" zu arbeiten. Diese heißen in Emacs ‑ verwirrenderweise ‑ "Frames".

Ich habe Emacs so angepasst (Download meiner init.el), dass er standardmäßig "Frames" verwendet (zum Beispiel wenn er ein *help* -Fenster öffnet).

Zoom

C-x C-+ Font größer, danach C-+ zum Wiederholen. Wirkt nur auf akt. Buffer

C-x C-- Font kleiner, ditto

C-x C-0 auf Standard-Fontgröße zurückstellen.

Navigation

C-x r SPC r speichert die Cursor-Position in "Register" r (ein Buchstabe)

C-x r j r springt zurück

Register sind flüchtig. "Bookmarks" werden gespeichert.

Text-Ausrichtung

Ein Emacs-Absatz (Paragraph) wird durch einen leere Zeile abgeschlossen.

M-q "fill" bricht jede Zeile eines Absatzes (Paragraph) so um, dass sie nicht zu lang ist. Wo rechts umgebrochen wird, bestimmt die Variable fill-column, die standardmäßig auf 70 Buchstaben steht (genauer: der rechte Rand ist 70).

Die Variable comment-auto-fill-only-comments auf non-nil zu setzen, hatte leider nicht den Effekt, dass ;;; als Assembler-Kommentare dann automatisch umgebrochen werden.

Modes, die ich oft verwende

Anzeigen, wo ein Such-String in einem Emacs-Buffer vorkommt

M-x occur

zeigt alle Stellen, in einem eigenen Fenster, an denen der Suchstring vorkommt. Im Fenster sind Verweise, die man anklicken kann, um an die Stelle zu springen. Allerdings geht M-x occur nur über einen Buffer.

Achtung: M-x occur-mode macht irgendwas, was ich noch nicht verstehe!

Eine Datei hexadezimal anzeigen und binär editieren

M-x hexl-mode

Emacs serielles Terminal

Ich brauche oft ein serielles Terminal, um mich zu Debug-Zwecken per RS232-Schnittstelle an einen Mikrocontroller anzuschließen. Da ich Windows verwende, gibt es keine mitgelieferte Anwendung, seit Hyperterm nicht mehr dabei ist. Passenderweise ist Terminal-Software in Emacs eingebaut und kann eingeschaltet werden mit:

M-x serial-terminal

Siehe http://www.gnu.org/software/emacs/manual/html_node/emacs/Serial-Terminal.html

In Dateien suchen

Tools > Search Files (grep) ..., und eingeben

grep -nH -r --include='*.org' regexp .

Das sucht rekursiv (-r) in allen Dateien mit Endung org nach der Zeichenkette regexp. Die -n Option bringt anklickable Links in einem Buffer, der die grep-Ausgabe enthält. In meiner Emacs-Installation erscheint das Kommando grep -nH im Minibuffer, wenn ich den Menupunkt klicke. Den Rest tippe isch dazu.

Dateien finden, die eine zeichenkette nicht enthalten:

grep -nH -r -L --include='*.org' string .

Unter Linux funktioniert grep in Emacs sofort. Unter Windows musste ich git for Windows installieren, damit Werkzeuge wie bash und in Emacs verfügbar sind. Zusätzlich musste ich in init.el

(setq grep-use-null-device nil)

angeben, damit grep sich nicht wegen des "empty directory issue" beklagt.

In mehreren Dateien Suchen und Ersetzen

Mittels "TAGS"

TAGS verwenden

Wenn man in einer offenen Datei (die stellt das aktuelle Verzeichnis ein!)

M-x tags-search

macht, will Emacs auch eine TAGS-Datei einlesen. Wenn die TAGS-Datei nicht im selben Verzeichnis ist, wie die Datei, kann man einen relativen oder absoluten Pfad eingeben, z.B. ../TAGS

M-,

sucht nach dem nächsten Vorkommen des Strings.

Analog:

M-x tags-query-replace

sucht und ersetzt.

Um eine andere TAGS-Datei zu verwenden, gibt es

M-x visit-tags-table

Das Verzeichnis kann man in Menu, Files, Open Directory... einstellen. Der Pfadtrenner ist aber / , auch unter Windows.

Wie man eine TAGS-Datei erzeugt

Um das Emacs-"TAGS"-Feature zu nutzen, muss Emacs eine Datei TAGS zugreifen können. So kann man sie erzeugen:

src\DisplayC-1.asm
..\Common\portab.inc
..\Common\trUtil.inc
..\Common\trStdlib.inc
..\Common\trFIFO.inc

Das Script besteht aus zwei Zeilen:

TYPE flist.txt | C:\Users\xyz\OneDrive\myPrograms\emacs-25.1\bin\etags.exe -
PAUSE

Das erzeugt die Datei "TAGS" im gleichen Directory. Ersetzen Sie den Pfad oben mit dem Pfad, wo Sie Emacs installiert haben. (siehe auch Vorgehen unter Windows).

Groß-/Klein-Schreibung bei der Suche unterscheiden

In der Standardeinstellung behandelt Regexp groß und klein gleich! Das steuert die Variable tags-case-fold-search

Siehe auch https://www.gnu.org/software/emacs/manual/html_node/emacs/Tags-Search.html

In älteren Emacs-Versionen, z.B. 20.7, gibt es tags-case-fold-search nicht, nur case-fold-search. Aber das hat ‑ scheint es ‑ den gleichen Effekt.

Mit dem Dired-Mode in Dateien suchen

Dired-Mode einschalten mittels

C-x d directory <RET>

oder

M-x dired

Effizient, wenn die Dateien in einem Verzeichnis oder einem Verzeichnisbaum sind:

Meine Dired Anpassungen

Customize dired-listing-switches "-Al")

Dired nutzt eine Lisp-Emulation von ls. Meine Präferenzen:

Suchen und Ersetzen mit Regular Expressions

Die folgenden Beispiele sind Source-Code-Änderungen. Sie gelten auch für M-x tags-query-replace, um Strings in mehreren Dateien zu ersetzen.

Beispiel 1 - Umordnen von Bestandteilen

Um

xyz_Q_OFFS oder xyz_D_OFFS

in

Q_xyz_OFFS oder D_xyz_OFFS zu ändern:

Query regexp:

\([A-Z0-9]+\)_\([DQ]\)_OFFS

Replace regexp:

\2_\1_OFFS

Beispiel 2 - Teil-Ersetzung

Von

aOutVol

nach

MA_A_OutVol

Q:

\(\s-\)a\([A-Z][a-zA-Z0-9]+\)

R:

\1MA_A_\2

Beispiel 3 - Groß/Kleinschreibung ändern

Von z.B.

EB_VolAttOsc1_OFFS

nach

EB_VOLATTOSC1_OFFS

d.h. nach Großschreibung

Q:

\(EB_\)\([A-Z][a-zA-Z0-9]+\)\(_OFFS\)

R:

\1\,(upcase \2)\3

Ähnlich: "downcase"

Beispiel 4 - String mit eingeschlossenen Blanks

Q: abc[ ]efg

ASM-Mode mit meinen AVR-Änderungen

Kommentare

; einmal oder zweimal oder dreimal, je nach Hierarchy-Stufe

M-j neue Zeile im Kommentar:

M-; Kommentar einfügen oder ausrichten

Sonderzeichen einfügen

Um Sonderzeichen zu verwenden, empfehle ich UTF-8 als Datei-Kodierung. Ein beliebiges Unicode-Zeichen kann mittels

C-x 8 RET code RET

eingegeben werden. Für code kann eine Hexadezimalzahl angegeben werden oder auch ein Name, der mit Tab auch vervollständigt werden kann. Achtung: nachdem es sehr viele UTF-8/Unicode-Zeichen gibt, sollte man die Suche schon etwas eingrenzen.

Beispiele:

Meine Beschreibung Glyph Hexadez. Name
Einfacher, kurzer, dünner Pfeil nach links 2190 LEFTWARDS ARROW
Einfacher, kurzer, dünner Pfeil nach oben 2191 UPWARDS ARROW
Einfacher, kurzer, dünner Pfeil nach rechts 2192 RIGHTWARDS ARROW
Einfacher, kurzer, dünner Pfeil nach unten 2193 DOWNWARDS ARROW
Einfacher, kurzer, dünner Pfeil nach rechts und links 2194 LEFT RIGHT ARROW
Festes Leerzeichen   00A0 NO-BREAK SPACE
Festes Minus 2011 NON-BREAKING HYPHEN
Bedarfstrennstrich ­ 00AD SOFT HYPHEN
Minus das zu + passt 2212 MINUS SIGN
Plus-minus ± 00B1 PLUS-MINUS SIGN
Ungefähr 2248 ALMOST EQUAL TO
Punkt-Operator 22C5 DOT OPERATOR
Mal-Zeichen × 00D7 MULTIPLICATION SIGN
Kleiner-gleich 2264 LESS-THAN OR EQUAL TO
Größer-gleich 2265 GREATER-THAN OR EQUAL TO
Mikro µ 00B5 MICRO SIGN
Grad ° 00B0 DEGREE SIGN
EUR Währungssymbol 20AC EURO SIGN

Festes Leerzeichen, festes Minus und Bedarfstrennstrich habe ich mir auf Funktionstasten gelegt (siehe mein init.el), damit ich sie rasch einfügen kann.

Wenn man UTF-8/Unicode-Zeichen nutzt, kann man mit C-u C-x = überprüfen, welchen Font EMACS nimmt um ein Zeichen (Glyph) darzustellen. Der Cursor muss auf dem Zeichen stehen.

Mir fiel auf, dass EMACS v25.1 lahm wurde, wenn man bestimmte Zeichen nutzte. Unter Windows 10 waren die Fonts die EMACS nutzt zum Beispiel "MS Gothic" und "Malgun Gothic", obwohl ich "Consolas" als Default-Font gesetzt hatte. Mit anderen Worten: wenn EMACS das fragliche Glyph in Consolas findet, ist die Geschwindigkeit normal. Wenn EMACS auf die anderen Fonts zugreifen musste, war die Geschwindigkeit schlecht.

Unter Windows kann man sich die Glyphen, die ein Font bereitstellt, mit dem Zeichentabelle-Programm (Character Map) anzeigen lassen

Unter Linux, sind z.B. "Inconsolata" und "DejaVu Sans Mono" Alternativen zu "Consolas".

Verschiedenes

Zeilenende bestimmen

M-x set-buffer-file-coding-system

dann: unix oder dos oder mac

Angeblich geht auch C-x RET f

Rechteck kopieren

C-x SPC dann mit Cursor-Tasten aufziehen, dann C-c

Beautify

Die Datei öffnen und dann ganzen Abschnitt einrücken:

M-x find-file /path/to/file RET

C-x h (M-x mark-whole-buffer)

C-M-\ (M-x indent-region)

Versions-Verwaltung (VC)

VC ist automatisch eingeschaltet, wenn man eine Datei öffnet, deren Versionen von einem System verwaltet werden. Um VC ganz auszuschalten, kann man die Emacs-Variable vc-handled-backends auf nil setzen. (siehe Customizing VC).

Aus https://www.gnu.org/software/emacs/manual/html_mono/emacs.html

Datei-Änderungen überwachen, die außerhalb von Emacs geschehen

Dazu nutzt man

M-x auto-revert-mode

Siehe http://www.gnu.org/software/emacs/manual/html_mono/efaq-w32.html

Rechtschreib-Prüfung

Sprache ändern mit M-x ispell-change-dictionary (M-x isp-c-d geht auch), dann z.B. "deutsch"

Datei-Kodierung richtigstellen

Falls die Emacs-Heuristik versagt, die die Datei-Kodierung erraten will:

C-x RET r oder M-x revert-buffer-with-coding-system.

Siehe (info "(emacs) Specify Coding") für Details.

Nicht ASCII-Zeichen finden

Mit RegExp suchen nach

[[:nonascii:]]

Das setzt den Cursor hinter das gefundene Zeichen.

init.el nochmal laden

M-: (load user-init-file)

Emacs Lisp-Code nochmal laden

Emacs-Lisp "nachladen"

Entweder im *scratch*-Buffer (require 'xyz) eingeben, oder M-x lisp-interaction-mode

Siehe auch


Last change: 2023-07-12
© 2002-2023 Dr. Thomas Redelberger redethogmx.de

Close menu