NERDTree Cách mở tệp và tự động đóng bộ đệm explorer


10

Khi sử dụng plugin NERDTree , hành vi mặc định là mở một tệp mới và giữ cho bộ đệm NERDTree mở. Những gì tôi muốn làm là giữ hành vi mặc định này nhưng cũng ghi đè nó khi tôi muốn để bộ đệm NERDTree sẽ bị đóng sau khi tôi mở một tệp.

Tôi biết tôi có thể sử dụng let NERDTreeQuitOnOpen=1để tự động đóng bộ đệm NERDTree khi tôi mở một tệp mới nhưng tùy chọn này hoàn toàn ghi đè hành vi mặc định (đó không phải là điều tôi muốn).

Lý tưởng nhất là tôi muốn biết nếu có một tính năng tích hợp trong NERDTree để làm những gì tôi muốn. (Tôi đã tìm kiếm nhưng không tìm thấy thứ gì như vậy nên tôi cho rằng nó không thực sự tồn tại)

Và nếu điều đó không tồn tại, tôi có hai ý tưởng:

  • Người đầu tiên là tạo ra một chức năng mà sẽ đặt NERDTreeQuitOnOpenđể 1, mở tập tin và sau đó thiết lập một lần nữa NERDTreeQuitOnOpenđể 0.

  • Thứ hai là tạo ánh xạ sau: map d<CR> <CR> :NERDTree <CR> :bd<CR>mở tệp (đầu tiên <CR>), quay lại bộ đệm NERDTree ( :NERDTree <CR>) và đóng bộ đệm này ( :bd <CR>). Tôi nên cải thiện nó để ánh xạ chỉ tồn tại trong bộ đệm NERDTree nhưng tôi cảm thấy đó là một giải pháp khá xấu và tôi có thể cải thiện nó.

Ý tưởng nào sẽ là tốt nhất và tại sao? Hoặc có một lựa chọn thậm chí tốt hơn?



@Peter: Cảm ơn bình luận của bạn, bài viết khá thú vị và có lẽ tôi sẽ thử dùng netrw và khái niệm về thám hiểm phân chia. Tôi nghĩ rằng tôi hiểu lợi thế của những gì được giải thích trong bài viết nhưng vấn đề là nó không thực sự giải quyết vấn đề của tôi, nó chỉ khuyên thay đổi công cụ tôi sử dụng. Tôi không chống lại việc thay đổi thói quen của mình nhưng trước tiên tôi muốn giải quyết vấn đề của mình và sau đó thử một công cụ mới :)
statox

Liên quan, câu hỏi chưa được trả lời trên SU: superuser.com/q/821720/334516 . Có thể map d<cr> <cr>:NERDTreeClose<cr>cho bản đồ?
muru

@muru: Cảm ơn bạn, ánh xạ của bạn hoạt động tốt và có vẻ ít xấu hơn tôi :) Về câu hỏi trên SU, tôi không chắc nó hoàn toàn liên quan vì anh ấy muốn mở tệp trong bộ đệm của NERDTree trong khi tôi muốn mở nó trong một bộ đệm mới và sau đó đóng bộ đệm NERDTree: Anh ta kết thúc với một cửa sổ tách trong khi tôi muốn kết thúc với 2 bộ đệm không nằm trong một cửa sổ tách.
statox

Câu trả lời:


5

Vì câu hỏi dường như không tạo ra nhiều câu trả lời, tôi sẽ chỉ trả lời nó với gợi ý của @muru, đó là những gì tôi đã sử dụng trong một tuần trước khi tôi chuyển sang trình thám hiểm netrw. (Tất nhiên nếu câu trả lời tùy chọn tốt hơn xuất hiện, tôi sẵn sàng bỏ đánh dấu của tôi là chấp nhận và chấp nhận câu trả lời mới)

Ý tưởng là sử dụng ánh xạ folowing:

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

Việc mở tệp như được thực hiện thường xuyên và sau đó gọi hàm đóng bộ đệm NERDTree bất kể con trỏ ở đâu.

EDIT: Gần đây tôi đã chuyển trở lại NERDTree và làm lại giải pháp của mình: Ánh xạ mà tôi đề xuất trước đây đã hoạt động nhưng vì nó tồn tại trong mọi bộ đệm nên tôi phải nhấn hai lần dmỗi lần tôi muốn xóa thứ gì đó khá khó chịu. (Có lẽ tôi có thể đã thay đổi timeoutcài đặt nhưng tôi thích cách nó hiện được đặt cho tôi, tôi cũng không muốn ánh xạ nó trên tổ hợp phím khác).

Vì vậy, tôi đã thay thế giải pháp đầu tiên của mình bằng các dòng sau thành .vimrc:

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

Bằng cách này, ánh xạ chỉ được tạo trong các NERDTreebộ đệm và nó không gây rối với quy trình làm việc của tôi trong các bộ đệm khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.