Как перейти к соответствующей (двойной или одинарной) кавычке строки в кавычках?


10

Когда курсор на один символ кавычки, как перейти к кавычки спаривания?


1
У меня нет Emacs сейчас, чтобы попробовать, но я думаю, skip-syntax-forwardчто сделал бы это.
wvxvw

1
Я пробовал, (skip-syntax-forward "^\"")который может перейти к следующему символу двойной кавычки, но он не пропускает экранированный символ, например, «строка \» не может быть пропущена? ».
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.
Тимм

@ Тимм Я подумал, что было бы довольно очевидно, что кто-то пробует команды движения с префиксом, M-Cа не C-если знает M-C-f. Хорошо, я упомяну это в ответе.
Тобиас

1
Кажется, что forward-sexpи backward-sexpостанавливаться на пробелах внутри строки в кавычках?
AhLeung

1

У меня всегда возникают проблемы с запоминанием привязок для forward-sexpи backward-sexp, и я хотел что-то, что работало бы больше, %чем в командном режиме Vim. В какой-то момент я добавил это в свою конфигурацию (строка документации говорит parens, но она работает для любого типа скобок или кавычек), и теперь я удовлетворен:

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