Як перейти до збігаючої (подвійної чи одиничної) лапки цитованого рядка?


10

Як курсор на один символ цитати, як перейти до пари цитат?


1
Зараз у мене немає Emacs для того, щоб спробувати, але я б уявив, skip-syntax-forwardщо зробив би це.
wvxvw

1
Я спробував, (skip-syntax-forward "^\"")який може перейти до наступного символу подвійної цитати, але він не пропускає символ, що уникнув, наприклад, "string \" неможливо пропустити? "
AhLeung

Відповіді:


9

M-C-f(або M-C-right) зобов'язаний forward-sexpробити це.

Я пропоную вам спробувати всі добре відомі команди руху з префіксом M-C-замість C-.

  • M-C-b(або M-C-left) даєbackward-sexp
  • M-C-u(або M-C-up) даєbackward-up-list
  • M-C-n(або M-C-down) даєforward-list

1
Ви також повинні згадати, що backward-sexpзв'язані M-C-b.
Тімм

@Timm Я подумав, що буде досить очевидно, що люди намагаються рухати команди з префіксом M-Cзамість того, C-якщо знають M-C-f. Гаразд - це я згадаю у відповіді.
Тобіас

1
Здається, що forward-sexpі backward-sexpзупинитися на пробілах всередині цитованого рядка?
AhLeung

2

У мене завжди виникають труднощі з запам'ятовуванням прив’язок для forward-sexpі backward-sexp, і я хотів щось, що працювало більше, як %це робиться в командному режимі Vim. У якийсь момент я додав це до свого конфігурації (у docstring йдеться про паренс, але він працює для будь-якого типу дужок чи цитат), і тепер я задоволений:

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

Я пропоную використовувати пакет Smartparens для всіх таких цілей. Короткий вступ тут: https://ebzzry.io/en/emacs-pairs/ .


1
Будь ласка, надайте повну відповідь у своєму дописі. Відповіді лише для посилань добре для коментарів, але не для відповідей.
Дан

sp-beginning-of-sexpі sp-end-of-sexpдуже близькі до того, що я хочу. Я сподіваюся, що вони можуть бути об'єднані в одну функцію (наприклад, sp-matching-sexp), так що мені потрібно запам’ятати лише одне прив'язування клавіш. Можливо, я спробую написати функцію elisp. Дайте мені знати, чи хтось робив це раніше. Дякую.
AhLeung

ebzzry.io/en/emacs-pairs/#keys ("CMf". sp-forward-sexp) ("CMb". sp-backward-sexp) Але ви можете встановити інше
Віктор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.