ตั้งค่าภูมิภาคเพื่อรวมวงเล็บที่ล้อมรอบ


9

เริ่มต้นด้วยจุดหรือภูมิภาคที่ใช้งานอยู่ฉันจะ 'ขยาย' ในการกดแป้นถัดไปเพื่อรวมชุดวงเล็บถัดไปได้อย่างไร

ถ้าฉันเริ่มต้นด้วย: ( |หมายถึงจุด)

(defn foo [x] (+ x |42))

หรือถ้าฉันเริ่มต้นด้วย: ( <และ>ยึดพื้นที่ที่เลือกไว้)

(defn foo [x] (+ x <42>|))

ฉันต้องการที่จะจบลงด้วย

(defn foo [x] <(+ x 42)>|)

คำตอบ:


10

ใช้expand-region.el :

Expand region เพิ่มพื้นที่ที่เลือกตามความหมายของหน่วย เพียงกดปุ่มต่อไปเรื่อย ๆ จนกว่าจะเลือกสิ่งที่คุณต้องการ

ตัวอย่าง:

(setq alphabet-start "abc def")

ด้วยเคอร์เซอร์ที่ c มันเริ่มต้นด้วยการทำเครื่องหมายคำว่า abc ทั้งหมดจากนั้นขยายไปยังเนื้อหาของเครื่องหมายคำพูด abc def จากนั้นไปที่เครื่องหมายคำพูดทั้งหมด "abc def" จากนั้นไปที่เนื้อหาของ sexp setq ตัวอักษรเริ่ม "abc def "และในที่สุดก็ถึง sexp ทั้งหมด

คุณสามารถตั้งค่าแบบนี้:

(require 'expand-region)
(global-set-key (kbd "C-=") 'er/expand-region)

คุณสามารถทำสัญญาภูมิภาคอีกครั้งด้วยคำนำหน้าเชิงลบหากคุณขยายมากเกินไป


1
สำหรับการอ้างอิงexpand-regionฟังก์ชันเฉพาะเพื่อทำเครื่องหมายรายการจะถูกเรียกer/mark-outside-pairsทันที
พี่เลี้ยงเด็ก

4

ฉันเห็นด้วยคุณควรลองexpand-regionตามคำแนะนำในคำตอบอื่น (ซึ่งฉันลงคะแนนให้)

แต่ในกรณีที่คุณไม่คุ้นเคยกับคำสั่งในตัวที่เกี่ยวข้อง:

C-M-u, backward-up-list
C-M-SPC, mark-sexp

ในตัวอย่างแรกของคุณที่ไม่มีภูมิภาคคุณสามารถใช้C-M-u C-M-SPCเพื่อทำเครื่องหมายรายการล้อมรอบ หากมีพื้นที่ที่เลือกไว้แล้วคำสั่งเหล่านี้จะขยายออกไป ดังนั้นถ้า42เลือกและคุณกดC-M-uมันจะขยายการเลือกย้อนหลังไปยังจุดเริ่มต้นของรายการ แต่จะไม่รวมถึงการปิด paren

ดังนั้นในกรณีที่ไม่มีสิ่งใดเช่นexpand-regionฉันจะกดC-gเพื่อยกเลิกการเลือกปัจจุบันใด ๆ จากนั้นC-M-uย้อนกลับไปที่ parens มากเท่าที่คุณต้องการแล้วC-M-SPCทำเครื่องหมาย


3

ในกรณีของพื้นที่ที่ใช้งานhในlispyจะทำสิ่งที่คุณต้องการ ดูล่าสุดของฉันโพสต์บทนำ

M-m hในกรณีแรกที่คุณจะต้อง

อัปเดต: ตัวเลือกทั้งหมดที่คุณมี lispy

เริ่มต้นด้วย:

(defn foo [x] (+ x ~42|))

ที่นี่~หมายถึงเครื่องหมาย (จุดเริ่มต้นของภูมิภาค) และ|แสดงถึงจุด (จุดสิ้นสุดของภูมิภาค)

  1. เมื่อhคุณได้รับ:

    (defn foo [x] |(+ x 42)~)
    
  2. เมื่อlคุณได้รับ:

    (defn foo [x] ~(+ x 42)|)
    
  3. เมื่อkคุณได้รับ (ยกเลิกได้ด้วยj):

    (defn foo [x] (+ ~x| 42))
    
  4. ด้วย2kหรือkkคุณจะได้รับ:

    (defn foo [x] (~+| x 42))
    
  5. เมื่อdคุณได้รับ:

    (defn foo [x] (+ x |42~))
    
  6. เมื่อd>คุณได้รับ (ยกเลิกได้ด้วย<):

    (defn foo [x] (+ |x 42~))
    
  7. ด้วยd2>หรือd>>คุณจะได้รับ:

    (defn foo [x] (|+ x 42~))
    
  8. เมื่อmคุณได้รับ:

    (defn foo [x] (+ x 42|))
    

เพียงเพื่อสรุปภูมิภาคเมื่อมีการใช้งานh, j, k, l มีลูกศรที่ย้ายภูมิภาค >ขยายภูมิภาคโดยหน่วยความหมายเดียวในทิศทางของจุด <ย่อขนาดพื้นที่ตามความหมายของหน่วยเดียวในทิศทางของจุด mปิดการใช้งานเครื่องหมาย iเลือกองค์ประกอบแรกของภูมิภาคและdแลกเปลี่ยนจุดและเครื่องหมาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.