Comment passer à la citation correspondante (double ou simple) d'une chaîne entre guillemets?

10

Lorsque le curseur sur un symbole de citation, comment passer à la citation d'appariement?

AhLeung
la source
1
Je n'ai pas Emacs maintenant pour essayer, mais j'imagine skip-syntax-forwardque ce serait le cas.
wvxvw
1
J'ai essayé (skip-syntax-forward "^\"")lequel peut passer au symbole de guillemet suivant, mais il ne saute pas le symbole échappé, par exemple, "string \" ne peut pas être ignoré? ".
AhLeung

Réponses:

9

M-C-f(ou M-C-right) obligé de le forward-sexpfaire.

Je vous suggère d'essayer toutes les commandes de mouvement bien connues avec le préfixe M-C-au lieu de C-.

  • M-C-b(ou M-C-left) donnebackward-sexp
  • M-C-u(ou M-C-up) donnebackward-up-list
  • M-C-n(ou M-C-down) donneforward-list
Tobias
la source
1
Vous devez également mentionner backward-sexplié à M-C-b.
Timm
@Timm J'ai pensé qu'il serait plutôt évident que l'on essaie les commandes de mouvement avec préfixe M-Cau lieu de C-si l'on sait M-C-f. D'accord - je vais le mentionner dans la réponse.
Tobias
1
Il semble que forward-sexpet backward-sexps'arrêter aux espaces blancs à l'intérieur d'une chaîne entre guillemets?
AhLeung
1

J'ai toujours du mal à me souvenir des liaisons pour forward-sexpet backward-sexp, et je voulais quelque chose qui fonctionnait plus comme le %fait le mode de commande de Vim. À un moment donné, j'ai ajouté cela à ma configuration (la docstring dit parens mais cela fonctionne pour n'importe quelle sorte de support ou de citation), et maintenant je suis satisfait:

;;; PAREN-BOUNCE
;;;; originally ganked from <http://elfs.livejournal.com/1216037.html>
(defun genehack/paren-bounce ()
  "Bounce from one paren to the matching paren."
  (interactive)
  (let ((prev-char (char-to-string (preceding-char)))
        (next-char (char-to-string (following-char))))
    (cond ((string-match "[[{(<\"']" next-char) (forward-sexp 1))
          ((string-match "[\]})>\"']" prev-char) (backward-sexp 1))
          (t (error "%s" "Not an expression boundary.")))))

;;;; bindings
(global-set-key (kbd "C-%")        'genehack/paren-bounce)
(global-set-key (kbd "C-5")        'genehack/paren-bounce)
genehack
la source
0

Je suggère d'utiliser le package smartparens à toutes ces fins. La brève introduction est ici: https://ebzzry.io/en/emacs-pairs/ .

Victor
la source
1
Veuillez fournir une réponse complète dans votre message. Les réponses en lien uniquement sont acceptables pour les commentaires, mais pas pour les réponses.
Dan
sp-beginning-of-sexpet sp-end-of-sexpsont très proches de ce que je veux. J'espère qu'ils peuvent être combinés en une seule fonction (par exemple, sp-matching-sexp) de sorte que je n'ai besoin que de me souvenir d'un raccourci clavier. J'essaierai peut-être d'écrire une fonction elisp. Faites-moi savoir si quelqu'un l'a déjà fait. Merci.
AhLeung
ebzzry.io/en/emacs-pairs/#keys ("CMf". sp-forward-sexp) ("CMb". sp-backward-sexp) Mais vous pouvez le définir différemment
Victor