วิธีข้ามการอ้างอิง (คู่หรือเดี่ยว) ของสตริงที่ยกมา?


10

เมื่อเคอร์เซอร์บนหนึ่งเครื่องหมายคำพูดวิธีการข้ามไปที่คำพูดการจับคู่?


1
ตอนนี้ฉันไม่มี Emacs แล้ว แต่ฉันคิดว่าskip-syntax-forwardจะทำอย่างนั้น
wvxvw

1
ฉันพยายาม(skip-syntax-forward "^\"")ที่สามารถข้ามไปยังเครื่องหมายอัญประกาศคู่ถัดไปได้ แต่ไม่ข้ามสัญลักษณ์ Escape เช่น "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

@Timm ฉันคิดว่ามันจะค่อนข้างชัดเจนว่าใครพยายามเคลื่อนไหวคำสั่งด้วยคำนำหน้าM-Cแทนถ้าใครรู้ว่าC- M-C-fโอเค - ฉันจะพูดถึงมันในคำตอบ
โทเบียส

1
ดูเหมือนว่าforward-sexpและbackward-sexpหยุดที่ช่องว่างภายในสตริงที่ยกมา?
AhLeung

2

ฉันมักจะมีปัญหาในการจดจำผูกสำหรับforward-sexpและbackward-sexpและฉันต้องการบางสิ่งบางอย่างที่ทำงานมากขึ้นเช่น%ไม่อยู่ในโหมดคำสั่งที่เป็นกลุ่มของ ในบางจุดฉันได้เพิ่มสิ่งนี้ลงใน config ของฉัน (docstring บอกว่า 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) แต่คุณสามารถตั้งค่าที่แตกต่างได้
Victor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.