Quand je suis au milieu d'une chaîne looooong, comme ce qui suit
(setq Emacs-beta "Which keyboard shortcut to use for navigating out of a string")
Puis-je en sauter juste avant le premier "
(après Emacs-beta) avec un raccourci?
key-bindings
string
Dieter.Wilhelm
la source
la source
C-r " C-b
.Réponses:
Emacs 25 ou plus récent
Vous voulez
C-M-u
qui exécute la commandebackward-up-list
.la source
Emacs-24.5 -Q
une chaîne, mais je reçois avec CMu:up-list: Scan error: "Unbalanced parentheses"
?C'est faisable comme ça:
En mode lispy , appuyer sur [vous amènera au début de la liste contenant, en quittant n'importe quelle chaîne. Une fois que vous êtes au début de la liste, vous pouvez accéder facilement à d'autres parties, par exemple, pour atteindre la fin de la
Emacs-beta
presse 2m.la source
Il s'agit en fait d'une question de programmation Emacs Lisp très intéressante. Nous pouvons conserver les caractères avant ou arrière jusqu'à ce que nous trouvions que le caractère sous le curseur ne fait pas partie de la chaîne.
Vous pouvez utiliser le visage de la police pour décider si le caractère se trouve à l'intérieur de la chaîne. C'est un excellent truc que j'ai appris de flyspell. En théorie, ce n'est pas parfait, mais dans le monde réel, il fonctionne avec presque tous les principaux modes de langage de programmation sur Emacs23, Emacs24, Emacs25 .
Voici le code complet:
Usage:
(goto-edge-by-comparing-font-face 1)
aller au bord droit,(goto-edge-by-comparing-font-face -1)
aller au bord gauchebackward-up-list
n'est pas très fiable du point de vue de l'utilisateur car il est conçu comme une commande générique basée surscan-sexps
. Par exemple, pour le codeif (true) { return 'hello world'; }
en mode js2, il déplacera le focus sur le{
caractère au lieu du premier caractère de guillemet simple. Pour le codeprintf("hello world")
en mode c ++, cela ne fonctionnera pas. J'ai testé avec Emacs 24.5la source
backward-char
ouforward-char
si vous déplacez le curseur hors du bord.)
. Ainsi, selon les modes, votre code a des comportements différents.Voici une autre façon (que j'ai tendance à utiliser plus) juste pour la variété. La solution n'est pas spécifique aux chaînes mais elle fonctionne également pour ce cas d'utilisation.
iy-go-to-char
(également disponible sur Melpa).iy-go-to-char-backward
etiy-go-to-char
à vos fixations préférées. Pour cette explication, disons que vous êtes liéiy-go-to-char-backward
àC-c C-,
etiy-go-to-char
àC-c C-.
.Maintenant, si vous êtes à l'intérieur de la chaîne, vous appelez
iy-go-to-char-backward
et tapez"
.Cela ressemblerait
C-c C-, "
. Si vous aveziy-go-to-char-continue-when-repeating
défini surt
(par défaut),"
une nouvelle pression vous amènera à une"
occurrence char avant, et ainsi de suite.Si vous êtes à l'intérieur de la chaîne et si vous voulez maintenant aller à la fin de la chaîne, vous appelez
iy-go-to-char
et tapez"
.Cela ressemblerait
C-c C-. "
. Si vous aveziy-go-to-char-continue-when-repeating
défini surt
(par défaut),"
une nouvelle pression vous amènera à l'"
occurrence de caractère suivante.la source