จะบันทึกหน้าต่างการแบ่งและการจัดวางบัฟเฟอร์ได้อย่างไร?


56

ฉันมีงานหลายอย่างที่ฉันทำในที่เก็บเดียว ฉันต้องการสร้าง "พื้นที่ทำงาน" สำหรับการทำงานกับพวกเขา

หนึ่งใน "พื้นที่ทำงาน" หรือ "บัฟเฟอร์รูปแบบ" จะมีไฟล์ทั้งหมดที่ฉันต้องการที่จะทำงานในที่เปิดในรูปแบบที่ฉันต้องการ (ใช้^w+v, ^w+sการแบ่งหน้าต่าง)

จากนั้นเมื่อฉันเริ่มทำงานอื่นฉันต้องการบันทึกเค้าโครงปัจจุบันของฉันย้ายไปยังอีกเค้าโครงหนึ่ง แต่ฉันต้องการกลับไปใช้เค้าโครงก่อนหน้าได้

อะไรคือวิธีที่ดีที่สุดในการบรรลุเป้าหมายนี้?

คำตอบ:


48

คุณสามารถใช้เสียงเรียกเข้า:mksessionและเขียน "workspace" แต่ละไฟล์ไปยังไฟล์อื่นจากนั้นเปิดเซสชันอีกครั้งโดยใช้vim -S session_fileอย่างไรก็ตามหากคุณเปิดใช้ปลั๊กอินแล้วฉันพบว่าปลั๊กอิน Startify เป็นสิ่งที่ฉันต้องการสำหรับสถานการณ์ประเภทนี้: https : //github.com/mhinz/vim-startify

มันทำงานได้ยอดเยี่ยมในการจัดการเซสชันใน vim และ mccvim และให้รายการของไฟล์ล่าสุดเช่นกันเมื่อคุณเปิด vim มันจะเปลี่ยนเป็นไดเรกทอรีการทำงานที่เหมาะสมสำหรับคุณโดยอัตโนมัติเช่นกัน นอกจากนี้ยังช่วยให้คุณสามารถตรึงไฟล์ไปที่หน้าจอเปิดเริ่มต้นได้เช่นกันซึ่งเหมาะสำหรับการเข้าถึงสิ่งต่าง ๆ เช่นคุณ.vimrc


23

คุณสามารถใช้ปลั๊กอินvim-obsessionของ tpope เพื่อจัดการเซสชันได้อย่างง่ายดาย มันเหมือนกับเสื้อคลุมของ Vim ที่สร้างขึ้นmksessionแต่ให้ชุดของสิ่งอื่น ๆ เช่นกัน

คุณสามารถบันทึกเซสชันปัจจุบัน (หรือรูปแบบบัฟเฟอร์) :Obsessโดยให้คำสั่ง หากคุณไม่ได้ระบุอาร์กิวเมนต์มันจะเขียนไฟล์เซสชันที่เรียกSession.vimโดยค่าเริ่มต้น

ในการรีโหลดเซสชั่นให้ใช้vim -S <session-name>หรือ:source <session-name>ถ้าคุณอยู่ใน Vim แล้ว

สิ่งที่ดีคือคุณไม่ต้องจำไว้ว่าให้บันทึกเซสชันทุกครั้งที่คุณออกจากกลุ่ม มันถูกจัดการโดยอัตโนมัติโดยปลั๊กอิน

คุณสมบัติที่สำคัญอีกอย่างหนึ่งของการใช้งานแบบไร้ความปราณีคือมันไม่ได้บันทึกตัวเลือกและแผนที่ mksessionจับภาพตัวเลือกและแผนที่ปัจจุบันซึ่งคุณไม่ต้องการให้เกิดขึ้นหากคุณต้องการบันทึกโครงร่างบัฟเฟอร์ มันจะรบกวนเมื่อมีการอัพเดทปลั๊กอิน ฯลฯ


มันสามารถจัดการไฟล์หลายเซสชันได้หรือไม่?
Nebril

1
@ เนเปิลส์มันสามารถ :Obsess <session-name>เมื่อคุณบันทึกเซสชั่นให้ใช้รูปแบบ ใช้ชื่อเซสชันเฉพาะที่คุณต้องการเมื่อโหลดซ้ำ
thameera

ฉันพบว่า Obsession ไม่จดจำการแยกแนวตั้งในขณะที่ mksession ทำ ฉันแค่ทำไปยุ่งกับคืนนี้ แต่มีบางอย่างที่ฉันพลาดหรือไม่?
baxx

1
@baxx Obsession จำการแยกได้ทุกประเภท บางทีคุณอาจจะปิดการแยกก่อนที่จะออกเป็นกลุ่ม?
thameera

2
@baxx นี่เก่า แต่ฉันต้องการเพิ่มบันทึกย่อในกรณีนี้ช่วยคนอื่นได้ เหตุผลที่ดูเหมือนว่าความหลงไหลกำลังลืมแยกอาจเป็นเพราะคุณเลิกแยกทั้งหมดออกจากกลุ่ม นั่นหมายถึงสถานะสุดท้ายคือหน้าต่างสุดท้ายของคุณเมื่อคุณปิดเสียงเรียกเข้านั่นคือสิ่งที่ร้านค้าครอบงำจิตใจ ฉันมีปัญหาเดียวกันกับแท็บและคำตอบคือการใช้: qa เพื่อออกจากหน้าต่างที่เปิดอยู่ทั้งหมด, แยก, แท็บ หากใครบางคนมีตัวเลือกที่ดีกว่าโปรดแจ้งให้เราทราบ
TC0072

12

ในฐานะที่เป็นบันทึกด้านข้างฉันต้องการชี้ให้เห็นว่าฉันสร้างอีกหนึ่งปลั๊กอินdhruvasagar / vim-prosessionเป็นส่วนเสริมสำหรับtpope / vim-obsessionที่ช่วยเพิ่มให้ดียิ่งขึ้นในการสร้างและจัดการเซสชัน vim ตามค่าเริ่มต้นในที่เก็บส่วนกลาง ต่อการกำหนดค่าบนพื้นฐานสำหรับแต่ละไดเรกทอรีและโหลดโดยอัตโนมัติเมื่อคุณเรียกใช้ vim โดยไม่มีอาร์กิวเมนต์ใด ๆ ในไดเรกทอรี นอกจากนี้ยังช่วยให้คุณสามารถสลับระหว่างเซสชันที่แตกต่างกันเพื่อความสะดวก


มันฟังดูยอดเยี่ยม ถ้าฉันสามารถจัดการไฟล์เซสชั่นในโฟลเดอร์ที่คล้ายกับการเลิกทำและไฟล์สำรองเพื่อป้องกันไม่ให้โปรเจ็กต์ของฉันยุ่งเหยิงด้วยไฟล์ swap ที่อาจทำให้ฉันสับสน
dragon788

1

คุณสามารถลองปลั๊กอินvim-workspaceคุณลักษณะการจัดการเซสชันนั้นเป็นแบบอัตโนมัติกำหนดขอบเขตสำหรับไดเรกทอรีการทำงานปัจจุบันของคุณและทำได้ง่าย ๆ (ต้องเรียกใช้ToggleWorkspaceเพียงครั้งเดียว)

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