วิธีการเปิดใช้งานและใช้การพับโค้ดใน Vim?


48

ฉันจะสามารถเปิดใช้งานและทำพับโค้ดในกลุ่ม?

ฉันต้องเปลี่ยนอะไร~/.vimrcไหม

ฉันพิมพ์z+ aและz+ cและz+ oและไม่มีอะไรเกิดขึ้น

นี่คือบทความเกี่ยวกับการพับ: รหัสพับในกลุ่ม

คำตอบ:


40

ไม่มีคุณไม่ได้ที่จะนำคำสั่งจากหน้าเว็บที่คุณเชื่อมโยงกับในของคุณ~/.vimrcคุณก็สามารถพิมพ์พวกเขาหลังจากที่ออก:ในvimที่จะได้รับพร้อมรับคำสั่ง

อย่างไรก็ตามถ้าคุณใส่สาย:

set foldmethod=indent   
set foldnestmax=10
set nofoldenable
set foldlevel=2

ตามที่ระบุในลิงก์ที่คุณให้~/.vimrcคุณไม่ต้องพิมพ์ทุกครั้งที่คุณต้องการใช้การพับในไฟล์ set nofoldenableทำให้แน่ใจว่าเมื่อเปิดไฟล์เป็น "ปกติ" คือไม่ได้พับ


ฉันมีรหัสที่เขียนโดย C ดังนั้นหลักสูตรในหนึ่งในฟังก์ชั่นของมัน ฉันกด <kbd> esc </kbd> เพื่อไปที่คำสั่งดังนั้นหลังจาก: ฉันเขียน zc และไม่มีอะไรเกิดขึ้น
Mohammad Reza Rezwani

1
@ Alex ZC :ที่คุณไม่ควรพิมพ์หลังจากที่ คุณพิมพ์คำสั่งหลังจากที่พรอมต์ที่คุณได้รับเมื่อพิมพ์set คุณพิมพ์เมื่อคุณได้อย่างอิสระสามารถเลื่อนเคอร์เซอร์เช่นเดียวกับที่คุณจะใช้จะได้รับข้อความที่เคอร์เซอร์อยู่ในด้านบนของหน้าจอปัจจุบัน :zczt
Anthon

39

พับตามค่าเริ่มต้น

วิธีการพับเริ่มต้นของ Vim นั้นmanualหมายถึงว่าการพับจะสร้างขึ้นเอง มิฉะนั้นจะไม่มีเท่าที่จะปิดหรือเปิดการใช้za, zoหรือzcตามที่คุณอธิบาย แต่คุณสามารถสร้างภาพซ้อนได้zf{motion}ในโหมดปกติหรือzfในโหมดภาพ เช่นzfjสร้างเส้นแบ่งสำหรับบรรทัดปัจจุบันและอีกบรรทัดถัดไปในโหมดปกติ

พับตาม indent

คำตอบที่ได้รับการยอมรับโดย @Anthon อธิบายวิธีการตั้งค่าวิธีการพับindent; เช่นการพับถูกกำหนดโดยระดับของการเยื้อง

พับตาม syntax

ในวิธีที่สะดวกยิ่งขึ้นสามารถสร้างการพับได้โดยอัตโนมัติตามไวยากรณ์ภาษาของบัฟเฟอร์ปัจจุบัน หากคุณกำลังใช้ภาษาโปรแกรมเราเรียกมันว่าLและคุณมีคำจำกัดความการพับของL (เช่นคุณได้ติดตั้งปลั๊กอิน Vim ซึ่งข้อมูลการพับของLถูกกำหนดเช่นc.vimสำหรับ C / C ++ หรือpython โหมดสำหรับ Python) คุณเพียงแค่ต้องตั้งค่าวิธีการพับเป็นsyntax:

set foldmethod=syntax

แค่นั้นแหละ. คำสั่งที่มีประโยชน์ที่สุดสำหรับการทำงานกับการพับคือ:

  • zo เปิดฝาพับที่เคอร์เซอร์
  • zShift+ oเปิดทั้งหมดเท่าที่เคอร์เซอร์
  • zc ปิดฝาพับที่เคอร์เซอร์
  • zmเพิ่มfoldlevelโดยหนึ่ง
  • zShift+ mปิดการพับทั้งหมดที่เปิดอยู่
  • zrลดลงfoldlevelโดยหนึ่ง
  • zShift+ rลดลงfoldlevelถึงศูนย์ - พับทั้งหมดจะเปิด

14

คุณไม่จำเป็นต้องใช้มันอย่างเป็นระบบ: ฉันมักจะเลือกการพับโดยการเคลื่อนไหวหรือส่วนด้วยตนเอง ยกตัวอย่างเช่นพับเป็นวรรคzfipและพับถัดไป 20 zf20jสายคือ ใช้zaเพื่อสลับและzdลบ

ต้องใช้งานเพิ่มอีกเล็กน้อย แต่ช่วยให้การพับของคุณสะท้อนงานในมือ


4

คุณสามารถเปิดใช้งานfoldingในเซสชันปัจจุบันเช่นคำตอบของ @ Anthon แต่ถ้าคุณต้องการทำให้มันถาวรคุณต้องตั้งค่าอย่างน้อยบรรทัดนี้ใน.vimrcการพับ:

set foldmethod=indent

indent เป็นการพับคุณสามารถดูเพิ่มเติมได้จาก :help foldmethod

'foldmethod' 'fdm'      string (default: "manual")
                        local to window
                        {not in Vi}
                        {not available when compiled without the +folding
                        feature}
        The kind of folding used for the current window.  Possible values:
        fold-manual     manual      Folds are created manually.
        fold-indent     indent      Lines with equal indent form a fold.
        fold-expr       expr        'foldexpr' gives the fold level of a line.
        fold-marker     marker      Markers are used to specify folds.
        fold-syntax     syntax      Syntax highlighting items specify folds.
        fold-diff       diff        Fold text that is not changed.

ตอนนี้ทุกครั้งที่คุณเปิดไฟล์ด้วยvimคุณจะเห็นว่าโค้ดถูกพับโดยวิธีที่คุณตั้งไว้ แล้วคุณสามารถใช้za, ,zczo


ไม่จำเป็นต้องใช้ vimrc ฉันไม่เคยทำอย่างนั้นเพราะฉันใช้การพับเป็นครั้งคราวเท่านั้น
Anthon

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