Vim - รายการไดนามิกของบัฟเฟอร์เปิดในหน้าต่าง


22

ฉันได้ตรวจสอบสองสามวิธีเพื่อรักษารายการบัฟเฟอร์แบบเปิดใน Vim และบางรายการก็ดีมาก แต่ดูเหมือนว่าไม่มีวิธีใดที่จะทำงานตามที่ฉันต้องการ เป็นไปได้อย่างมากที่ไม่มีสิ่งที่ฉันต้องการมีอยู่และไม่เจ็บปวดที่จะถาม

ฉันใช้ NERDTree ใน GVim และฉันชอบความคิดในการใส่ข้อมูลลงในหน้าต่างด้านซ้ายเรียว ฉันได้รวบรวมไดอะแกรมที่มีประโยชน์สำหรับวิธีที่ฉันต้องการให้สภาพแวดล้อมของฉันดู:

|--------|---------------------------------------|
|        |                                       | 
|        |                                       | 
|NERDTree|           Windows                     | 
|        |                                       | 
|        |                                       | 
|        |                                       | 
|--------|                                       |
|        |                                       | 
|        |                                       | 
|  List  |                                       | 
|   of   |                                       | 
|  Open  |                                       | 
| Buffers|                                       | 
|        |                                       | 
|        |                                       | 
|--------|---------------------------------------|

ดังนั้นคำถามของฉันคือมีวิธี vim-native หรือปลั๊กอินที่เปิดใช้งานเพื่อรักษารายการของบัฟเฟอร์ที่เปิดอยู่ในปัจจุบันและเลือก / แก้ไข / ปิดจากรายการนั้นภายในหน้าต่างที่คล้ายกับ NERDTree หรือไม่?

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


ฉันยังต้องการให้รายการบัฟเฟอร์ด้านล่าง (หรือสูงกว่า) บานหน้าต่าง nerdtree ผมจะพยายามที่จะจำเพื่ออัปเดตโพสต์นี้ถ้าฉันพบทางออกที่ดี ( แต่ขอขอบคุณสำหรับการอยู่แล้ว)
เอริค Drechsel

คำตอบ:


7

คุณค้นหาที่เก็บปลั๊กอินของ vim.org หรือไม่ มีหลายสิบของบัฟเฟอร์เปลี่ยนปลั๊กอินสำหรับคุณที่จะเลือกเช่นBufferGatorหรือSelectBuf อีกวิธีหนึ่งคือส่วนใหญ่ของพวกเขาจะรวบรวมในรายการที่ดีในวิกิพีเดียเป็นกลุ่ม


ในขณะที่คุณพูดพาดพิงในส่วนสุดท้ายของคำถามของคุณว่าประเภทของระบบไม่เป็นที่ชื่นชอบของทุกคน

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

ฉันใช้ปลั๊กอินเดียวกันเพื่อสลับระหว่างบัฟเฟอร์และสำรวจระบบไฟล์รอบ ๆ ไฟล์ที่ฉันกำลังแก้ไข เรียกใช้ด้วย,f(ไฟล์) หรือ,b(บัฟเฟอร์) หน้าต่างจะหายไปเมื่อฉันทำเสร็จแล้ว สมบูรณ์ มีปลั๊กอินที่คล้ายกันอื่น ๆ ลองทั้งหมดถ้าคุณชอบความคิดที่

แก้ไข

ฉันรู้สึกว่าถูกบังคับให้เพิ่ม GIF เคลื่อนไหวของ CtrlP ขณะใช้งานการสลับบัฟเฟอร์:

การสลับบัฟเฟอร์ด้วย CtrlP

EndEdit

คนพื้นเมือง:sb <Tab>นั้นค่อนข้างเรียบร้อย แต่ก็เซ็กซี่น้อยลง มันไม่สนับสนุนการจับคู่คลุมเครือ แต่มันก็มีข้อได้เปรียบใหญ่บาง: มันสร้างขึ้นในและมันทำงานเหมือน:e <Tab>, :vs <Tab>และอื่น ๆ


ขอบคุณสำหรับคำแนะนำของคุณ ดูเหมือนว่า BufferGator และ SelectBuf อย่างน้อยก็ใกล้เคียงกับฟังก์ชั่นของฉันแม้ว่าพวกเขาอาจจะต้องปรับแต่งเพื่อให้สิ่งต่าง ๆ ดำเนินต่อไป ฉันขอขอบคุณข้อกังวลเกี่ยวกับการสิ้นเปลืองพื้นที่ แต่ด้วยกรณีการใช้งานปัจจุบันของฉันฉันมี GVim หนึ่งอินสแตนซ์เปิดเป็นเวลาหลายชั่วโมงพร้อมกับเปิดไฟล์จำนวนมากในครั้งเดียว สำหรับสถานการณ์เหล่านี้รายการบัฟเฟอร์แบบถาวรจะมีประโยชน์อย่างยิ่ง อย่างไรก็ตามฉันจะใช้เวลาพอสมควรในการเรียนรู้เกี่ยวกับวิธีการ Vim ทั่วไปสำหรับการจัดการบัฟเฟอร์
asfallows

ฉันคิดว่าคุณทำงานกับจอภาพขนาดใหญ่ ไม่ว่าคุณจะเลือกระบบแบบใดคุณก็ยังคงต้อง 1. สลับไปที่บัฟเฟอร์ลิสต์ 2. เลือกบัฟเฟอร์ 3. กดปุ่มเพื่อข้ามไปยังรายการบัฟเฟอร์ที่มองเห็นแล้วหรือไม่ การใช้ตัวสลับบัฟเฟอร์ "ตามคำขอ" จึงมีประสิทธิภาพเท่ากับเปิดรายการบัฟเฟอร์ไว้และช่วยประหยัดพื้นที่
romainl

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

@ จากคำสั่ง, คุณใช้คำสั่ง vimrc เพื่อแมปอะไร,bเพื่อค้นหาบัฟเฟอร์ด้วย ctrlp?
snowbound

1
@snowbound, FWIW ฉันหยุดใช้ CtrlP หรือปลั๊กอินที่คล้ายกันอื่น ๆ เมื่อไม่นานมานี้ nnoremap ,b :CtrlPBuffer<CR>อย่างไรก็ตามคำสั่งของฉันคือ
romainl

5

ฉันขอแนะนำMiniBufExplorerอย่างมาก ดูทางเลือกอื่นสำหรับ minibufexplorer

ภาพหน้าจอ


ขอบคุณสำหรับการตอบกลับ - ฉันได้พบ MiniBufExplorer แล้วและดูเหมือนว่ามันดีมากในสิ่งที่ทำ แต่มันไม่ตรงตามเงื่อนไขที่ฉันอธิบายไว้ว่าฉันต้องการจัดการบัฟเฟอร์อย่างไร หากปรากฏว่าไม่มีวิธีที่ดีในการทำสิ่งที่ฉันพยายามทำหรือฉันคิดว่ามันไม่ใช่วิธีที่ถูกต้องที่จะทำ MBE นั้นค่อนข้างสูงในรายการของฉันสำหรับสิ่งที่ต้องทำต่อไป
asfallows

1
เงื่อนไขเดียวที่ไม่ตรงคือรายการอยู่ทางด้านซ้าย ฉันเห็นด้วยMiniBufExplorerอยู่ที่ด้านบน (ซึ่งจะไม่เปลืองเนื้อที่มากเท่ากับด้านซ้าย) หรือบางทีฉันเข้าใจผิดความต้องการของคุณ
Marco

ด้วยการตั้งค่าปัจจุบันของฉันการมีรายการบัฟเฟอร์ทางด้านซ้ายตามที่ปรากฎนั้นเป็นการปรับปรุงการใช้พื้นที่เนื่องจาก NERDTree เปิดตลอดเวลา แต่เราไม่ได้เป็นแนวดิ่งทั้งหมด การแบ่งปันพื้นที่นั้นกับรายการบัฟเฟอร์น่าจะดี เป็นที่น่าสังเกตว่านี่เป็นวิธีที่ฉันใช้ GVim และฉันจะไม่ต้องการคอลัมน์ด้านซ้ายถาวรหากฉันใช้ Vim ในคอนโซล ส่วนใหญ่การใช้คอนโซลของฉันเป็นกลุ่มคือ "เปิดไฟล์ทำการแก้ไขอย่างรวดเร็วปิดเป็นกลุ่ม"
asfallows

1

มีวิธีทำตรงนั้นโดยใช้ปลั๊กอินwinmanager ในภาพหน้าจอนี้ฉันรวมทั้ง NERDTree และ MiniBufExpl (github: techlivezheng / vim-plugin-minibufexpl ล่าสุดปลั๊กอินคอมมิชชัน 349a9fbb) ในแนวตั้งเดียวกันและสลับกับ F4 ในทางทฤษฎีแล้วการแก้ปัญหานี้ควรใช้กับการรวมกันของปลั๊กอินอื่น ๆ

ตัวอย่าง. vimrc ของฉัน

"{{{MiniBufExpl config
ให้ g: miniBufExplVSplit = 20 "เปิดในแนวตั้ง
ให้ g: miniBufExplSplitToEdge = 0 "เปิดสัมพันธ์กับหน้าต่างก่อนหน้า (NERDTree)
"}}} การกำหนดค่า MiniBufExpl

"{{{winmanager config
"ลงทะเบียนปลั๊กอิน
ให้ g: NERDTree_title = 'NERD Tree'
ให้ g: MiniBufExpl_title = 'MiniBufExpl'

"กำหนดเค้าโครง
ให้ g: winManagerWindowLayout = 'NERDTree | MiniBufExpl'

"ตัวจัดการสำหรับ NERDTree
ฟังก์ชั่น! NERDTree_Start ()
    ผู้บริหาร 'NERDTree'
endfunction

ตัวจัดการ "สำหรับ MiniBufExpl
ฟังก์ชั่น! MiniBufExpl_Start ()
    ผู้บริหาร 'MBEOpen'
endfunction

"การจับคู่เพื่อสลับการแยกเป็น F4
nmap <F4>: WMToggle
"}}} winmanager config

ปัญหา:

  • NERDTree ไม่ได้ใช้บัฟเฟอร์ที่ winmanager สร้าง แต่เปิดในตัวของมันเอง ...
  • ... ดังนั้นบัฟเฟอร์ของ winmanager จะยังไม่ได้ใช้
  • MiniBufExpl อัปเดตตัวเองไม่ถูกต้องเมื่อกระโดดระหว่างบัฟเฟอร์

พฤติกรรมที่ฉันประสบความสำเร็จนั้นยังห่างไกลจากความสมบูรณ์แบบ แต่เป็นการเริ่มต้นที่ดี

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