Jak przejść do pasującego (podwójnego lub pojedynczego) cytatu cytowanego ciągu?

10

Gdy najedziesz kursorem na jeden symbol cytatu, jak przejść do cytowania parowania?

AhLeung
źródło
1
Nie mam teraz Emacsa do wypróbowania, ale wyobrażam sobie, skip-syntax-forwardże to zrobiłbym.
wvxvw
1
Próbowałem, (skip-syntax-forward "^\"")który może przeskoczyć do następnego podwójnego cudzysłowu, ale nie pomija znaku zmiany znaczenia, np. „Ciąg \” nie może zostać pominięty? ”
AhLeung 28.09.17

Odpowiedzi:

9

M-C-f(lub M-C-right) forward-sexppowinien to zrobić.

Sugeruję wypróbowanie wszystkich dobrze znanych poleceń ruchu z prefiksem M-C-zamiast C-.

  • M-C-b(lub M-C-left) dajebackward-sexp
  • M-C-u(lub M-C-up) dajebackward-up-list
  • M-C-n(lub M-C-down) dajeforward-list
Tobiasz
źródło
1
Powinieneś również wspomnieć o backward-sexpzobowiązaniu do M-C-b.
Timm
@ Timim Myślałem, że byłoby raczej oczywiste, że ktoś wypróbowuje polecenia ruchu z prefiksem M-Czamiast, C-jeśli się wie M-C-f. Okej - wymienię to w odpowiedzi.
Tobias
1
Wydaje się, że forward-sexpi czy backward-sexpzatrzymać się na białych znakach w cytowanym ciągu?
AhLeung,
2

Zawsze mam problem z zapamiętywaniem powiązań dla forward-sexpi backward-sexp, i chciałem czegoś, co działałoby bardziej jak %robi w trybie poleceń Vima. W pewnym momencie dodałem to do mojej konfiguracji (docstring mówi parens, ale działa dla dowolnego nawiasu lub cytatu), a teraz jestem zadowolony:

;;; 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)
genhack
źródło
0

Sugeruję używanie pakietu smartparens do wszystkich takich celów. Krótkie wprowadzenie znajduje się tutaj: https://ebzzry.io/en/emacs-pairs/ .

Zwycięzca
źródło
1
Podaj pełną odpowiedź w swoim poście. Odpowiedzi tylko z linkiem są odpowiednie dla komentarzy, ale nie dla odpowiedzi.
Dan
sp-beginning-of-sexpi sp-end-of-sexpsą bardzo blisko tego, czego chcę. Mam nadzieję, że można je połączyć w jedną funkcję (np. sp-matching-sexp), Więc muszę zapamiętać tylko jedno skrót klawiszowy. Może spróbuję napisać funkcję elisp. Daj mi znać, jeśli ktoś to zrobił wcześniej. Dzięki.
AhLeung,
ebzzry.io/en/emacs-pairs/#keys („CMf”. sp-forward-sexp) („CMb”. sp-backward-sexp) Ale możesz to inaczej
Victor