NERDTree Cara membuka file dan secara otomatis menutup buffer explorer

10

Saat menggunakan plugin NERDTree , perilaku default adalah membuka file baru dan menjaga buffer NERDTree terbuka. Yang ingin saya lakukan adalah menjaga perilaku default ini tetapi juga menimpanya ketika saya menginginkannya sehingga buffer NERDTree akan ditutup setelah saya membuka file.

Saya tahu saya dapat menggunakan let NERDTreeQuitOnOpen=1untuk secara otomatis menutup buffer NERDTree ketika saya membuka file baru tetapi opsi ini benar-benar mengesampingkan perilaku default (yang bukan yang saya inginkan).

Idealnya saya ingin tahu apakah ada fitur bawaan di NERDTree untuk melakukan apa yang saya inginkan. (Saya sudah mencari tetapi tidak menemukan hal seperti itu jadi saya kira itu tidak ada sebenarnya)

Dan jika itu tidak ada, saya punya dua ide:

  • Pertama adalah membuat fungsi yang akan diatur NERDTreeQuitOnOpenke 1, buka file dan kemudian atur lagi NERDTreeQuitOnOpenke 0.

  • Yang kedua adalah membuat pemetaan berikut: map d<CR> <CR> :NERDTree <CR> :bd<CR>yang membuka file (pertama <CR>), kembali ke buffer NERDTree ( :NERDTree <CR>) dan menutup buffer ini ( :bd <CR>). Saya harus memperbaikinya sehingga pemetaan hanya ada di buffer NERDTree tapi saya merasa itu solusi yang sangat jelek dan saya pikir itu bisa diperbaiki.

Ide mana yang terbaik dan mengapa? Atau ada pilihan yang lebih baik?

statox
sumber
@ Peter: Terima kasih atas komentar Anda, artikel ini cukup menarik dan saya mungkin akan mencoba untuk mencoba netrw dan konsep split explorer. Saya pikir saya mengerti keuntungan dari apa yang dijelaskan dalam artikel tetapi masalahnya adalah itu tidak benar-benar menyelesaikan masalah saya, itu hanya menyarankan untuk mengubah alat yang saya gunakan. Saya tidak menentang mengubah kebiasaan saya, tetapi saya ingin menyelesaikan masalah saya terlebih dahulu dan kemudian mencoba alat baru :)
statox
Terkait, pertanyaan yang belum terjawab tentang SU: superuser.com/q/821720/334516 . Mungkin map d<cr> <cr>:NERDTreeClose<cr>untuk pemetaan?
muru
@uru: Terima kasih, pemetaan Anda berfungsi dengan baik dan sepertinya kurang jelek dari milik saya :) Tentang pertanyaan pada SU, saya tidak yakin itu benar-benar terkait karena dia ingin membuka file di buffer NERDTree sedangkan saya ingin buka di buffer baru dan kemudian tutup buffer NERDTree: Dia berakhir dengan jendela terpisah sedangkan saya ingin berakhir dengan 2 buffer tidak di jendela terpisah.
statox

Jawaban:

5

Karena pertanyaannya sepertinya tidak menghasilkan banyak jawaban, saya hanya akan menjawabnya dengan saran dari @muru yang telah saya gunakan selama seminggu sebelum saya beralih ke netrw explorer. (Tentu saja jika pilihan jawaban yang lebih baik muncul, saya dengan senang hati akan menghapus tanda saya sebagai diterima dan menerima yang baru)

Idenya adalah menggunakan pemetaan berikut:

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

Yang membuka file seperti biasanya dilakukan dan kemudian memanggil fungsi yang menutup buffer NERDTree di mana pun kursor berada.

EDIT: Baru-baru ini saya beralih kembali ke NERDTree dan mengerjakan ulang solusi saya: Pemetaan yang saya sarankan sebelumnya berfungsi tetapi karena ada di setiap buffer saya harus menekan dua kali dsetiap kali saya ingin menghapus sesuatu yang sangat mengganggu. (Mungkin saya bisa mengubah timeoutpengaturan tetapi saya suka cara itu diatur untuk saya, juga saya tidak ingin memetakannya pada kombinasi tombol lain).

Jadi saya mengganti solusi pertama saya dengan baris berikut ke saya .vimrc:

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

Dengan cara ini pemetaan dibuat hanya di NERDTreebuffer dan tidak mengacaukan alur kerja saya di buffer lainnya.

statox
sumber