Go to english version.
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.
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).
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.
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.
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.
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!
M-x hexl-mode
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
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.
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.
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
myGenTAGS.cmd
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).
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.
Dired-Mode einschalten mittels
C-x d directory <RET>
oder
M-x dired
i
zeigt ein Listing des Unterverzeichnisses wo der Cursor steht
und springt dorthinC-u C-SPC
holt den Cursor zurückMenu Regexp, Mark...
kann man Dateien per RegEx markieren,
z.B. markiert \.vmc$
Dateien mit Endung "vmc"Menu Operate, Search Files...
(dired-do-search) ermöglicht, nach
Inhalt zu suchen.! find "redetho" *
Effizient, wenn die Dateien in einem Verzeichnis oder einem Verzeichnisbaum sind:
M-x dired
\.ext$
alle Dateien
markieren, die auf ".ext" endenOperate..." > Query Replace in files
machen^
geht eine Dir-Ebene höher,a
geht eine Dir-Ebene tiefer, ohne einen neuen Buffer aufzumachen
(anders als f
oder RET)R
verschiebt markierte Dateien in VerzeichnisCustomize dired-listing-switches "-Al")
-A
lässt .
und ..
weg-l
muss immer dabei seinDired nutzt eine Lisp-Emulation von ls. Meine Präferenzen:
ls-lisp-dirs-first t
ls-lisp-format-time-list (quote ("%Y-%m-%d %H:%M:%S" "%Y-%m-%d %H:%M:%S")))
ls-lisp-use-localized-time-format t
Die folgenden Beispiele sind Source-Code-Änderungen. Sie gelten auch
für M-x tags-query-replace
, um Strings in mehreren Dateien zu ersetzen.
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
Von
aOutVol
nach
MA_A_OutVol
Q:
\(\s-\)a\([A-Z][a-zA-Z0-9]+\)
R:
\1MA_A_\2
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"
Q:
abc[ ]efg
; einmal oder zweimal oder dreimal, je nach Hierarchy-Stufe
M-j
neue Zeile im Kommentar:
M-;
Kommentar einfügen oder ausrichten
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".
M-x set-buffer-file-coding-system
dann: unix
oder dos
oder mac
Angeblich geht auch C-x RET f
C-x SPC dann mit Cursor-Tasten aufziehen, dann C-c
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
)
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
Dazu nutzt man
M-x auto-revert-mode
Siehe http://www.gnu.org/software/emacs/manual/html_mono/efaq-w32.html
Sprache ändern mit
M-x ispell-change-dictionary
(M-x isp-c-d
geht auch), dann z.B. "deutsch"
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.
Mit RegExp suchen nach
[[:nonascii:]]
Das setzt den Cursor hinter das gefundene Zeichen.
init.el
nochmal laden
M-: (load user-init-file)
M-x eval-buffer
Entweder im *scratch*
-Buffer
(require 'xyz)
eingeben, oder
M-x lisp-interaction-mode