Wenn ich mitten in einer laaaangen Saite bin, wie folgt
(setq Emacs-beta "Which keyboard shortcut to use for navigating out of a string")
Kann ich es kurz vor dem ersten "
(nach Emacs-Beta) mit einer Verknüpfung überspringen ?
key-bindings
string
Dieter.Wilhelm
quelle
quelle
C-r " C-b
.Antworten:
Emacs 25 oder neuer
Sie möchten,
C-M-u
welcher Befehl ausgeführt wirdbackward-up-list
.quelle
Emacs-24.5 -Q
in einer Schnur, aber ich bekomme mit CMu :up-list: Scan error: "Unbalanced parentheses"
?Es ist so machbar:
Im Lispy-Modus gelangen Sie durch Drücken [von zum Anfang der enthaltenen Liste und verlassen eine beliebige Zeichenfolge. Sobald Sie am Anfang der Liste angekommen sind, können Sie andere Teile leicht erreichen, um beispielsweise das Ende der
Emacs-beta
Drucklegung zu erreichen 2m.quelle
Dies ist tatsächlich eine sehr interessante Emacs Lisp-Programmierfrage. Wir können Forward-Char oder Backward-Char beibehalten, bis wir festgestellt haben, dass das Zeichen unter dem Cursor nicht Teil der Zeichenfolge ist.
Sie können die Schriftart verwenden, um zu entscheiden, ob sich das Zeichen in der Zeichenfolge befindet. Dies ist ein großartiger Trick, den ich aus Flyspell gelernt habe. Theoretisch ist es nicht perfekt, aber in der realen Welt funktioniert es mit fast allen Hauptmodi der Programmiersprache auf Emacs23, Emacs24, Emacs25 .
Hier ist der vollständige Code:
Verwendungszweck:
(goto-edge-by-comparing-font-face 1)
Gehe zum rechten Rand,(goto-edge-by-comparing-font-face -1)
gehe zum linken Randbackward-up-list
ist aus Anwendersicht nicht sehr zuverlässig, da es als generischer Befehl basierend auf konzipiert istscan-sexps
. Bei Codeif (true) { return 'hello world'; }
im js2-Modus wird beispielsweise der Fokus auf das{
Zeichen anstatt auf das erste einfache Anführungszeichen verschoben . Für Codeprintf("hello world")
im c ++ - Modus funktioniert es nicht. Ich habe mit Emacs 24.5 getestetquelle
backward-char
oderforward-char
wenn du den Cursor außerhalb der Kante bewegst.)
. Abhängig von den Modi hat Ihr Code unterschiedliche Verhaltensweisen.Hier ist noch ein Weg (den ich eher benutze), nur für Abwechslung. Die Lösung ist nicht spezifisch für Zeichenfolgen, funktioniert jedoch auch für diesen Anwendungsfall.
iy-go-to-char
(auch auf Melpa verfügbar).iy-go-to-char-backward
undiy-go-to-char
an Ihre bevorzugten Bindungen. Für die Zwecke dieser Erklärung, sagen wir , Sie gebundeniy-go-to-char-backward
zuC-c C-,
undiy-go-to-char
zuC-c C-.
.Wenn Sie sich jetzt in der Zeichenfolge befinden, würden Sie aufrufen
iy-go-to-char-backward
und eingeben"
.Das würde so aussehen
C-c C-, "
. Wenn Sieiy-go-to-char-continue-when-repeating
einstellent
(Standard), drücken"
erneut werden Sie zu einem nehmen"
char Auftreten vorher, und so weiter.Wenn Sie sich innerhalb der Zeichenfolge befinden und jetzt zum Ende der Zeichenfolge gehen möchten, würden Sie aufrufen
iy-go-to-char
und eingeben"
.Das würde so aussehen
C-c C-. "
. Wenn Sieiy-go-to-char-continue-when-repeating
einstellent
(Standard), drücken"
erneut gelangen Sie zum nächsten nehmen"
char Auftreten.quelle