Bagaimana cara melompat ke kutipan yang cocok (ganda atau tunggal) dari string yang dikutip?

10

Saat kursor berada pada satu simbol kutipan, bagaimana cara melompat ke quote berpasangan?

Ahung
sumber
1
Saya tidak punya Emacs sekarang untuk dicoba, tetapi saya bayangkan skip-syntax-forwardakan melakukannya.
wvxvw
1
Saya mencoba (skip-syntax-forward "^\"")yang dapat melompat ke simbol tanda kutip ganda berikutnya, tetapi tidak melewati simbol lolos, misalnya, "string \" tidak dapat dilewati? ".
AhLeung

Jawaban:

9

M-C-f(atau M-C-right) pasti forward-sexpharus melakukan itu.

Saya sarankan Anda mencoba semua perintah gerak yang terkenal dengan awalan M-C-alih-alih C-.

  • M-C-b(atau M-C-left) memberibackward-sexp
  • M-C-u(atau M-C-up) memberibackward-up-list
  • M-C-n(atau M-C-down) memberiforward-list
Tobias
sumber
1
Anda juga harus menyebutkan backward-sexpterikat M-C-b.
Timm
@Timm, saya pikir akan lebih jelas bahwa seseorang mencoba perintah gerak dengan awalan M-Calih-alih C-jika ada yang tahu M-C-f. Oke - saya akan menyebutkannya dalam jawaban.
Tobias
1
Tampaknya forward-sexpdan backward-sexpberhenti di spasi putih di dalam string yang dikutip?
AhLeung
1

Saya selalu mengalami kesulitan mengingat ikatan untuk forward-sexpdan backward-sexp, dan saya menginginkan sesuatu yang bekerja lebih seperti %dalam mode perintah Vim. Pada titik tertentu, saya menambahkan ini ke konfigurasi saya (docstring mengatakan parens tetapi berfungsi untuk segala macam tanda kurung atau kutipan), dan sekarang saya puas:

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

Saya sarankan menggunakan paket smartparens untuk semua tujuan tersebut. Pengantar singkat ada di sini: https://ebzzry.io/en/emacs-pairs/ .

Pemenang
sumber
1
Harap berikan jawaban lengkap di pos Anda. Tanggapan khusus tautan boleh saja untuk komentar, tetapi tidak untuk jawaban.
Dan
sp-beginning-of-sexpdan sp-end-of-sexpsangat dekat dengan apa yang saya inginkan. Saya berharap bahwa mereka dapat digabungkan menjadi satu fungsi (misalnya, sp-matching-sexp) sehingga saya hanya perlu mengingat satu keybinding. Mungkin saya akan mencoba menulis fungsi elisp. Beritahu saya jika ada yang melakukan itu sebelumnya. Terima kasih.
AhLeung
ebzzry.io/en/emacs-pairs/#keys ("CMf". sp-forward-sexp) ("CMb". sp-backward-sexp) Tetapi Anda dapat mengaturnya berbeda
Victor