ฉันจะจำลองแบบการพับโค้ดของ Vim ได้อย่างไร?


28

การพับโค้ดใน Emacs

บางครั้งฉันต้องการพับบล็อกข้อความ ในกลุ่มคุณพับได้ง่ายโดยไม่ต้องฝอย โดยไม่ต้องการเพิ่มตัวละครพิเศษใด ๆ เช่น "เครื่องหมาย" หรือ regex {{{ที่เฉพาะเจาะจงเช่น ฉันต้องการเลือกภูมิภาคและพับโดยไม่ต้องยุ่งกับโครงสร้าง

เมื่อมองไปรอบ ๆ ดูเหมือนว่ามีคำถามเกี่ยวกับการพับโค้ดใน Emacs อยู่แล้ว บางคนบอกว่าไม่มี "ทางออกที่สมบูรณ์" ตัวอย่างเช่นฉันสร้างคลิปการเขียนโค้ดอย่างง่ายใน Vim:

พับธรรมดาเป็นกลุ่ม

ป้อนคำอธิบายรูปภาพที่นี่

+ ค่อนข้างง่ายเลือกภูมิภาคและพับมัน
+ มันขัดขืน เมื่อคุณฆ่า buffer / close Vim และเปิดไฟล์อีกครั้งการพับยังคงอยู่ที่นั่น
+ คุณจะได้รับแถบไฮไลต์เพื่อดูว่าอะไรถูกพับ

มีการกำหนดค่าการพับอื่น ๆ มากมายสำหรับ Vim ฉันมีความสุขกับ Emacs แต่นี่เป็นสิ่งหนึ่งที่ฉันคิดถึง ทางเลือกอื่น ๆ ที่ฉันลองตัวอย่างเช่น HideShow:

HideShow

ป้อนคำอธิบายรูปภาพที่นี่

hide-show minor modeทางเลือกที่ชั่วร้ายด้วย ฉันพบว่าใช้ไม่ได้:

- ฉันไม่สามารถเลือกภูมิภาคและพับมันได้ มันพับบนบล็อครหัส

- ไม่มีบาร์ higlihgting หรือสิ่งที่จะเข้าร่วมคุณมันพับ คุณสามารถพลาดได้ง่าย

- มันไม่ขัดขืน หากคุณเปิดไฟล์อีกครั้งการพับจะหายไป

มีแพ็คเกจอื่นพับนี่ :

พับสิ่งนี้

ป้อนคำอธิบายรูปภาพที่นี่

- เป็นทางเลือกที่สวย อย่างไรก็ตามมันยุ่งเหยิงกับการเยื้องเนื่องจากข้อความที่อยู่ใต้โฟลด์จะถูกวางไว้ถัดจากโฟลด์ ... (?)

- สามารถเลือกภูมิภาคและแสดงภาพได้ แต่มันก็ทำลายความรู้สึกดังนั้นภาพรวมจึงทำให้สับสน ไม่ค่อยมีประโยชน์

- ไม่มีบาร์ higlihgting หรือสิ่งที่จะเข้าร่วมคุณมันพับ คุณสามารถพลาดได้ง่าย

มีปัญหาอะไร

ฉันต้องการทำซ้ำวิธีที่ Vim ทำการพับ แต่เมื่อฉันค้นหาไปรอบ ๆ ดูเหมือนว่าเป็นการยากที่จะทำเช่นนั้นใน Emacs ดังนั้นฉันสงสัยว่ามีบางอย่างใน emacs หรือสถาปัตยกรรมที่ทำให้ยากต่อการทำซ้ำหรือไม่? ขีด จำกัด คืออะไร?


2
ฉันรู้สึกว่าคำถามนั้นกว้างเกินไปดังนั้นฉันจึงโหวตให้ปิดตามนั้น ฉันขอแนะนำให้ผู้โพสต์ดั้งเดิมเลือกห้องสมุดสองแห่งที่ให้คุณสมบัติบางอย่างที่ต้องการแล้วรวม / แก้ไขตามที่ต้องการ หาก OP พบปัญหาในการใช้งาน / แก้ไขสถานที่เฉพาะให้โพสต์คำถามเฉพาะที่ จำกัด ในประเด็นนั้น OP น่าจะสามารถบรรลุเอฟเฟ็กต์ภาพที่ต้องการได้ แต่ควรเตรียมที่จะทำให้มันเป็นโปรเจ็กต์ต่อเนื่องที่จะทำงานได้ตลอดเวลา
ฏหมาย

3
คุณช่วยอธิบายคุณลักษณะการพับที่คุณต้องการได้มั้ย ตามกฎแล้วคุณไม่สามารถคาดหวังให้ผู้คนในไซต์นี้รู้วิธีการใช้งานการพับโค้ด Vim และคุณควรบอกเราว่าคุณลักษณะใดที่คุณต้องการโดยเฉพาะ ข้อมูลเดียวที่คุณให้เกี่ยวกับสิ่งที่คุณต้องการคือภาพเคลื่อนไหวที่แสดงตัวอย่างเพียงอย่างเดียวและอย่างไรก็ตามฉันไม่รู้ว่ามันแสดงอะไร: มันไม่แสดงคำสั่งที่คุณใช้ทำไมคุณย้ายเคอร์เซอร์ไปที่จุดนี้หรือจุดนั้นเป็นต้น . นอกจากนี้ในเบราว์เซอร์ทั่วไปที่พวกเขาเล่นบนลูปและเป็นไปไม่ได้ที่จะบอกเมื่อเริ่มซ้ำ
Gilles 'หยุดความชั่วร้าย' ใน

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

2
ar-hide-region-atpt, ar-show-region-atpt จาก 'things-at-point-utils.el', github.com/andreas-roehler/thing-at-point-utilsโปรดยกเลิกการบล็อก อาจเป็นคำตอบปกติ
Andreas Röhler

1
คำถามที่ฉันเข้าใจนั้นเป็นพื้น: " ใครบางคน: กรุณาเขียนห้องสมุดทั้งหมดสำหรับ Emacs ที่จะให้คุณสมบัติการพับโค้ดที่แน่นอนที่พบใน Vim " ฉันเห็นจากความคิดเห็นบางส่วนและโหวตมากว่ามีเพียงพอ คนที่อยากจะเห็นสิ่งนี้กลายเป็นความจริง อย่างไรก็ตามฉันไม่เห็นว่าวิธีนี้เหมาะสมกับคำตอบอย่างไร - ไลบรารีใหม่ที่เสนอจะต้องได้รับการดูแลพร้อมปัญหาและการแก้ไขข้อบกพร่อง ฉันก็จะไม่รังเกียจใครบางคนเขียนขึ้นห้องสมุดทั้งหมดด้วยคุณสมบัติใหม่ที่ยอดเยี่ยมสำหรับการพับโค้ด
ฏหมาย

คำตอบ:


16

vimish-foldลองใช้

คุณสมบัติ

  • รวมแบตเตอรี่: เปิดใช้งานโหมดย่อยผูกคำสั่งและทุกอย่างจะทำงาน

  • ใช้งานได้ในภูมิภาคที่คุณเลือก

  • มันคงอยู่: เมื่อคุณปิดไฟล์พับของคุณจะไม่หายไป

  • นอกเหนือจากการคงอยู่แล้วมันยังขยายได้ดีคุณสามารถทำงานกับไฟล์หลายร้อยไฟล์ที่มีจำนวนเท่าโดยไม่มีผลเสีย

  • ชัดเจนว่าส่วนใดของข้อความที่ถูกพับ

  • ไม่ทำลายการเยื้องหรืออะไร

  • มันสามารถ refold พับเท่า (โอ้ฉัน);

  • สำหรับแฟน ๆ ของavyแพ็คเกจ: คุณสามารถใช้ avyเพื่อพับข้อความที่มีการกดปุ่มน้อยที่สุด!

การใช้

สร้างการโยงสำหรับบางส่วน / ฟังก์ชันทั้งหมดเหล่านี้:

  • vimish-fold - การพับพื้นฐานของภูมิภาคที่เลือก

  • vimish-fold-unfold- คุณไม่จำเป็นต้องผูกสิ่งนี้เพียงใช้ C-gเมื่อมีการวางจุดไว้บนส่วนหัวที่แสดงถึงข้อความที่พับ

  • vimish-fold-unfold-all - อย่างไรก็ตามสิ่งนี้อาจมีประโยชน์

  • vimish-fold-refold - ใช่คุณสามารถพับกลับได้

  • vimish-fold-avy- ใช้avyเพื่อพับข้อความของคุณ!

คุณสามารถvimish-fold-modeเลือกโหมดที่คุณต้องการพับแบบต่อเนื่องหรือเปิดใช้งานได้ทุกที่:

(vimish-fold-global-mode 1)

คุณมีข้อผูกมัดที่แนะนำหรือไม่ คุณใช้การเชื่อมแบบใดเมื่อคุณอยู่ในโหมด C ++ โหมด C? โหมด Python หรือไม่ โหมดเสียงกระเพื่อม? โหมด ELisp โหมด JavaScript?
Reb.Cabin

1
@ Reb.Cabin นี่ไม่ใช่แพ็คเกจเฉพาะโหมดดังนั้นการผูกคีย์ทั่วโลกจึงเป็นตัวเลือกที่ดีที่สุด ฉันใช้ผูกที่สำคัญที่ไม่เกี่ยวข้องกับคีย์คอร์ดและคนส่วนใหญ่จะคิดว่าพวกเขาเป็นบิตแปลก, ขณะนี้ฉันได้: menu v fvimish-fold, menu v avimish-fold-avy, menu v uvimish-fold-unfold-all, →menu v v vimish-fold-refoldส่วนใหญ่ keybinds ของฉันเช่นนี้นี้คือการตั้งค่าของฉัน
Mark Karpov

สิ่งนี้รวมเข้ากับการเคลื่อนไหวที่ชั่วร้ายและ textobjects หรือไม่
PythonNut

1
หืม ... ฉันจะเริ่มทำงานกับงานประชาสัมพันธ์
PythonNut

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