NERDTree วิธีเปิดไฟล์และปิดบัฟเฟอร์ explorer โดยอัตโนมัติ


10

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

ฉันรู้ว่าฉันสามารถใช้let NERDTreeQuitOnOpen=1เพื่อปิดบัฟเฟอร์ NERDTree โดยอัตโนมัติเมื่อฉันเปิดไฟล์ใหม่ แต่ตัวเลือกนี้จะแทนที่พฤติกรรมเริ่มต้นโดยสิ้นเชิง (ซึ่งไม่ใช่สิ่งที่ฉันต้องการ)

เป็นการดีที่ฉันต้องการทราบว่ามีคุณลักษณะในตัวใน NERDTree ที่จะทำสิ่งที่ฉันต้องการ (ฉันค้นหามาแล้วแต่ไม่พบอะไรแบบนั้นดังนั้นฉันคิดว่ามันไม่มีอยู่จริง)

และถ้านั่นไม่อยู่ฉันมีสองความคิด:

  • คนแรกคือการสร้างฟังก์ชั่นซึ่งจะกำหนดNERDTreeQuitOnOpenที่จะ1เปิดไฟล์นั้นตั้งค่าอีกครั้งเพื่อNERDTreeQuitOnOpen0

  • สิ่งที่สองคือการสร้างการแมปต่อไปนี้: map d<CR> <CR> :NERDTree <CR> :bd<CR>ซึ่งเปิดไฟล์ (ก่อน<CR>), กลับไปที่ NERDTree buffer ( :NERDTree <CR>) และปิด buffer นี้ ( :bd <CR>) ฉันควรปรับปรุงเพื่อให้การแมปมีอยู่ในบัฟเฟอร์ NERDTree เท่านั้น แต่ฉันรู้สึกว่านั่นเป็นวิธีแก้ปัญหาที่น่าเกลียดและฉันสามารถปรับปรุงได้

ความคิดใดจะดีที่สุดและทำไม หรือมีตัวเลือกที่ดียิ่งขึ้น?



@ Peter: ขอบคุณสำหรับความคิดเห็นของคุณบทความน่าสนใจมากและฉันอาจจะลอง netrw และแนวคิดของ split explorer ฉันคิดว่าฉันเข้าใจถึงข้อดีของสิ่งที่อธิบายไว้ในบทความ แต่ปัญหาคือมันไม่ได้แก้ปัญหาของฉันจริง ๆ เพียงแค่แนะนำให้เปลี่ยนเครื่องมือที่ฉันใช้ ฉันไม่ได้ต่อต้านการเปลี่ยนนิสัยของฉัน แต่ฉันต้องการที่จะแก้ปัญหาของฉันก่อนแล้วลองเครื่องมือใหม่ :)
statox

ที่เกี่ยวข้องกับการตอบคำถามเกี่ยวกับ SU: superuser.com/q/821720/334516 อาจจะmap d<cr> <cr>:NERDTreeClose<cr>ทำแผนที่?
muru

@muru: ขอบคุณการทำแผนที่ของคุณทำงานได้ดีและดูเหมือนว่าน่าเกลียดน้อยกว่าของฉัน :) เกี่ยวกับคำถามใน SU ฉันไม่แน่ใจว่ามันเกี่ยวข้องกันโดยสิ้นเชิงเพราะเขาต้องการเปิดไฟล์ในบัฟเฟอร์ของ NERDTree ในขณะที่ฉันต้องการ เปิดในบัฟเฟอร์ใหม่แล้วปิด NERDTree buffer: เขาจบลงด้วยการแบ่ง windows ในขณะที่ฉันต้องการท้ายด้วย 2 บัฟเฟอร์ไม่ได้อยู่ในหน้าต่างแยก
statox

คำตอบ:


5

เนื่องจากคำถามดูเหมือนจะไม่สร้างคำตอบมากมายฉันจะตอบด้วยคำแนะนำของ @muru ซึ่งเป็นสิ่งที่ฉันใช้เป็นเวลาหนึ่งสัปดาห์ก่อนที่ฉันจะเปลี่ยนไปใช้ netrw explorer (แน่นอนถ้ามีคำตอบที่ดีกว่าตัวเลือกฉันจะยกเลิกการทำเครื่องหมายว่ายินดีและยอมรับคำตอบใหม่)

ความคิดคือการใช้การทำแผนที่ folowing:

map d<cr> <cr>:NERDTreeClose<cr>

ซึ่งเปิดไฟล์ตามปกติแล้วเรียกใช้ฟังก์ชันที่ปิดบัฟเฟอร์ NERDTree ไม่ว่าเคอร์เซอร์จะอยู่ที่ใด

แก้ไข:เมื่อเร็ว ๆ นี้ฉันเปลี่ยนกลับเป็น NERDTree และทำใหม่โซลูชันของฉัน: การแมปที่ฉันแนะนำก่อนทำงาน แต่มันมีอยู่ในบัฟเฟอร์ทุกครั้งที่ฉันต้องกดสองครั้งdทุกครั้งที่ฉันต้องการลบสิ่งที่น่ารำคาญ (บางทีฉันอาจเปลี่ยนการtimeoutตั้งค่าได้ แต่ฉันชอบวิธีที่ตั้งไว้ในปัจจุบันสำหรับฉันและฉันไม่ต้องการแมปกับชุดคีย์อื่น)

ดังนั้นฉันจึงเปลี่ยนโซลูชันแรกด้วยบรรทัดต่อไปนี้เป็นของฉัน.vimrc:

autocmd BufEnter NERD_tree_* nmap  d<CR> <CR> :NERDTreeToggle <CR>
autocmd BufLeave NERD_tree_* unmap d<CR>

วิธีนี้การทำแผนที่จะสร้างเฉพาะในNERDTreeบัฟเฟอร์และจะไม่ยุ่งกับเวิร์กโฟลว์ของฉันในบัฟเฟอร์อื่น

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