Come saltare alla virgoletta (doppia o singola) corrispondente di una stringa tra virgolette?


10

Quando il cursore su un simbolo di virgoletta, come saltare alla citazione di accoppiamento?


1
Non ho Emacs ora da provare, ma immagino che skip-syntax-forwardlo farebbe.
wvxvw,

1
Ho provato (skip-syntax-forward "^\"")quale può passare al simbolo della doppia virgoletta successiva, ma non salta il simbolo di escape, ad esempio, "stringa \" non può essere saltato? ".
AhLeung,

Risposte:


9

M-C-f(o M-C-right) vincolato a forward-sexpfarlo.

Ti suggerisco di provare tutti i comandi di movimento noti con il prefisso M-C-anziché C-.

  • M-C-b(o M-C-left) dàbackward-sexp
  • M-C-u(o M-C-up) dàbackward-up-list
  • M-C-n(o M-C-down) dàforward-list

1
Dovresti anche menzionare backward-sexplegato a M-C-b.
Timm,

@Timm Ho pensato che sarebbe piuttosto ovvio che si provino i comandi di movimento con prefisso M-Canziché C-se si sa M-C-f. Va bene - lo citerò nella risposta.
Tobias,

1
Sembra che forward-sexpe backward-sexpfermarsi a spazi bianchi all'interno di una stringa tra virgolette?
AhLeung,

1

Ho sempre problemi a ricordare i collegamenti per forward-sexpe backward-sexp, e volevo qualcosa che funzionasse più come %nella modalità di comando di Vim. Ad un certo punto, l'ho aggiunto alla mia configurazione (il docstring dice parens ma funziona per qualsiasi tipo di parentesi o citazione), e ora sono soddisfatto:

;;; 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)

0

Suggerisco di usare il pacchetto smartparens per tutti questi scopi. Una breve introduzione è qui: https://ebzzry.io/en/emacs-pairs/ .


1
Fornisci una risposta completa nel tuo post. Le risposte solo al collegamento vanno bene per i commenti, ma non per le risposte.
Dan

sp-beginning-of-sexpe sp-end-of-sexpsono molto vicino a quello che voglio. Spero che possano essere combinati in un'unica funzione (ad es. sp-matching-sexp) In modo da ricordare solo un keybinding. Forse proverò a scrivere una funzione elisp. Fammi sapere se qualcuno l'ha fatto prima. Grazie.
AhLeung,

ebzzry.io/en/emacs-pairs/#keys ("CMf". sp-forward-sexp) ("CMb". sp-backward-sexp) Ma puoi impostarlo diversamente
Victor
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.