Es gibt eine Reihe von Befehlen in Emacs, die sich auf "Wörter" beziehen. Beispiele hierfür sind forward-word
, kill-word
, upcase-word
, mark-word
, transpose-words
usw. Der Begriff „Wort“ scheint ein wenig zwischen den Befehlen zu variieren. Beispiel: forward-word
Stoppt bei einem Unterstrich in einem Wort (z. B. foo_bar
), mark-word
hört aber nicht bei dem Unterstrich auf.
Ist es möglich, die Definition von "Wort" im Prog-Modus zu ändern, sodass Emacs die entsprechenden Wortgrenzen für die Syntax der aktuellen Sprache verwendet?
Wenn ich in c-mode
bin, möchte ich forward-word
Unterstriche überspringen, und wenn ich in lisp-mode
bin, möchte ich forward-word
sowohl Bindestriche als auch Unterstriche überspringen, usw.
quelle
C-M-f
ist gebunden anforward-sexp
und verhält sich nicht wie das, was Sie beschreiben. Sie haben Recht, ich möchte nur mit Symbolen navigieren, aber ich sehe diese Option nicht.forward sexp
ist im Wesentlichen dieforward-symbol
meiste Zeit mit der zusätzlichen Vielseitigkeit, auch über passende Zahnspangen zu gehen. Sie sollten es eine Chance geben.forward-sexp
eine enge Annäherung an istforward-symbol
. Für den Anfang kann es Sie verwirrend über ganze Funktionen springen und Sie Hunderte von Zeilen von wo Sie angefangen haben landen. Außerdem werden Argumentlisten usw. übersprungen. Versuchen Sie Folgendes: Stellen(global-set-key [remap list-buffers] 'ibuffer)
Sie den Cursor mit dem folgenden Lisp-Code in die Mitte des Wortesremap
und führen Sie ihnforward-sexp
einige Male aus. Es löst einen Fehler aus, wenn es das Schließen erreicht]
. Nein Danke.superword-mode
das dein Typ.C-M-f
undC-M-t
auf Symbole einwirken sollen (sie wirken auf Sexps). Ich werde diesen Eindruck korrigieren. Sie können sich aber auf jeden Fallforward-symbol
an einen beliebigen Schlüssel binden , wenn Sie ihn für besonders nützlich halten. Es gibt keinetranspose-symbols
, aber Sie können auch eine schreiben, wenn Sie dies für nützlich halten.Schauen Sie sich
superword-mode
und ansubword-mode
. Superword behandelt Unterstriche als Teil eines Wortes anstelle einer Grenze undfoo_bar
würde daher als ein einzelnes Wort behandelt .Subword macht das Gegenteil, aber für camelCase, so
fooBar
wird es als zwei Wörter anstelle von einem behandelt.Es klingt wie das Verhalten Sie wollen , ist
cc-mode
zu verwendensuperword-mode
.Ich würde empfehlen, die Quelle durchzulesen
subword-mode
, denn auch wenn diese beiden Modi nicht genau das tun, was Sie wollen, sollten sie Ihnen zeigen, wie Sie das Worterkennungsverhalten ändern können.Längere Diskussion über Emacsredux und Ergomacs .
quelle
superword-mode
schön spielenparedit
?paredit-forward-kill-word
Löscht beispielsweise nicht das gesamte Wort (mit Unterstrichen), wenn diesesuperword-mode
Option aktiviert ist.paredit
respektiert dies, also denke ich, dass es das tut, was von ihm verlangt wird.paredit-forward-kill-word
tötet nicht das gleiche Wort wiesuperword-mode
.paredit-forward-kill-word
und es sieht so aus, als würde es sein eigenes Parsen durchführen. Könnte also in der Lage sein, das auszutauschen, aber wahrscheinlich nicht.Wenn ich Ihre Frage verstanden habe, können Sie die Sprachsyntaxtabelle ändern, z. B. für c ++:
(modify-syntax-entry ?_ "w" c++-mode-syntax-table)
M-x apropos
dann sollte dir das nachschlagen der syntax-tabelle auch helfen.quelle